publish_by_async.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. """
  2. @author: luojunhui
  3. """
  4. import asyncio
  5. import json
  6. import os.path
  7. import aiohttp
  8. import aiofiles
  9. async def write_json_file(old_video_id, new_obj):
  10. """
  11. 异步写文件
  12. :param old_video_id:
  13. :param new_obj:
  14. """
  15. filename = "vv/{}.json".format(old_video_id)
  16. async with aiofiles.open(filename, mode='w', encoding='utf-8') as f:
  17. await f.write(json.dumps(new_obj, ensure_ascii=False, indent=4))
  18. async def fetch_data(url, headers, payload):
  19. """
  20. :param url:
  21. :param headers:
  22. :param payload:
  23. :return:
  24. """
  25. async with aiohttp.ClientSession() as session:
  26. async with session.post(url, headers=headers, data=payload) as response:
  27. return await response.json()
  28. async def publish(obj):
  29. """
  30. :param obj:
  31. :return:
  32. """
  33. cover = obj['cover']
  34. uid = obj['uid']
  35. title = obj['title']
  36. video_path = obj['oss_path']
  37. old_video_id = obj['vid']
  38. path = "vv/{}.json".format(old_video_id)
  39. if os.path.exists(path):
  40. pass
  41. else:
  42. try:
  43. url = "https://vlogapi.piaoquantv.com/longvideoapi/crawler/video/send"
  44. headers = {
  45. "User-Agent": "PQSpeed/486 CFNetwork/1410.1 Darwin/22.6.0",
  46. "cookie": "JSESSIONID=4DEA2B5173BB9A9E82DB772C0ACDBC9F; JSESSIONID=D02C334150025222A0B824A98B539B78",
  47. "referer": "http://appspeed.piaoquantv.com",
  48. "token": "524a8bc871dbb0f4d4717895083172ab37c02d2f",
  49. "accept-language": "zh-CN,zh-Hans;q=0.9",
  50. "Content-Type": "application/x-www-form-urlencoded",
  51. }
  52. payload = {
  53. "coverImgPath": cover,
  54. "deviceToken": "9ef064f2f7869b3fd67d6141f8a899175dddc91240971172f1f2a662ef891408",
  55. "fileExtensions": "MP4",
  56. "loginUid": uid,
  57. "networkType": "Wi-Fi",
  58. "platform": "iOS",
  59. "requestId": "fb972cbd4f390afcfd3da1869cd7d001",
  60. "sessionId": "362290597725ce1fa870d7be4f46dcc2",
  61. "subSessionId": "362290597725ce1fa870d7be4f46dcc2",
  62. "title": title,
  63. "token": "524a8bc871dbb0f4d4717895083172ab37c02d2f",
  64. "uid": uid,
  65. "versionCode": "486",
  66. "versionName": "3.4.12",
  67. "videoFromScene": "1",
  68. "videoPath": video_path,
  69. "viewStatus": "1",
  70. }
  71. new_obj = await fetch_data(url, headers, payload)
  72. await write_json_file(old_video_id, new_obj)
  73. except:
  74. pass
  75. # return new_obj['data']['id']
  76. # 批量处理函数
  77. async def process_in_batches(task_list, batch_size):
  78. """
  79. :param task_list:
  80. :param batch_size:
  81. :return:
  82. """
  83. for i in range(0, len(task_list), batch_size):
  84. batch = task_list[i:i + batch_size] # 拆分批次
  85. tasks = [publish(params) for params in batch]
  86. results = await asyncio.gather(*tasks)
  87. print("批次{}结果:".format(i), results)
  88. async def main():
  89. with open("id_dict.json", encoding="utf-8") as f:
  90. data = json.loads(f.read())
  91. L = []
  92. for key in data:
  93. detail = data[key]
  94. detail['vid'] = key
  95. L.append(detail)
  96. task_list = L
  97. tasks = [publish(params) for params in task_list]
  98. await process_in_batches(task_list, batch_size=30)
  99. await asyncio.gather(*tasks)
  100. asyncio.run(main())