get_hot_point.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import requests
  2. import json
  3. from tenacity import retry
  4. from applications import log
  5. from applications.utils import proxy, request_retry
  6. from coldStartTasks.crawler.sohu.basic import generate_random_strings
  7. from coldStartTasks.crawler.sohu.basic import generate_random_digits
  8. from coldStartTasks.crawler.sohu.basic import get_ms_timestamp
  9. retry_desc = request_retry(retry_times=3, min_retry_delay=2, max_retry_delay=30)
  10. @retry(**retry_desc)
  11. def get_hot_point_videos():
  12. url = "https://odin.sohu.com/odin/api/blockdata"
  13. payload = json.dumps(
  14. {
  15. "pvId": f"{get_ms_timestamp()}_{generate_random_strings(7)}",
  16. "pageId": f"{get_ms_timestamp()}_{generate_random_digits(11)}_{generate_random_strings(3)}",
  17. "mainContent": {
  18. "productType": "13",
  19. "productId": "1650",
  20. "secureScore": "50",
  21. "categoryId": "47",
  22. "adTags": "11111111",
  23. "authorId": 121135924,
  24. },
  25. "resourceList": [
  26. {
  27. "tplCompKey": "tpl-card-feed-pc-data",
  28. "isServerRender": False,
  29. "isSingleAd": False,
  30. "configSource": "mp",
  31. "content": {
  32. "productId": "449975",
  33. "productType": "15",
  34. "size": 200,
  35. "pro": "0,1,3,4,5",
  36. "feedType": "XTOPIC_SYNTHETICAL",
  37. "view": "feedMode",
  38. "innerTag": "news-slice",
  39. "spm": "smpc.channel_262.tpl-card-feed-pc",
  40. "page": 1,
  41. "requestId": f"{get_ms_timestamp()}{generate_random_strings(7)}_1650",
  42. },
  43. "adInfo": {
  44. "posCode": 10069,
  45. "rule": 2,
  46. "turn": 5,
  47. "number": 1,
  48. "begin": 6,
  49. "mergeType": 0,
  50. },
  51. "context": {"mkey": ""},
  52. }
  53. ],
  54. }
  55. )
  56. headers = {
  57. "Accept": "application/json, text/javascript, */*; q=0.01",
  58. "Accept-Language": "zh,zh-CN;q=0.9",
  59. "Connection": "keep-alive",
  60. "Content-Type": "application/json;charset=UTF-8",
  61. "Origin": "https://www.sohu.com",
  62. "Referer": "https://www.sohu.com/xchannel/TURBd01EQXhOalV3",
  63. "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
  64. }
  65. try:
  66. response = requests.post(url, headers=headers, data=payload, proxies=proxy())
  67. response.raise_for_status()
  68. return response.json()
  69. except requests.exceptions.RequestException as e:
  70. log(
  71. task="sohu_hot_videos",
  72. function="get_hot_video_list",
  73. message=f"API请求失败: {e}",
  74. )
  75. except json.JSONDecodeError as e:
  76. log(
  77. task="sohu_hot_videos",
  78. function="get_hot_video_list",
  79. message=f"响应解析失败: {e}",
  80. )
  81. return None
  82. # if __name__ == "__main__":
  83. # res = get_hot_point_videos()
  84. # hot_point_videos = res["data"]["tpl-card-feed-pc-data"]["list"]
  85. # for index, item in enumerate(hot_point_videos):
  86. # print(index, item["title"])