import requests import json from tenacity import retry from applications import log from applications.utils import proxy, request_retry from coldStartTasks.crawler.sohu.basic import generate_random_strings from coldStartTasks.crawler.sohu.basic import generate_random_digits from coldStartTasks.crawler.sohu.basic import get_ms_timestamp retry_desc = request_retry(retry_times=3, min_retry_delay=2, max_retry_delay=30) @retry(**retry_desc) def get_hot_point_videos(): url = "https://odin.sohu.com/odin/api/blockdata" payload = json.dumps( { "pvId": f"{get_ms_timestamp()}_{generate_random_strings(7)}", "pageId": f"{get_ms_timestamp()}_{generate_random_digits(11)}_{generate_random_strings(3)}", "mainContent": { "productType": "13", "productId": "1650", "secureScore": "50", "categoryId": "47", "adTags": "11111111", "authorId": 121135924, }, "resourceList": [ { "tplCompKey": "tpl-card-feed-pc-data", "isServerRender": False, "isSingleAd": False, "configSource": "mp", "content": { "productId": "449975", "productType": "15", "size": 200, "pro": "0,1,3,4,5", "feedType": "XTOPIC_SYNTHETICAL", "view": "feedMode", "innerTag": "news-slice", "spm": "smpc.channel_262.tpl-card-feed-pc", "page": 1, "requestId": f"{get_ms_timestamp()}{generate_random_strings(7)}_1650", }, "adInfo": { "posCode": 10069, "rule": 2, "turn": 5, "number": 1, "begin": 6, "mergeType": 0, }, "context": {"mkey": ""}, } ], } ) headers = { "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "zh,zh-CN;q=0.9", "Connection": "keep-alive", "Content-Type": "application/json;charset=UTF-8", "Origin": "https://www.sohu.com", "Referer": "https://www.sohu.com/xchannel/TURBd01EQXhOalV3", "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", } try: response = requests.post(url, headers=headers, data=payload, proxies=proxy()) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: log( task="sohu_hot_videos", function="get_hot_video_list", message=f"API请求失败: {e}", ) except json.JSONDecodeError as e: log( task="sohu_hot_videos", function="get_hot_video_list", message=f"响应解析失败: {e}", ) return None # if __name__ == "__main__": # res = get_hot_point_videos() # hot_point_videos = res["data"]["tpl-card-feed-pc-data"]["list"] # for index, item in enumerate(hot_point_videos): # print(index, item["title"])