|
@@ -1,254 +0,0 @@
|
|
|
-# -*- coding: utf-8 -*-
|
|
|
-# @Author: wangkun
|
|
|
-# @Time: 2022/6/17
|
|
|
-import json
|
|
|
-import os
|
|
|
-import sys
|
|
|
-import time
|
|
|
-import requests
|
|
|
-import urllib3
|
|
|
-sys.path.append(os.getcwd())
|
|
|
-from main.common import Common
|
|
|
-# from main.get_feeds import get_feeds
|
|
|
-from main.kanyikan_recommend_publish import Publish
|
|
|
-from main.feishu_lib import Feishu
|
|
|
-
|
|
|
-proxies = {"http": None, "https": None}
|
|
|
-
|
|
|
-
|
|
|
-class RecommendPlaySendtime:
|
|
|
-
|
|
|
- # 抓取基础规则,写入recommend_feeds表
|
|
|
- @staticmethod
|
|
|
- def send_time_rule(send_time_width, send_time_height, send_time_duration, send_time_share_cnt):
|
|
|
- """
|
|
|
- 1.分辨率,宽或者高 >= 720 or == 0
|
|
|
- 2.时长 >= 60s
|
|
|
- 3.视频播放量 >= 0
|
|
|
- """
|
|
|
- if int(send_time_width) >= 720 or int(send_time_height) >= 720:
|
|
|
- if int(send_time_duration) >= 60:
|
|
|
- if int(send_time_share_cnt) > 0:
|
|
|
- return True
|
|
|
- else:
|
|
|
- return False
|
|
|
- else:
|
|
|
- return False
|
|
|
- else:
|
|
|
- return False
|
|
|
-
|
|
|
- @classmethod
|
|
|
- def download_play_sendtime(cls, env):
|
|
|
- """
|
|
|
- - 7日内播放大于2万
|
|
|
- - 或播放大于15万
|
|
|
- :param env: 测试环境:dev;正式环境:prod
|
|
|
- :return: 下载并上传视频
|
|
|
- """
|
|
|
- try:
|
|
|
- recommend_feeds = Feishu.get_values_batch("recommend", "kanyikan", "SdCHOM")
|
|
|
- for i in range(1, len(recommend_feeds)+1):
|
|
|
- time.sleep(1)
|
|
|
- sendtime_session = Common.get_session("recommend")
|
|
|
- download_video_id = recommend_feeds[i][2]
|
|
|
- download_video_title = recommend_feeds[i][3]
|
|
|
- url = "https://search.weixin.qq.com/cgi-bin/recwxa/recwxagetonevideoinfo?"
|
|
|
- param = {
|
|
|
- "session": sendtime_session,
|
|
|
- "vid": download_video_id,
|
|
|
- "wxaVersion": "3.9.2",
|
|
|
- "channelid": "208201",
|
|
|
- "scene": "32",
|
|
|
- "subscene": "1089",
|
|
|
- "model": "iPhone 11<iPhone12,1>14.7.1",
|
|
|
- "clientVersion": "8.0.18",
|
|
|
- "sharesearchid": "447665862521758270",
|
|
|
- "sharesource": "-1"
|
|
|
- }
|
|
|
- urllib3.disable_warnings()
|
|
|
- r = requests.get(url=url, params=param, proxies=proxies, verify=False)
|
|
|
- response = json.loads(r.content.decode("utf8"))
|
|
|
- if "data" not in response:
|
|
|
- Common.logger("recommend").error("获取视频info时错误,删除该视频:{}", download_video_title)
|
|
|
- # 删除行或列,可选 ROWS、COLUMNS
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- else:
|
|
|
- data = response["data"]
|
|
|
- v_duration = data["duration"]
|
|
|
- v_play_cnt_sendtime = data["played_cnt"]
|
|
|
- v_comment_cnt = data["comment_cnt"]
|
|
|
- v_liked_cnt = data["liked_cnt"]
|
|
|
- v_shared_cnt = data["shared_cnt"]
|
|
|
- v_width = data["width"]
|
|
|
- v_height = data["height"]
|
|
|
- v_resolution = str(v_width) + "*" + str(v_height)
|
|
|
- v_send_date = data["upload_time"]
|
|
|
- v_username = data["user_info"]["nickname"].strip().replace("\n", "")
|
|
|
- v_user_id = data["openid"]
|
|
|
- v_user_cover = data["user_info"]["headimg_url"]
|
|
|
- v_video_cover = data["cover_url"]
|
|
|
- if "items" not in data["play_info"]:
|
|
|
- if len(data["play_info"]) > 2:
|
|
|
- download_url_sendtime = data["play_info"][2]["play_url"]
|
|
|
- else:
|
|
|
- download_url_sendtime = data["play_info"][0]["play_url"]
|
|
|
- else:
|
|
|
- if len(data["play_info"]["items"]) > 2:
|
|
|
- download_url_sendtime = data["play_info"]["items"][2]["play_url"]
|
|
|
- else:
|
|
|
- download_url_sendtime = data["play_info"]["items"][0]["play_url"]
|
|
|
-
|
|
|
- Common.logger("recommend").info("正在判断第{}行,视频:{}", i, download_video_title)
|
|
|
-
|
|
|
- # 判断无效视频
|
|
|
- if download_video_id == "" \
|
|
|
- or download_video_id is None\
|
|
|
- and download_video_title == ""\
|
|
|
- or download_video_title is None\
|
|
|
- and v_duration == "" \
|
|
|
- and v_play_cnt_sendtime == ""\
|
|
|
- and v_send_date == ""\
|
|
|
- and v_user_cover == "" \
|
|
|
- and v_video_cover == ""\
|
|
|
- and download_url_sendtime == "":
|
|
|
- Common.logger("recommend").info("无效视频,删除该视频信息:{}", download_video_title)
|
|
|
- # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- elif v_send_date < 1622476800:
|
|
|
- Common.logger("recommend").info(
|
|
|
- "发布时间小于2021年6月:{},{}", download_video_title, v_send_date)
|
|
|
- # 删除行或列,可选 ROWS、COLUMNS
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- # 抓取基础规则
|
|
|
- elif cls.send_time_rule(v_width, v_height, v_duration, v_play_cnt_sendtime) is False:
|
|
|
- Common.logger("recommend").info("不满足发布时间榜下载规则,删除该视频信息:{}", download_video_title)
|
|
|
- # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- # 不满足规则:发布时间 > 7 天 and 播放量 < 150000
|
|
|
- elif int(time.time()) - int(v_send_date) > 604800 and int(v_play_cnt_sendtime) < 80000:
|
|
|
- # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
|
|
|
- Common.logger("recommend").info("播放量:{} < 150000", int(v_play_cnt_sendtime))
|
|
|
- # 删除行或列,可选 ROWS、COLUMNS
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- # 不满足规则:发布时间 <= 7 天 and 播放量 < 20000
|
|
|
- elif int(time.time()) - int(v_send_date) <= 604800 and int(v_play_cnt_sendtime) < 10000:
|
|
|
- # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
|
|
|
- Common.logger("recommend").info("视频7天播放量:{} < 20000", int(v_play_cnt_sendtime))
|
|
|
- # 删除行或列,可选 ROWS、COLUMNS
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- elif download_video_id in [j for m in Feishu.get_values_batch(
|
|
|
- "recommend", "kanyikan", "20ce0c") for j in m]:
|
|
|
- Common.logger("recommend").info("视频已下载,删除该视频信息:{}", download_video_title)
|
|
|
- # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- elif download_video_id in [j for m in Feishu.get_values_batch(
|
|
|
- "recommend", "kanyikan", "ho98Ov") for j in m]:
|
|
|
- Common.logger("recommend").info("视频已下载,删除该视频信息:{}", download_video_title)
|
|
|
- # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
- else:
|
|
|
- Common.logger("recommend").info("开始下载视频:{}", download_video_title)
|
|
|
-
|
|
|
- # 下载封面
|
|
|
- Common.download_method("recommend", "cover", download_video_title, v_video_cover)
|
|
|
- # 下载视频
|
|
|
- Common.download_method("recommend", "video", download_video_title, download_url_sendtime)
|
|
|
- # 保存视频信息到 "./files/{视频标题}/videoinfo.txt"
|
|
|
- with open(r"./videos/" + download_video_title +
|
|
|
- "/" + "info.txt", "a", encoding="utf8") as f_a2:
|
|
|
- f_a2.write(str(download_video_id) + "\n" +
|
|
|
- str(download_video_title) + "\n" +
|
|
|
- str(v_duration) + "\n" +
|
|
|
- str(v_play_cnt_sendtime) + "\n" +
|
|
|
- str(v_comment_cnt) + "\n" +
|
|
|
- str(v_liked_cnt) + "\n" +
|
|
|
- str(v_shared_cnt) + "\n" +
|
|
|
- str(v_resolution) + "\n" +
|
|
|
- str(v_send_date) + "\n" +
|
|
|
- str(v_username) + "\n" +
|
|
|
- str(v_user_cover) + "\n" +
|
|
|
- str(download_url_sendtime) + "\n" +
|
|
|
- str(v_video_cover) + "\n" +
|
|
|
- str(sendtime_session))
|
|
|
- Common.logger("recommend").info("==========视频信息已保存至info.txt==========")
|
|
|
-
|
|
|
- # 上传该视频
|
|
|
- Common.logger("recommend").info("开始上传视频:{}", download_video_title)
|
|
|
- our_video_id = Publish.upload_and_publish("recommend", env, "send_time")
|
|
|
- our_video_link = "https://admin.piaoquantv.com/cms/post-detail/" + str(our_video_id) + "/info"
|
|
|
- Common.logger("recommend").info("视频上传完成:{}", download_video_title)
|
|
|
-
|
|
|
- # 保存视频 ID 到云文档:
|
|
|
- # https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=20ce0c
|
|
|
- Common.logger("recommend").info("保存视频ID至云文档:{}", download_video_title)
|
|
|
- # 看一看+ ,视频ID工作表,插入首行
|
|
|
- Feishu.insert_columns("recommend", "kanyikan", "20ce0c", "ROWS", 1, 2)
|
|
|
- # 看一看+ ,视频ID工作表,首行写入数据
|
|
|
- upload_time = int(time.time())
|
|
|
- values = [[time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(upload_time)),
|
|
|
- "推荐榜",
|
|
|
- str(download_video_id),
|
|
|
- str(download_video_title),
|
|
|
- our_video_link,
|
|
|
- int(v_play_cnt_sendtime),
|
|
|
- v_comment_cnt,
|
|
|
- v_liked_cnt,
|
|
|
- v_shared_cnt,
|
|
|
- v_duration,
|
|
|
- v_resolution,
|
|
|
- time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(v_send_date)),
|
|
|
- str(v_username),
|
|
|
- str(v_user_id),
|
|
|
- str(v_user_cover),
|
|
|
- str(v_video_cover),
|
|
|
- str(download_url_sendtime)]]
|
|
|
- time.sleep(1)
|
|
|
- Feishu.update_values("recommend", "kanyikan", "20ce0c", "F2:W2", values)
|
|
|
-
|
|
|
- # 保存视频信息到监控表
|
|
|
- Common.logger("recommend").info("添加视频到监控表:{}", download_video_title)
|
|
|
- # 插入空行
|
|
|
- time.sleep(1)
|
|
|
- Feishu.insert_columns("recommend", "monitor", "6fed97", "ROWS", 1, 2)
|
|
|
- # 视频信息写入监控表
|
|
|
- values = [[time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(int(upload_time))),
|
|
|
- str(download_video_id),
|
|
|
- download_video_title,
|
|
|
- our_video_link,
|
|
|
- v_duration,
|
|
|
- time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(v_send_date)),
|
|
|
- int(v_play_cnt_sendtime)]]
|
|
|
- time.sleep(1)
|
|
|
- Feishu.update_values("recommend", "monitor", "6fed97", "F2:L2", values)
|
|
|
-
|
|
|
- # 删除行或列,可选 ROWS、COLUMNS
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
|
|
|
- return
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- Common.logger("recommend").error("获取视频info异常:{}", e)
|
|
|
- Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", 2, 2)
|
|
|
-
|
|
|
- # 执行上传及下载
|
|
|
- @classmethod
|
|
|
- def run_download_play_sendtime(cls, env):
|
|
|
- try:
|
|
|
- while True:
|
|
|
- if len(Feishu.get_values_batch("recommend", "kanyikan", "SdCHOM")) == 1:
|
|
|
- break
|
|
|
- else:
|
|
|
- cls.download_play_sendtime(env)
|
|
|
- except Exception as e:
|
|
|
- Common.logger("recommend").error("执行上传及下载异常:{}", e)
|
|
|
-
|
|
|
-
|
|
|
-if __name__ == "__main__":
|
|
|
- download_sendtime = RecommendPlaySendtime()
|
|
|
- download_sendtime.run_download_play_sendtime("dev")
|