main.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import json
  2. import os
  3. import signal
  4. import sys
  5. import time
  6. from conf.config import logger,OUTPUT
  7. from dp.page import page
  8. from DrissionPage import ChromiumPage
  9. from bottle import route, run, template,static_file,post,request
  10. import threading
  11. def get_url_enterdata(tab:ChromiumPage, url):
  12. # url = input("输入直播间地址(如 https://live.douyin.com/1234568):")
  13. tab.listen.start('live.douyin.com/webcast/room/web/enter')
  14. tab.get(url)
  15. tab._wait_loaded(5)
  16. logger.info(f"页面加载成功")
  17. res = tab.listen.wait(count=1,timeout=3.5, raise_err=True)
  18. data = res.response.body.get("data")
  19. if not data:
  20. os._exit(1)
  21. with open(os.path.join(OUTPUT, "data.json"), 'w') as f:
  22. json.dump(data, f)
  23. tab.listen.stop()
  24. return data
  25. @route('/')
  26. def index():
  27. return static_file('dp/index.html', root='./')
  28. @post('/live_url')
  29. def input_url():
  30. live_url = request.forms.get('live_url')
  31. if live_url:
  32. # 这里可以添加您的逻辑,比如日志记录、数据处理等
  33. logger.info(f"input_url {live_url}")
  34. tab = page.new_tab()
  35. try:
  36. data = get_url_enterdata(tab, live_url)
  37. display_value, anchor = get_anchor(data.get("data")[0])
  38. name = data.get("user").get("nickname")
  39. ret = f"主播: {name} | {anchor} ({display_value})"
  40. except Exception as e:
  41. logger.error(e)
  42. ret = f"获取数据失败 {e}"
  43. tab.close()
  44. logger.info(ret)
  45. return ret
  46. else:
  47. return "live_url 参数未提供"
  48. def load_index():
  49. import DrissionPage
  50. page.get("http://localhost:9230")
  51. page._wait_loaded(5)
  52. page.tab
  53. while True:
  54. try:
  55. page.tabs_count
  56. except DrissionPage.errors.PageDisconnectedError as e:
  57. logger.info(f"{e}")
  58. break
  59. except Exception as e:
  60. logger.info(f"{e}")
  61. break
  62. time.sleep(1)
  63. logger.info(f"退出程序")
  64. os._exit(0)
  65. def main():
  66. page_index = threading.Thread(target=load_index)
  67. page_index.start()
  68. run(host='localhost', port=9230, debug=logger.debug)
  69. logger.info(f"server is stop")
  70. if __name__ == "__main__":
  71. main()
  72. page.quit()