demo.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/3/31
  4. import os
  5. from datetime import date, timedelta
  6. from loguru import logger
  7. import datetime
  8. import json
  9. import time
  10. import requests
  11. import urllib3
  12. from main.common import Common
  13. from main.feishu_lib import Feishu
  14. class Demo:
  15. @classmethod
  16. def demo1(cls):
  17. download_video_resolution = "720*1280"
  18. download_video_width = download_video_resolution.split("*")[0]
  19. download_video_height = download_video_resolution.split("*")[-1]
  20. print(download_video_resolution)
  21. print(download_video_width)
  22. print(download_video_height)
  23. @classmethod
  24. def time(cls):
  25. # 推荐
  26. time1 = int(time.time()*1000)
  27. print(time1)
  28. # 不推荐
  29. time2 = round(time.time())*1000
  30. print(time2)
  31. # 统一获取当前时间
  32. now = datetime.datetime.now()
  33. print(type(now))
  34. print(f"now:{now}")
  35. # 昨天
  36. yesterday = (date.today() + timedelta(days=-1)).strftime("%Y-%m-%d")
  37. print(type(yesterday))
  38. print(f"昨天:{yesterday}")
  39. # 今天
  40. today = date.today()
  41. print(type(today))
  42. print(f"今天:{today}")
  43. # 明天
  44. tomorrow = (date.today() + timedelta(days=1)).strftime("%Y-%m-%d")
  45. print(type(tomorrow))
  46. print(f"明天:{tomorrow}")
  47. @classmethod
  48. def demo2(cls):
  49. s = "0"
  50. print(int(int(s) / 10))
  51. @classmethod
  52. def edit_str(cls):
  53. title_list = ["#上海战疫 上海累计感染超20万!这条被淹没的热搜,令全网泪目… 疫情一定要攻克,但所有人都不该遗忘这些弱者。#上海累计报告本土阳性感染者超20万例 #农民工",
  54. "#重庆地火村 #地火村 #旅行",
  55. "第79集 | 湖南最值得去的六个景区,每一个都是绝色…… #快手带你去旅行 #旅游胜地 #旅游",
  56. "霸王条款不废除,断供有多可怕。 #涨知识 #生活小常识 # 生活常识",
  57. "秦始皇还活着?地宫中有不明物体缓缓移动 #历史 #秦始皇 #新春寄语 @快手热点(O40300129)",
  58. "#夏日荷花 #国花牡丹 #昙花一现",
  59. "国内最良心的8个景区,这才是景区最该有的样子,看看你去过几个? #旅行  #旅游 ",
  60. "狗子呆在水里三天三夜,终于练成捕鱼神功,一口一个大鲶鱼 #狗狗  #神奇动物  #快手放映室  @快手热点(O40300129) ",
  61. "#集结吧光合创作者 养鸡小伙:喂鸡摆出各种造型,被称为鸡司令。",
  62. "89岁农民老艺人自食其力,街头卖艺表演“捏碎碗片”绝技,现场听到咔吱咔吱响,人狠功夫硬!这功夫已失传,以后再看不到了!#集结吧光合创作者 #农民 #街头表演 @快手光合作者助手(O40300118) @快手热点(O40300129) @我要上热门(O1907752910)",
  63. "我国最贵最有名的三棵树,你知道哪三棵吗?#旅游 #旅行攻略 #黄山迎客松",
  64. "潘长江带来热舞,蔡明 郭达也来了!太嗨了!歌词太棒了! @快手涨粉助手(O1815060199) @快手热点(O40300129) @快手平台帐号(O90041) #潘长江 #搞笑 #集结吧光合创作者",
  65. "#带你看世界 给大家带来一期烟花盛宴,希望大家能够喜欢,带上你的那个她一起来看吧 #烟花 #视觉震撼"
  66. ]
  67. for title in title_list:
  68. title_split1 = title.split(" #")
  69. if title_split1[0] != "":
  70. title1 = title_split1[0]
  71. else:
  72. title1 = title_split1[0]
  73. title_split2 = title1.split(" #")
  74. if title_split2[0] != "":
  75. title2 = title_split2[0]
  76. else:
  77. title2 = title_split2[-1]
  78. title_split3 = title2.split("@")
  79. if title_split3[0] != "":
  80. title3 = title_split3[0]
  81. else:
  82. title3 = title_split3[-1]
  83. print(title3)
  84. title = title3.replace("\n", "").replace("#", "").replace("/", "").replace("\r", "")
  85. print(title)
  86. # new_title = re.compile(r'(#)(.*)(#)')
  87. # print(new_title.sub(r'', title))
  88. @classmethod
  89. def sensitive_words(cls):
  90. title_list = ["#上海战疫 上海累计感染超20万!这条被淹没的热搜,令全网泪目… 疫情一定要攻克,但所有人都不该遗忘这些弱者。#上海累计报告本土阳性感染者超20万例 #农民工",
  91. "#重庆地火村 #地火村 #旅行",
  92. "第79集 | 湖南最值得去的六个景区,每一个都是绝色…… #快手带你去旅行 #旅游胜地 #旅游",
  93. "霸王条款不废除,断供有多可怕。 #涨知识 #生活小常识 # 生活常识",
  94. "秦始皇还活着?地宫中有不明物体缓缓移动 #历史 #秦始皇 #新春寄语 @快手热点(O40300129)",
  95. "#夏日荷花 #国花牡丹 #昙花一现",
  96. "国内最良心的8个景区,这才是景区最该有的样子,看看你去过几个? #旅行  #旅游 ",
  97. "狗子呆在水里三天三夜,终于练成捕鱼神功,一口一个大鲶鱼 #狗狗  #神奇动物  #快手放映室  @快手热点(O40300129) ",
  98. "#集结吧光合创作者 养鸡小伙:喂鸡摆出各种造型,被称为鸡司令。",
  99. "89岁农民老艺人自食其力,街头卖艺表演“捏碎碗片”绝技,现场听到咔吱咔吱响,人狠功夫硬!这功夫已失传,以后再看不到了!#集结吧光合创作者 #农民 #街头表演 @快手光合作者助手(O40300118) @快手热点(O40300129) @我要上热门(O1907752910)",
  100. "我国最贵最有名的三棵树,你知道哪三棵吗?#旅游 #旅行攻略 #黄山迎客松",
  101. "潘长江带来热舞,蔡明 郭达也来了!太嗨了!歌词太棒了! @快手涨粉助手(O1815060199) @快手热点(O40300129) @快手平台帐号(O90041) #潘长江 #搞笑 #集结吧光合创作者",
  102. "#带你看世界 给大家带来一期烟花盛宴,希望大家能够喜欢,带上你的那个她一起来看吧 #烟花 #视觉震撼"
  103. ]
  104. print(cls.kuaishou_sensitive_words())
  105. for title in title_list:
  106. for word in cls.kuaishou_sensitive_words():
  107. if word in title:
  108. print(f"敏感词:{word}")
  109. print(f"敏感词视频:{title}")
  110. cls.kuaishou_sensitive_words().remove(word)
  111. else:
  112. print(f"正常视频:{title}")
  113. cls.kuaishou_sensitive_words().remove(word)
  114. @classmethod
  115. def logger(cls):
  116. # 日志路径
  117. log_dir = r"./logs/"
  118. log_path = os.getcwd() + os.sep + log_dir
  119. if not os.path.isdir(log_path):
  120. os.makedirs(log_path)
  121. # 日志参数
  122. log_name = time.strftime("%Y-%m-%d", time.localtime(time.time())) + '.log'
  123. # 日志不打印到控制台
  124. logger.remove(handler_id=None)
  125. # logger.add(log_dir+log_name, format="{time} {level} {message}",
  126. # level="INFO", rotation='5 MB', encoding='utf-8')
  127. logger.add(log_dir+log_name, level="INFO", rotation='13:56')
  128. return logger
  129. @classmethod
  130. def download_video(cls):
  131. video_url = "https://v2-h5.kwaicdn.com/ksc1/JEq3hgQmbaJq_sHzHNQnYGPNJ5XRHnUJ" \
  132. "eT1nP2eHeVEnOkXxfdBGpkvLy9ZCTSLMjiRJqiUftrJgi5qZrrz-ROSGhNwhUHgX2Z" \
  133. "u4XgAqNZS5Kp0p3GzFdsB9jgpH3VBtmBVwq4l8Or0YZV6MySJmh6mbVPqePrLdeQ9GxY" \
  134. "yvMbj4Ds2Z9yXQ3X9knED5xafh.mp4?clientCacheKey=3xkisjhn2tnwf5w_b.mp4&tt" \
  135. "=b&di=de8075d0&bp=60000&pkey=AAWdtvPdTRXTA9T3NIXmzYfB0em4XZCTrPJZkmFerVrc" \
  136. "RFtBbzkvz2ZUVuiUJK3VrRt3w2_cn2y7tQr-dpqkeM7HInHNkaGnDbnFXe530Zm65RfEdzjzNx_ErSTX5YonXTg"
  137. Common.download_method("video", "video", video_url)
  138. @classmethod
  139. def time2(cls):
  140. time1 = "2022/06/01 18:50:12"
  141. timeStamp = int(time.mktime(time.strptime(time1, "%Y/%m/%d %H:%M:%S")))
  142. print(timeStamp)
  143. @classmethod
  144. def get_sheet(cls):
  145. sheet = Feishu.get_values_batch("follow", "kuaishou", "MGMsHE")
  146. for i in range(1, len(sheet)):
  147. uid = sheet[i][0]
  148. print(uid)
  149. # 小程序:关注/取消关注用户
  150. @classmethod
  151. def follow_unfollow(cls, log_type, is_follow):
  152. try:
  153. # 已关注的用户列表 uids
  154. uid_sheet = Feishu.get_values_batch(log_type, "kuaishou", "MGMsHE")
  155. for i in range(1, len(uid_sheet)):
  156. uid = uid_sheet[i][0]
  157. nick = uid_sheet[i][1]
  158. url = "https://wxmini-api.uyouqu.com/rest/wd/wechatApp/relation/follow?"
  159. headers = {
  160. "content-type": "application/json",
  161. "Accept-Encoding": "gzip,compress,br,deflate",
  162. "User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X)'
  163. ' AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'
  164. ' MicroMessenger/8.0.20(0x18001442) NetType/WIFI Language/zh_CN',
  165. "Referer": "https://servicewechat.com/wx79a83b1a1e8a7978/595/page-frame.html"
  166. }
  167. params = {
  168. "__NS_sig3": "baaaeedda97f238b91e7e4e593b0bec8406b379ffbfbf9f9f6f7f4ee",
  169. "__NS_sig3_origin": "3sCt3iAAAAAAAAAAAAAAAwEQBv2b8ewCiEHD8iAAAAAJi0p4iunP2uUH /x7m67D394uxv2sVV0N0ZsfmbHMpA=="
  170. }
  171. cookies = {
  172. "did": "wxo_89af779e76d329da37ea78c277c8231d04c4",
  173. "preMinaVersion": "v3.109.0",
  174. "sid": "kuaishou.wechat.app",
  175. "appId": "ks_wechat_small_app_2",
  176. "clientid": "13",
  177. "client_key": "f60ac815",
  178. "kpn": "WECHAT_SMALL_APP",
  179. "kpf": "OUTSIDE_ANDROID_H5",
  180. "language": "zh_CN",
  181. "smallAppVersion": "v3.114.0",
  182. "session_key": "123063b798c706796d4e71a229547fee14dabdecb85d119c5daf99720d496e428f529d03bc9dc1a53a8fab307b723b98d4a41a129df1be81f6bd42648be78e2f1e3b51c82bb92220bd0a7fb0683326fe9e683d1dbc4477fa82ecf2d873e008d8292098cbf9b10ced28053001",
  183. "unionid": "V2:1230e9a914f904112e011801770f38cae60271569a62736a2ef09dd7ca29ae045e33e6f78bdefb82afeb667ed45d673aa4901a122bee54a2d0d74e96be5662a33544727a0aec2220a4eb707584694c0b041940f0508561ced8d6ff67cf9ec9b375e24c6cd059633a28053001",
  184. "eUserStableOpenId": "123064f8109ddf7d6c901e62f30735f32d4cd4a3612c91f64a97cac9d2e1cf78b4df71461899fded9683bcda048f882b74bd1a1230b7186912344668bc4685735a9da9d9724a2220bf6363e2c4cc19738f2206e8c8c64afc5b310866590ceeb44c41abd6bf4e1d1d28053001",
  185. "openId": "o5otV4_NGQt4gLzlk5CMDfTApN_g",
  186. "eOpenUserId": "124073d987dfc4dc5c544f8056bf54b83ff2d4a1042cbd3f974e088a05826320ff7b1655aacae3bad8629e09c3248978309c6642d9c1af5b8b65ef4ac4851bb8c9141a12bb92bd9c2290489ba7a733708a4a446de8382220dc87c9a1a5c3a0c359645e188828c8ae25ac716c35f90cb47df44362b760b8e928053001",
  187. "kuaishou.wechat.app_st": "ChZrdWFpc2hvdS53ZWNoYXQuYXBwLnN0EqAB6h_yylsMxiWgIgtBf1xjZYXDmsMvJ1B5J75XwcZ3X3CSJ6TCmJjZ8Mz1FFTQ7yEB3wrx3F40vuUtxKyn0Fsi4Jji2aTnKRHSQySNGSOiveeEWDyFnI9RqVxnaTrfMGF7jqBrqjk_ENl93vZTEL2wfYH1UlWIXiZoVNnBVcP_sXEpfr3dAZ3jUFXRG4XtVODrxpVOeF_gZTObCke6RoT-jBoSwdJwnczeQoOaE2Nj6iF-69fWIiCrxCOlzdzE2smcQ4sMv0VyLAHOTvQk9Y34pbuIsOjz7SgFMAE",
  188. "passToken": "ChNwYXNzcG9ydC5wYXNzLXRva2VuEpABDZ3HmbtEmdzkv2_Bg9ZVBF9DtJSeYLHFurm1wx-4NmeiF_l-AfaIuMtUa0LeVhYH4XqXYxksQgS0UYzqbKyk2UF-rWn9Z0x-fawxyWB6_-fdiPtwq2lJOTU4Dcd1jDhsxUkoxSCmIyhNHC-3TCDxvIsWwumW9gYpxL5rQOlxWRVilCQ9RomJWmirVumgkgLBGhKgKyzmNjRDxLfpDU5SPFhJmG0iIIfnORJeG0u1E8FQjuNKf7CP1hA372VOpLRiYaaJxCj-KAUwAQ",
  189. "userId": "1921947321"
  190. }
  191. if is_follow == "follow":
  192. ftype = 1
  193. elif is_follow == "unfollow":
  194. ftype = 2
  195. else:
  196. ftype = 1
  197. json_text = {
  198. "touid": uid,
  199. "ftype": ftype,
  200. "page_ref": 84
  201. }
  202. urllib3.disable_warnings()
  203. r = requests.post(url=url, headers=headers, cookies=cookies, params=params, json=json_text, verify=False)
  204. if is_follow == "follow":
  205. if r.json()["result"] != 1:
  206. Common.logger(log_type).warning("{}", r.text)
  207. else:
  208. Common.logger(log_type).info("关注:{}, {}", nick, r)
  209. else:
  210. if r.json()["result"] != 1:
  211. Common.logger(log_type).warning("{}", r.text)
  212. else:
  213. Common.logger(log_type).info("取消关注:{}, {}", nick, r)
  214. time.sleep(1)
  215. except Exception as e:
  216. Common.logger(log_type).error("关注/取消关注异常:{}", e)
  217. if __name__ == "__main__":
  218. demo = Demo()
  219. # demo.get_sheet()
  220. demo.follow_unfollow("follow", "follow")
  221. # pass