demo.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/6/27
  4. import datetime
  5. import json
  6. import os
  7. import time
  8. from datetime import date
  9. import requests
  10. import urllib3
  11. from main.common import Common
  12. from main.feishu_lib import Feishu
  13. class Demo:
  14. @classmethod
  15. def feishu(cls):
  16. value = Feishu.get_range_value("xiaoniangao", "monitor", "N7e2yI", "B4:B4")
  17. print(type(value))
  18. print(value)
  19. @classmethod
  20. def today(cls):
  21. today = datetime.datetime.now().strftime("%Y-%m-%d")
  22. print(today)
  23. value = Feishu.get_range_value("xiaoniangao", "monitor", "N7e2yI", "P1:P1")
  24. print(value)
  25. # print(Feishu.update_values("xiaoniangao", "monitor", "N7e2yI", "P1:P1", [[str(today)]]))
  26. @classmethod
  27. def lists(cls):
  28. list1 = [6445, 52077, 15333]
  29. list2 = [[x] for x in list1]
  30. print(list2)
  31. @classmethod
  32. def get_sheet(cls):
  33. xiaoniangao_sheet = Feishu.get_values_batch("xiaoniangao", "monitor", "N7e2yI")
  34. video_id = xiaoniangao_sheet[1][6]
  35. user_id = xiaoniangao_sheet[1][9]
  36. user_mid = xiaoniangao_sheet[1][10]
  37. print(video_id)
  38. print(user_id)
  39. print(user_mid)
  40. @classmethod
  41. def get_session(cls):
  42. # charles 抓包文件保存目录
  43. charles_file_dir = "../chlsfiles/"
  44. if int(len(os.listdir(charles_file_dir))) == 1:
  45. Common.logger("kanyikan").info("未找到chlsfile文件,等待60s")
  46. time.sleep(60)
  47. else:
  48. try:
  49. # 目标文件夹下所有文件
  50. all_file = sorted(os.listdir(charles_file_dir))
  51. # 获取到目标文件
  52. old_file = all_file[-1]
  53. # 分离文件名与扩展名
  54. new_file = os.path.splitext(old_file)
  55. # 重命名文件后缀
  56. os.rename(os.path.join(charles_file_dir, old_file),
  57. os.path.join(charles_file_dir, new_file[0] + ".txt"))
  58. with open(charles_file_dir + new_file[0] + ".txt", encoding='utf-8-sig', errors='ignore') as f:
  59. contents = json.load(f, strict=False)
  60. if "search.weixin.qq.com" in [text['host'] for text in contents]:
  61. for text in contents:
  62. if text["host"] == "search.weixin.qq.com" \
  63. and text["path"] == "/cgi-bin/recwxa/recwxagetunreadmessagecnt":
  64. sessions = text["query"].split("session=")[-1].split("&wxaVersion=")[0]
  65. if "&vid" in sessions:
  66. session = sessions.split("&vid")[0]
  67. return session
  68. elif "&offset" in sessions:
  69. session = sessions.split("&offset")[0]
  70. return session
  71. elif "&wxaVersion" in sessions:
  72. session = sessions.split("&wxaVersion")[0]
  73. return session
  74. elif "&limit" in sessions:
  75. session = sessions.split("&limit")[0]
  76. return session
  77. elif "&scene" in sessions:
  78. session = sessions.split("&scene")[0]
  79. return session
  80. elif "&count" in sessions:
  81. session = sessions.split("&count")[0]
  82. return session
  83. elif "&channelid" in sessions:
  84. session = sessions.split("&channelid")[0]
  85. return session
  86. elif "&subscene" in sessions:
  87. session = sessions.split("&subscene")[0]
  88. return session
  89. elif "&clientVersion" in sessions:
  90. session = sessions.split("&clientVersion")[0]
  91. return session
  92. elif "&sharesearchid" in sessions:
  93. session = sessions.split("&sharesearchid")[0]
  94. return session
  95. elif "&nettype" in sessions:
  96. session = sessions.split("&nettype")[0]
  97. return session
  98. elif "&switchprofile" in sessions:
  99. session = sessions.split("&switchprofile")[0]
  100. return session
  101. elif "&switchnewuser" in sessions:
  102. session = sessions.split("&switchnewuser")[0]
  103. return session
  104. else:
  105. return sessions
  106. else:
  107. Common.logger("kanyikan").info("未找到 session,10s后重新获取")
  108. time.sleep(10)
  109. cls.get_session()
  110. except Exception as e:
  111. Common.logger("kanyikan").exception("获取 session 异常,30s后重试:{}", e)
  112. time.sleep(30)
  113. cls.get_session()
  114. @classmethod
  115. def get_video_info(cls, video_id):
  116. url = "https://search.weixin.qq.com/cgi-bin/recwxa/recwxagetonevideoinfo?"
  117. param = {
  118. "session": cls.get_session(),
  119. "vid": video_id,
  120. "wxaVersion": "3.9.2",
  121. "channelid": "208201",
  122. "scene": "32",
  123. "subscene": "1089",
  124. "model": "iPhone 11<iPhone12,1>14.7.1",
  125. "clientVersion": "8.0.18",
  126. "sharesearchid": "447665862521758270",
  127. "sharesource": "-1"
  128. }
  129. urllib3.disable_warnings()
  130. r = requests.get(url=url, params=param, verify=False)
  131. video_id = r.json()["data"]['vid']
  132. video_title = r.json()["data"]['title']
  133. play_cnt = r.json()["data"]["played_cnt"]
  134. shared_cnt = r.json()["data"]["shared_cnt"]
  135. if "items" not in r.json()["data"]["play_info"]:
  136. video_url = r.json()["data"]["play_info"][-1]["play_url"]
  137. # video_url = r.json()["data"]["play_info"]
  138. else:
  139. video_url = r.json()["data"]["play_info"]["items"][-1]["play_url"]
  140. # video_url = r.json()["data"]["play_info"]
  141. print(f"video_id:{video_id}")
  142. print(f"video_title:{video_title}")
  143. print(f"play_cnt:{play_cnt}")
  144. print(f"shared_cnt:{shared_cnt}")
  145. print(f"video_url:{video_url}")
  146. # response = {
  147. # 'data': {
  148. # 'collection_info': {
  149. # 'collectionid': 'mmsearchrecwxacollection_496906082_1641976100173',
  150. # 'episode_count': 0,
  151. # 'img': '',
  152. # 'latest_episode': 0,
  153. # 'size': 0,
  154. # 'title': ''
  155. # },
  156. # 'comment_cnt': 54,
  157. # 'composite_type': 0,
  158. # 'composite_video_info': {
  159. # 'first_composite_img_url': ''
  160. # },
  161. # 'cover_url': 'http://mmbiz.qpic.cn/wx_search/duc2TvpEgSTib1eic8eJ1MrictHrfvedFwfUGYhyjlJicpnrTrygHcSuTg/0',
  162. # 'duration': 210,
  163. # 'height': 1200,
  164. # 'isUGCVideo': True,
  165. # 'is_expose_comment': False,
  166. # 'is_following': False,
  167. # 'is_forbid_comment': False,
  168. # 'is_livereserve': False,
  169. # 'item_type': 16,
  170. # 'liked': False,
  171. # 'liked_cnt': 1865,
  172. # 'openid': 'oh_m45TTUoolLfj0x0vHl0QdlSw8',
  173. # 'owner_head_image': 'http://mmbiz.qpic.cn/wx_search/duc2TvpEgSRgbVcqh8gWWmQicsib3HJ97O6zfzwiazWMyIIzkKJxluhgQ/0',
  174. # 'play_icon_cover_url': 'http://mmbiz.qpic.cn/wx_search/Q3auHgzwzM6hiaHcSicmACTMfgzFdsLu77ovZnnx8MSLHhz2vYTxiaUfcrllqxW5t0bfNArKjOJBxw/0',
  175. # 'play_info': {
  176. # 'cdn_gif_url': '',
  177. # 'cdn_source_type': 4,
  178. # 'end_play_time_in_ms': 0,
  179. # 'video_api': '',
  180. # 'watermark_type': 0
  181. # },
  182. # 'played_cnt': 347350,
  183. # 'shared_cnt': 35463,
  184. # 'size': 0,
  185. # 'status': 10,
  186. # 'title': '太恶心了_现在的外卖,正在毁掉我们的下一代_Merge',
  187. # 'upload_time': 1647850532,
  188. # 'user_info': {
  189. # 'headimg_url': 'http://mmbiz.qpic.cn/wx_search/duc2TvpEgSRgbVcqh8gWWmQicsib3HJ97O6zfzwiazWMyIIzkKJxluhgQ/0',
  190. # 'nickname': '代替不了',
  191. # 'openid': 'oh_m45TTUoolLfj0x0vHl0QdlSw8'
  192. # },
  193. # 'vid': 'ugc_b42rvhr',
  194. # 'video_type': 1,
  195. # 'width': 720
  196. # },
  197. # 'errcode': 0,
  198. # 'msg': 'ok',
  199. # 'retcode': 0
  200. # }
  201. @classmethod
  202. def get_dir(cls):
  203. charles_file_dir = "../chlsfiles/"
  204. print(charles_file_dir)
  205. if __name__ == "__main__":
  206. demo = Demo()
  207. # demo.feishu()
  208. # demo.today()
  209. # demo.lists()
  210. # demo.get_sheet()
  211. demo.get_video_info("ugc_by76ele")
  212. # demo.get_dir()