zhangyong 4 meses atrás
pai
commit
1f89301664

+ 27 - 29
data_channel/ks_keyword.py

@@ -10,46 +10,44 @@ from common.sql_help import sqlCollect
 class KsKeyword:
 class KsKeyword:
     @classmethod
     @classmethod
     def get_key_word(cls, keyword, task_mark, mark, channel_id, name, task):
     def get_key_word(cls, keyword, task_mark, mark, channel_id, name, task):
-        # combo = task['combo']
-        # content_type = combo[0]
-        # publish_time = combo[1]
-        # duration = combo[2]
-        # share_count_rule = 0
-        # special = 0
-        # short_duration_rule = 0
+        combo = task['combo']
+        content_type = combo[0]
+        publish_time = combo[1]
+        duration = combo[2]
+        share_count_rule = 0
+        special = 0
+        short_duration_rule = 0
 
 
         url = "http://8.217.192.46:8889/crawler/kuai_shou/keyword"
         url = "http://8.217.192.46:8889/crawler/kuai_shou/keyword"
         list = []
         list = []
 
 
         payload = json.dumps({
         payload = json.dumps({
             "keyword": keyword,
             "keyword": keyword,
-            "content_type": "",
-            "sort_type": "",
-            "publish_time": "",
-            "duration": "",
+            "content_type": content_type,
+            "sort_type": "视频",
+            "publish_time": publish_time,
+            "duration": duration,
             "cursor": ""
             "cursor": ""
         })
         })
         headers = {
         headers = {
             'Content-Type': 'application/json'
             'Content-Type': 'application/json'
         }
         }
-        share_count_rule = 100
-        special = 0.0005
-        short_duration_rule = 30
-
-        # if " 不限" == publish_time:
-        #
-        # elif "近1日" == publish_time:
-        #     share_count_rule = 0
-        #     special = 0.0003
-        #     short_duration_rule = 25
-        # elif "近7日" == publish_time:
-        #     share_count_rule = 50
-        #     special = 0.0005
-        #     short_duration_rule = 25
-        # elif "近1月" == publish_time:
-        #     share_count_rule = 100
-        #     special = 0.0005
-        #     short_duration_rule = 25
+        if " 不限" == publish_time:
+            share_count_rule = 100
+            special = 0.0005
+            short_duration_rule = 25
+        elif "近1日" == publish_time:
+            share_count_rule = 0
+            special = 0.0003
+            short_duration_rule = 25
+        elif "近7日" == publish_time:
+            share_count_rule = 50
+            special = 0.0005
+            short_duration_rule = 25
+        elif "近1月" == publish_time:
+            share_count_rule = 100
+            special = 0.0005
+            short_duration_rule = 25
         try:
         try:
             time.sleep(3)
             time.sleep(3)
             response = requests.request("POST", url, headers=headers, data=payload, timeout=30)
             response = requests.request("POST", url, headers=headers, data=payload, timeout=30)

+ 150 - 0
data_channel/ks_xcx_keyword.py

@@ -0,0 +1,150 @@
+import time
+
+import requests
+import json
+
+from common import Common, AliyunLogger, Feishu
+from common.sql_help import sqlCollect
+
+
+class KsXCXKeyword:
+    @classmethod
+    def get_key_word(cls, keyword, task_mark, mark, channel_id, name, task):
+        # combo = task['combo']
+        # content_type = combo[0]
+        # publish_time = combo[1]
+        # duration = combo[2]
+        # share_count_rule = 0
+        # special = 0
+        # short_duration_rule = 0
+
+        url = "http://8.217.192.46:8889/crawler/kuai_shou/mp_keyword"
+        list = []
+
+        payload = json.dumps({
+            "keyword": keyword,
+            # "content_type": "",
+            # "sort_type": "",
+            # "publish_time": "",
+            # "duration": "",
+            "cursor": ""
+        })
+        headers = {
+            'Content-Type': 'application/json'
+        }
+        share_count_rule = 100
+        special = 0.0005
+        short_duration_rule = 30
+
+        # if " 不限" == publish_time:
+        #
+        # elif "近1日" == publish_time:
+        #     share_count_rule = 0
+        #     special = 0.0003
+        #     short_duration_rule = 25
+        # elif "近7日" == publish_time:
+        #     share_count_rule = 50
+        #     special = 0.0005
+        #     short_duration_rule = 25
+        # elif "近1月" == publish_time:
+        #     share_count_rule = 100
+        #     special = 0.0005
+        #     short_duration_rule = 25
+        try:
+            time.sleep(3)
+            response = requests.request("POST", url, headers=headers, data=payload, timeout=30)
+            response = response.json()
+            code = response['code']
+            if code != 0:
+                if code == 27006 and response['msg'] == '快手内容已被删除或无法访问':
+                    Feishu.finish_bot(f"kuai_shou/keyword {response['msg']},cookie 过期需要更换",
+                                      "https://open.feishu.cn/open-apis/bot/v2/hook/575ca6a1-84b4-4a2f-983b-1d178e7b16eb",
+                                      "【快手搜索接口使用提示】")
+                    Common.logger("ks-key-word").info(f"快手搜索词数据获取失败,{response['msg']}\n")
+                    return list
+                Common.logger("ks-key-word").info(f"快手搜索词数据获取失败,接口为kuai_shou/keyword\n")
+                return list
+            data_list = response['data']['data']
+            for data in data_list:
+                type = int(data['type'])
+                if type != 1:
+                    continue
+                photo_type = data['photoType']
+                if photo_type != "VIDEO":
+                    continue
+                photo_id =  data['photoId']
+                status = sqlCollect.is_used(task_mark, photo_id, mark, channel_id)
+
+                image_url = data['webpCoverUrls'][0]['url']
+                video_url = data['mainMvUrls'][0]['url']
+                view_count = data.get('viewCount', 0)
+                share_count = data.get('shareCount', 0)
+                old_title = data['caption']  # 标题
+
+                video_percent = '%.4f' % (int(share_count) / int(view_count))
+                duration = int(int(data["duration"]) / 1000)
+                log_data = f"user:{keyword},,video_id:{photo_id},,video_url:'',original_title:{old_title},,share_count:{share_count},,view_count:{view_count},,duration:{duration}"
+
+                AliyunLogger.logging(channel_id, name, keyword, photo_id, "扫描到一条视频", "2001", log_data)
+                if status:
+                    AliyunLogger.logging(channel_id, name, keyword, photo_id, "该视频已改造过", "2002", log_data)
+                    continue
+                if float(video_percent) < special:
+                    AliyunLogger.logging(channel_id, name, keyword, photo_id, f"不符合规则:分享/浏览{special}", "2003", log_data)
+
+                    Common.logger("ks-key-word").info(
+                        f"不符合规则:{task_mark},用户主页id:{keyword},视频id{photo_id} ,分享:{share_count},浏览{view_count} ,时长:{int(duration)} ")
+                    continue
+                if int(share_count) < share_count_rule:
+                    AliyunLogger.logging(channel_id, name, keyword, photo_id, f"不符合规则:分享小于{share_count_rule}", "2003", log_data)
+
+                    Common.logger("ks-key-word").info(
+                        f"不符合规则:{task_mark},用户主页id:{keyword},视频id{photo_id} ,分享:{share_count},浏览{view_count} ,时长:{int(duration)} ")
+                    continue
+                if int(duration) < short_duration_rule or int(duration) > 720:
+                    AliyunLogger.logging(channel_id, name, keyword, photo_id, f"不符合规则:时长不符合规则大于720秒/小于{short_duration_rule}", "2003",
+                                         log_data)
+
+                    Common.logger("ks-key-word").info(
+                        f"不符合规则:{task_mark},用户主页id:{keyword},视频id{photo_id} ,分享:{share_count},浏览{view_count} ,时长:{int(duration)} ")
+                    continue
+
+                log_data = f"user:{keyword},,video_id:{photo_id},,video_url:{video_url},,original_title:{old_title},,share_count:{share_count},,view_count:{view_count},,duration:{duration}"
+                all_data = {"video_id": photo_id, "cover": image_url, "video_url": video_url,
+                            "rule": video_percent,
+                            "old_title": old_title}
+                list.append(all_data)
+                AliyunLogger.logging(channel_id, name, keyword, photo_id, "符合规则等待改造", "2004", log_data)
+            print(list)
+            return list
+        except Exception as exc:
+            Common.logger("ks-key-word").info(f"快手搜索词{keyword}获取失败{exc}\n")
+            return list
+
+    @classmethod
+    def get_video(cls, video_id):
+        url = "http://8.217.192.46:8889/crawler/kuai_shou/detail"
+
+        payload = json.dumps({
+            "content_id": str(video_id)
+        })
+        headers = {
+            'Content-Type': 'application/json'
+        }
+
+        response = requests.request("POST", url, headers=headers, data=payload, timeout=30)
+        response = response.json()
+        data = response["data"]["data"]
+        video_url = data["video_url_list"][0]["video_url"]
+        image_url = data["image_url_list"][0]["image_url"]
+        return video_url, image_url
+
+
+if __name__ == '__main__':
+    keyword = '帅哥'
+    task_mark = '1'
+    mark = 'pl-gjc'
+    channel_id = '快手搜索'
+    name = '1'
+    task = {'combo': ['最新发布', '近1日', '1分钟内']}
+    KsXCXKeyword.get_key_word(keyword, task_mark, mark, channel_id, name, task)

+ 2 - 1
video_rewriting/video_processor.py

@@ -20,6 +20,7 @@ from data_channel.ks_feed import KSFeed
 from data_channel.ks_keyword import KsKeyword
 from data_channel.ks_keyword import KsKeyword
 from data_channel.ks_ls import KSLS
 from data_channel.ks_ls import KSLS
 from data_channel.ks_xcx import KSXCX
 from data_channel.ks_xcx import KSXCX
+from data_channel.ks_xcx_keyword import KsXCXKeyword
 from data_channel.kuaishou import KS
 from data_channel.kuaishou import KS
 from data_channel.kuaishouchuangzuozhe import KsFeedVideo
 from data_channel.kuaishouchuangzuozhe import KsFeedVideo
 from data_channel.piaoquan import PQ
 from data_channel.piaoquan import PQ
@@ -459,7 +460,7 @@ class VideoProcessor:
         elif channel_id == '抖音搜索':
         elif channel_id == '抖音搜索':
             return DyKeyword.get_key_word(url, task_mark, mark, channel_id, name, task)
             return DyKeyword.get_key_word(url, task_mark, mark, channel_id, name, task)
         elif channel_id == '快手搜索':
         elif channel_id == '快手搜索':
-            return KsKeyword.get_key_word(url, task_mark, mark, channel_id, name, task)
+            return KsXCXKeyword.get_key_word(url, task_mark, mark, channel_id, name, task)
         elif channel_id == '视频号搜索':
         elif channel_id == '视频号搜索':
             return SphKeyword.get_key_word(url, task_mark, mark, channel_id, name)
             return SphKeyword.get_key_word(url, task_mark, mark, channel_id, name)
         elif channel_id == '快手推荐流':
         elif channel_id == '快手推荐流':