blogger.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """
  2. @author: luojunhui
  3. """
  4. from __future__ import annotations
  5. import json
  6. import requests
  7. from tenacity import retry
  8. from applications import log
  9. from applications.utils import proxy, request_retry
  10. from .use_js import call_js_function
  11. retry_desc = request_retry(retry_times=3, min_retry_delay=2, max_retry_delay=30)
  12. @retry(**retry_desc)
  13. def get_toutiao_account_video_list(
  14. account_id: str, cookie: str, max_behot_time=0
  15. ) -> dict | None:
  16. """
  17. get toutiao account video list
  18. :param account_id: toutiao account id
  19. :param cookie: cookie maybe expire not quite sure
  20. :param max_behot_time: max behot time
  21. :return: toutiao account video list
  22. """
  23. ms_token = "mFs9gU4FJc23gFWPvBfQxFsBRrx1xBEJD_ZRTAolHfPrae84kTEBaHQR3s8ToiLX4-U9hgATTZ2cVHlSixmj5YCTOPoVM-43gOt3aVHkxfXHEuUtTJe-wUEs%3D"
  24. query_params = [
  25. 0,
  26. 1,
  27. 14,
  28. "category=pc_user_hot&token={}&aid=24&app_name=toutiao_web&msToken={}".format(
  29. account_id, ms_token
  30. ),
  31. "",
  32. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
  33. ]
  34. a_bogus = call_js_function(query_params)
  35. url = f"https://www.toutiao.com/api/pc/list/user/feed?category=pc_profile_video&token={account_id}&max_behot_time={max_behot_time}&hot_video=0&entrance_gid=&aid=24&app_name=toutiao_web&msToken={ms_token}&a_bogus={a_bogus}"
  36. headers = {
  37. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
  38. "cookie": cookie,
  39. }
  40. try:
  41. response = requests.get(url, headers=headers, proxies=proxy())
  42. response.raise_for_status()
  43. return response.json()
  44. except requests.exceptions.RequestException as e:
  45. log(
  46. task="toutiao account crawler",
  47. function="get_toutiao_account_video_list",
  48. message=f"API请求失败: {e}",
  49. data={"account_id": account_id},
  50. )
  51. except json.JSONDecodeError as e:
  52. log(
  53. task="toutiao account crawler",
  54. function="get_toutiao_account_video_list",
  55. message=f"响应解析失败: {e}",
  56. data={"account_id": account_id},
  57. )
  58. return None