Commit 128bb4f2 by baiquan

优化上传图片与视频

parent 4c6547c8
......@@ -73,13 +73,33 @@ def create_global_promotion(params:str | dict,data: dict,headers: dict, proxy_ur
response = doudian_request("POST", url, proxies=proxies, json=data, headers=headers)
return response
def search_category(product_name, cookies, headers, proxies):
"""you"""
if 15 > len(product_name) > 60:
raise Exception('商品标题长度必须在15-60字符之间')
params = {
'key': product_name,
'search_type': '1',
'appid': '1',
'_bid': 'ffa_goods',
}
url = 'https://fxg.jinritemai.com/product/tproduct/searchCategoryN'
response = doudian_request("GET", url, proxies, params, headers=headers, cookies=cookies)
return response['data']
# AI视频生成
def generate_video(task: dict):
addr = task.get("proxies")["addr"]
port = task.get("proxies")["port"]
username = task.get("proxies")["username"]
password = task.get("proxies")["password"]
proxy_url = f"socks5h://{username}:{password}@{addr}:{port}"
if type(task.get("proxies")) == dict:
addr = task.get("proxies")["addr"]
port = task.get("proxies")["port"]
username = task.get("proxies")["username"]
password = task.get("proxies")["password"]
proxy_url = f"socks5h://{username}:{password}@{addr}:{port}"
elif type(task.get("proxies")) == str:
proxy_url = task.get("proxies")
else:
raise ValueError("代理格式错误")
proxies = check_proxy(proxy_url)
cookies = task.get('cookie')
headers = task.get('headers')
generate_video_data = task.get('generate_video_data')
......@@ -93,7 +113,6 @@ def generate_video(task: dict):
# "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/jpeg_m_995815fcd3378e7f48765b3ef3fc9bec_sx_119123_www810-1080",
# "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/jpeg_m_b1fe80bb8228d713eabc880561120823_sx_53964_www810-1080",
# "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/jpeg_m_cc78dc386c3359945173fc9cb57297c4_sx_137165_www810-1080"],
# 'product_industrys': ["住宅家具", "几类", "角几/边几", ""],
# }
params = {
'appid': '1',
......@@ -101,7 +120,18 @@ def generate_video(task: dict):
}
product_name = generate_video_data['product_name']
customized_images = generate_video_data['customized_images']
product_industrys = generate_video_data['product_industrys']
logger.info(len(customized_images))
if len(customized_images) < 3:
raise Exception('生成视频的图片数量至少为3张')
category_list = search_category(product_name, cookies, headers, proxies)
if not category_list:
raise Exception('未找到商品分类')
first_name = category_list[0].get('first_name', '')
second_name = category_list[0].get('second_name', '')
third_name = category_list[0].get('third_name', '')
fourth_name = category_list[0].get('fourth_name', '')
product_industrys = [first_name, second_name, third_name, fourth_name]
logger.info(f"商品分类:{product_industrys}")
json_data = {
'product_id': '',
'optimize_strategy': '视频一键生成',
......@@ -117,7 +147,6 @@ def generate_video(task: dict):
'appid': 1,
'_bid': 'ffa_goods',
}
proxies = check_proxy(proxy_url)
if headers.get("User-Agent"):
ua = headers['User-Agent']
elif headers.get("user-agent"):
......
......@@ -9,10 +9,11 @@ from loguru import logger
from requests_toolbelt.multipart.encoder import MultipartEncoder
from config import settings
from service.doudian_request import doudian_request
from service.upload_video import upload_video_with_multithreading
from service.upload_video import upload_video_with_multithreading, download_video
from utils.common import check_proxy, callback_task
# 图片转换成正方形
def convert_rect_to_square(image_path):
# 打开原始图片并转换为 RGBA(支持透明通道)
......@@ -59,22 +60,25 @@ def check_image_width_height(image_path, image_type: int = 1):
raise Exception(f"{image_path} --> 图片类型错误")
def get_local_path(item_id, url):
def get_local_path(item_id, original_url):
folder_path = os.path.join(settings.BASE_PATH, str(item_id))
if not os.path.exists(folder_path):
raise FileNotFoundError(f"文件夹不存在: {folder_path}")
if "?" in url:
url = url.split("?")[0]
os.makedirs(folder_path)
# raise FileNotFoundError(f"文件夹不存在: {folder_path}")
if "?" in original_url:
url = original_url.split("?")[0]
else:
url = original_url
logger.info(url)
file_path = os.path.join(folder_path, os.path.basename(url))
if not os.path.exists(file_path):
if file_path.endswith(".mp4"):
raise FileNotFoundError(f"文件不存在: {file_path}")
logger.info(f"{file_path} 文件不存在,开始下载")
img_bytes = requests.get(url, stream=True)
with open(file_path, 'wb') as f:
for chunk in img_bytes.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
if not file_path.endswith(".mp4"):
img_bytes = requests.get(url, stream=True)
with open(file_path, 'wb') as f:
for chunk in img_bytes.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
return file_path
def upload_image_by_bytes(cookies, headers, proxies, image_path_list):
......@@ -126,15 +130,11 @@ async def uploadImageAndVideo(task: dict = None):
:param task:
:return:
"""
addr = task.get("proxies")["addr"]
port = task.get("proxies")["port"]
username = task.get("proxies")["username"]
password = task.get("proxies")["password"]
proxy_url = f"socks5h://{username}:{password}@{addr}:{port}"
proxy_url = task.get("proxies")
proxies = check_proxy(proxy_url)
cookies = task.get('cookie')
headers = task.get('headers')
item_id = task.get('id')
item_id = task.get('item_id')
skus = task.get('skus')
# 准备SKU图片上传
sku_image_list = []
......@@ -175,7 +175,6 @@ async def uploadImageAndVideo(task: dict = None):
run_in_executor(upload_image_by_bytes, cookies, headers, proxies, description_list),
upload_videos(task, item_id)
)
except Exception as e:
logger.error(f"上传过程中发生错误: {str(e)}")
return None
......@@ -186,10 +185,10 @@ async def uploadImageAndVideo(task: dict = None):
"images": image_dict,
"description": description_dict,
"video_list": video_dict,
"type": 2
# "type": 2
}
logger.info(json.dumps(callback_data))
await callback_task(callback_data)
await callback_task(callback_data, 2)
async def run_in_executor(func, *args):
"""在异步环境中运行同步函数"""
......@@ -221,6 +220,7 @@ async def upload_videos(task: dict, item_id: str):
async def upload_single_video(task: dict, local_path: any, original_url: str):
"""上传单个视频"""
task['file_path'] = local_path
task['video_url'] = original_url
md5_key = hashlib.md5(original_url.encode()).hexdigest()
try:
......
......@@ -5,6 +5,7 @@ import math
import os
import random
import threading
import time
import urllib.parse
import zlib
from concurrent.futures import ThreadPoolExecutor
......@@ -168,11 +169,16 @@ class Upload:
self.access_key_id = None
self.file_size = None
self.file_name = None
addr = task.get("proxies")["addr"]
port = task.get("proxies")["port"]
username = task.get("proxies")["username"]
password = task.get("proxies")["password"]
proxy_url = f"socks5h://{username}:{password}@{addr}:{port}"
if type(task.get("proxies")) == dict:
addr = task.get("proxies")["addr"]
port = task.get("proxies")["port"]
username = task.get("proxies")["username"]
password = task.get("proxies")["password"]
proxy_url = f"socks5h://{username}:{password}@{addr}:{port}"
elif type(task.get("proxies")) == str:
proxy_url = task.get("proxies")
else:
raise ValueError("代理格式错误")
self.proxies = check_proxy(proxy_url)
self.cookies = task.get('cookie')
self.headers = task.get('headers')
......@@ -451,19 +457,19 @@ def download_video(url: str, file_: str,headers: dict):
:param file_: 文件地址
:return:
"""
response = requests.get(url, verify=False, stream=True, headers=headers)
response = requests.get(url, stream=True, headers=headers)
with open(file_, "wb") as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk: f.write(chunk)
# 判断文件是否下载完成
file_size = os.path.getsize(file_)
logger.info(f"文件大小: {file_size}")
if file_size > 10000 and not is_video_corrupted(file_):
logger.info(f"下载完成: {file_}")
else:
raise Exception(f"下载失败: {file_}")
def get_video_duration(filename):
"""
获取视频时长
......@@ -678,24 +684,20 @@ def prepare_video_file(task):
if not task.get("file_path"):
if not os.path.exists(VIDEO_PATH):
os.makedirs(VIDEO_PATH)
file_name = f"{task['file_name']}"
file_path = os.path.join(VIDEO_PATH, file_name)
if not os.path.exists(file_path):
logger.info(f"文件 {file_name} 不存在,开始下载")
download_video(task['video_url'], file_path, headers=task['headers'])
else:
logger.info(f"文件 {file_name} 已存在,跳过下载")
if is_video_corrupted(file_path):
logger.error("视频文件已损坏,正在重新下载")
download_video(task['video_url'], file_path, headers=task['headers'])
else:
file_path = task.get("file_path")
if not os.path.exists(file_path):
raise VideoError(f"视频文件 {file_path} 不存在")
if not os.path.exists(file_path):
logger.info(f"文件 {file_path} 不存在,开始下载")
download_video(task['video_url'], file_path, headers=task['headers'])
else:
logger.info(f"文件 {file_path} 已存在,跳过下载")
if is_video_corrupted(file_path):
raise VideoError(f"视频文件 {file_path} 已损坏")
logger.error("视频文件已损坏,正在重新下载")
download_video(task['video_url'], file_path, headers=task['headers'])
video_duration = get_video_duration(file_path)
if video_duration > 60:
logger.error("视频时长大于60秒,上传失败")
......
......@@ -104,7 +104,7 @@ async def syncShop(task: dict = None):
}
})
logger.info(json.dumps(callback_data))
await callback_task(callback_data)
await callback_task(callback_data, task_type=1)
if browser_default_id:
await closeBrowser(browser_default_id)
return
......@@ -133,7 +133,7 @@ def run_sync_shop(task):
async def handle_task(task):
"""处理单个任务,根据类型分发"""
type_ = task.get('type', '')
type_ = task.get('type', -1)
if type_ == 1:
# 同步店铺任务 - 使用线程池执行
with concurrent.futures.ThreadPoolExecutor(max_workers=INNER_MAX_WORKERS) as inner_executor:
......@@ -169,170 +169,7 @@ async def run():
# {"app_name": "admin", "type": 1, "browser_type": 1, "browser_id": "1180779018"},
# {"app_name": "admin", "type": 1, "browser_type": 1, "browser_id": "1180779004"},
# {"app_name": "admin", "type": 1, "browser_type": 1, "browser_id": "1180779061"},]}
# tasks = {
# "id": "808160465909",
# "headers": {
# 'Accept': 'application/json, text/plain, */*',
# 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
# 'Connection': 'keep-alive',
# 'Origin': 'https://fxg.jinritemai.com',
# 'Referer': 'https://fxg.jinritemai.com/',
# 'Sec-Fetch-Dest': 'empty',
# 'Sec-Fetch-Mode': 'cors',
# 'Sec-Fetch-Site': 'same-site',
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0',
# 'X-Requested-With': 'XMLHttpRequest',
# 'sec-ch-ua': '"Not(A:Brand";v="99", "Microsoft Edge";v="133", "Chromium";v="133"',
# },
# "cookie": {
# "PHPSESSID": "cd870e80d2c587d7cc9c457e8f7efb4f",
# "PHPSESSID_SS": "cd870e80d2c587d7cc9c457e8f7efb4f"
# },
# "proxies": {
# "addr": "58.251.251.235",
# "port": "9001",
# "username": "WeGhswcQujYZ33tQ",
# "password": "jQCvhZdckPu4VjxG"
# },
# "skus": [
# {
# "颜色分类": {
# "title": "粉色-铃铛立体猫咪",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d22eb8e3.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "3.12",
# "end_price": "3.12",
# "skuid": "5743344376309"
# },
# {
# "颜色分类": {
# "title": "黄色-铃铛立体猫咪",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d2323dfb.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "3.12",
# "end_price": "3.12",
# "skuid": "5743344376311"
# },
# {
# "颜色分类": {
# "title": "蓝色-铃铛立体猫咪",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d2350619.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "3.12",
# "end_price": "3.12",
# "skuid": "5743344376307"
# },
# {
# "颜色分类": {
# "title": "米色-铃铛立体猫咪",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d237c62c.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "3.12",
# "end_price": "3.12",
# "skuid": "5743344376312"
# },
# {
# "颜色分类": {
# "title": "白色-铃铛立体猫咪",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d23a93a0.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "3.12",
# "end_price": "3.12",
# "skuid": "5743344376308"
# },
# {
# "颜色分类": {
# "title": "黑色-铃铛立体猫咪",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d23d62d5.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "3.12",
# "end_price": "3.12",
# "skuid": "5743344376310"
# },
# {
# "颜色分类": {
# "title": "3个铃铛立体猫咪(可备注)",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d24267e2.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "6.62",
# "end_price": "6.62",
# "skuid": "5932955163526"
# },
# {
# "颜色分类": {
# "title": "全家福6个",
# "kinds": "颜色分类",
# "image": "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d2453d59.jpg"
# },
# "quantityErrorMsg": "无",
# "quantityText": "有货(限购100件)",
# "quantity": "200",
# "start_price": "10.05",
# "end_price": "10.05",
# "skuid": "5932955163525"
# }
# ],
# "images": [
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d22053f3.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d222eaa3.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d225a093.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d2285d3d.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d22bf1dc.jpg"
# ],
# "description": [
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d249c380.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d24af867.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d24ebd93.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d25323d7.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d256f116.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d25a9c93.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d25e66c2.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d262d20d.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d267bb74.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d26b7b8f.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d26f0e8e.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d273833c.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d2768681.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d27d28ee.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d280d893.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d28517e4.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d288b03a.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d28c69cf.jpg",
# "http://159.75.92.198:8808/uploads/20250619/893838919796/68537d29231bf.jpg"
# ],
# "video_list": [
# "https://cloud.video.taobao.com/play/u/3708306281/p/2/e/6/t/1/469092503042.mp4?appKey=38829"
# ],
# "type": 2
# }
tasks = {"code": 0, "message": "success", "data": {"item_id": 921707219436, "headers": {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.6779.0 Safari/537.36", "sec-ch-ua": "Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\""}, "cookie": {"gfkadpd": "4272,23756", "passport_csrf_token": "085a146f3e5c7d6ffb291c1aa81f9a71", "passport_csrf_token_default": "085a146f3e5c7d6ffb291c1aa81f9a71", "ttcid": "53c81c77b3bb489d8e84e74c691a021215", "s_v_web_id": "verify_mcoicpk4_2db5c5bb_310b_79d4_f6ab_49a6ef264e36", "gd_random": "eyJtYXRjaCI6dHJ1ZSwicGVyY2VudCI6MC4xOTIxMTQ1NTI3NDIzNDU4fQ==.inx0kgU3DeIysiYrTzVjrJ3hImpr9GRyY/JD5oCWoyQ=", "zsgw_business_data": "%7B%22uuid%22%3A%22cb5919b0-458b-4624-8b98-d892792f45b9%22%2C%22platform%22%3A%22pc%22%2C%22source%22%3A%22seo.fxg.jinritemai.com%22%7D", "ecom_gray_shop_id": "225564417", "HMACCOUNT": "6BDCEA5FD75B2174", "x-web-secsdk-uid": "ba0eebd6-4bd8-48de-b5c2-8032db5e8e81", "PIGEON_CID": "7522394902744882724", "SHOP_ID": "225564417", "_tea_utm_cache_472893": "undefined", "_tea_utm_cache_643623": "undefined", "Secure": "True", "gf_part_3164895": "74", "_shop_token_": "ed474a2a302be0aff7eddac117584630", "ffa_goods_ewid": "027a8000ef7f24b9d22481d700a7eb34", "ffa_goods_seraph_did": "undefined", "Hm_lvt_b6520b076191ab4b36812da4c90f7a5e": "1751614184,1752025016", "ttwid": "1%7C5T5KdCu_h9A6pP4qtqJkuvnCdPsfIRAm_dESgkSngmw%7C1752230963%7Cd53db946aa81740ad6e6d58ff0088d40c3ea5d8b436d38413c46709cfcff0b01", "tt_scid": "2KhbBXGi8bq7NY4eEzJ5Ufm6FSnwaPn4YCYNBgBV.5o8p9.vxD3GDJ3vNHnJjomae74f", "d_ticket_doudian": "fdc963a28a3d01565c5cdd7c5ca9370589493", "n_mh_doudian": "9-mIeuD4wZnlYrrOvfzG3MuT6aQmCUtmr8FxV8Kl8xY", "odin_tt": "e6355d3676dde538ff181f527dc4c41eff64064ef8cad5dcc1025a0e4cb6c85c22670aa3949866ec315660abc92b616b2b91a2e1a8a22c932b76f80ecdb16664", "passport_mfa_token": "CjH6e8E1oe3y3s4Dnhr%2FwwzAVTZiA4ZF0NgsK5ukU9XG6f%2B4oIxVrT6I2159TRkWiJeaGkoKPAAAAAAAAAAAAABPOLzKSMDQhC8NS2qIXsj2pRnOTqs1KCiBjE%2BljrWpk1yLHjX5arEfMaaO0bHRcP57%2BhC7ufYNGPax0WwgAiIBA2h3AgA%3D", "session_tlb_tag": "sttt%7C10%7CABEYXGW9YgvKXr0ig8tAaP________-h9ea8ZAQgTyGsZJXe3JHrS14yvoUHqDuvWyWWQBfImjs%3D", "sid_ucp_sso_v1_doudian": "1.0.0-KGU0Y2RkNjIyODFjZjZiZDJlOTlmMGFhYThhN2M3MzUwMzliMjQ4Y2YKHwjHtKCqrKyYBBC72MPDBhiwISAMMPuoscEGOAFA6wcaAmhsIiA3ZGViOTY4MWM2YWY1MDczY2VhZTI2OThjMzUyNmMzZg", "ssid_ucp_sso_v1_doudian": "1.0.0-KGU0Y2RkNjIyODFjZjZiZDJlOTlmMGFhYThhN2M3MzUwMzliMjQ4Y2YKHwjHtKCqrKyYBBC72MPDBhiwISAMMPuoscEGOAFA6wcaAmhsIiA3ZGViOTY4MWM2YWY1MDczY2VhZTI2OThjMzUyNmMzZg", "sso_uid_tt_doudian": "233262f0e2201aebe809a7a97ecf022d", "sso_uid_tt_ss_doudian": "233262f0e2201aebe809a7a97ecf022d", "toutiao_sso_user_doudian": "7deb9681c6af5073ceae2698c3526c3f", "toutiao_sso_user_ss_doudian": "7deb9681c6af5073ceae2698c3526c3f", "ucas_sso_c0_doudian": "CkEKBTEuMC4wEKKIgbjlhru4aBjmJiDI3ICqrKzkAiiwITDHtKCqrKyYBEC-2MPDBki-jIDGBlCkvMWy8Mm6smhYbxIUwHgyZP-VYrNHnWycmKXWIA8Vg_4", "ucas_sso_c0_ss_doudian": "CkEKBTEuMC4wEKKIgbjlhru4aBjmJiDI3ICqrKzkAiiwITDHtKCqrKyYBEC-2MPDBki-jIDGBlCkvMWy8Mm6smhYbxIUwHgyZP-VYrNHnWycmKXWIA8Vg_4", "ucas_c0": "CkEKBTEuMC4wEKKIia7chru4aBjmJiDI3ICqrKzkAiiwITDHtKCqrKyYBEC-2MPDBki-jIDGBlCkvMWy8Mm6smhYbxIU6MBKgzZvfJFEpQfFPi2ecy1UGEQ", "ucas_c0_ss": "CkEKBTEuMC4wEKKIia7chru4aBjmJiDI3ICqrKzkAiiwITDHtKCqrKyYBEC-2MPDBki-jIDGBlCkvMWy8Mm6smhYbxIU6MBKgzZvfJFEpQfFPi2ecy1UGEQ", "PHPSESSID": "201b8255bfb1cf7538bb1d090332eef2", "PHPSESSID_SS": "201b8255bfb1cf7538bb1d090332eef2", "is_staff_user": "false", "sessionid": "0011185c65bd620bca5ebd2283cb4068", "sessionid_ss": "0011185c65bd620bca5ebd2283cb4068", "sid_guard": "0011185c65bd620bca5ebd2283cb4068%7C1752230990%7C5184000%7CTue%2C+09-Sep-2025+10%3A49%3A50+GMT", "sid_tt": "0011185c65bd620bca5ebd2283cb4068", "sid_ucp_v1": "1.0.0-KGFkNzFkNmYzODAwZGI5OGM0NGQ5NzA3M2QxNjAyMWM2Njc2N2I5MTgKGQjHtKCqrKyYBBDO2MPDBhiwISAMOAFA6wcaAmxmIiAwMDExMTg1YzY1YmQ2MjBiY2E1ZWJkMjI4M2NiNDA2OA", "ssid_ucp_v1": "1.0.0-KGFkNzFkNmYzODAwZGI5OGM0NGQ5NzA3M2QxNjAyMWM2Njc2N2I5MTgKGQjHtKCqrKyYBBDO2MPDBhiwISAMOAFA6wcaAmxmIiAwMDExMTg1YzY1YmQ2MjBiY2E1ZWJkMjI4M2NiNDA2OA", "uid_tt": "506f7b0c81c01d7514c886854f5a79cd", "uid_tt_ss": "506f7b0c81c01d7514c886854f5a79cd", "COMPASS_LUOPAN_DT": "session_7525773154556346650", "BUYIN_SASID": "SID2_7525774050096169251", "Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e": "1752230958", "csrf_session_id": "a863c649f0721c8150f5bda69b659380", "source": "seo.fxg.jinritemai.com"}, "proxies": "socks5h://hwK7px85A9cNB9wR:vEh67THqHh2Xjpj3@58.251.252.66:9001", "skus": [{"sku_id": "825460040364440779", "image": "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e10c2dda.jpg"}, {"sku_id": "410752745034944154", "image": "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1113966.jpg"}, {"sku_id": "702228012132942343", "image": "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1157b12.jpg"}], "images": ["http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e0fcfe49.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1003a57.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e10308d6.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e105d8bc.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e107ea6d.jpg"], "description": ["http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1175948.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e11a1ba4.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e11e1259.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1218e11.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e12586e5.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1276dfc.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e12b860c.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e12e83c0.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1323a3d.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e1352ab0.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e137c861.jpg", "http://159.75.92.198:8808/uploads/20250627/921707219436/685e6e13ae9ad.jpg"], "video_list": ["https://cloud.video.taobao.com/play/u/3546714953/p/2/e/6/t/1/518590669530.mp4?appKey=38829"], "type": 2}, "status_code": 200}
except:
logger.error('获取任务失败')
return
......@@ -371,6 +208,6 @@ if __name__ == '__main__':
# 内层线程池大小(每个任务)
INNER_MAX_WORKERS = 3
while True:
asyncio.run(run())
time.sleep(10)
# while True:
asyncio.run(run())
# time.sleep(10)
......@@ -215,16 +215,27 @@ async def get_task(params: dict = None):
"""
获取任务
"""
return requests.request('GET', f'{settings.DOMAIN}/api/collection/task', headers=DEFAULT_HEADER, params=params).json()
async def callback_task(data: dict):
publish_task = requests.get(f"{settings.DOMAIN}/api/collection/task/getPublishTask", headers=DEFAULT_HEADER).json()
# collection_task = requests.get(f'{settings.DOMAIN}/api/collection/task', headers=DEFAULT_HEADER, params=params).json()
# if collection_task.get('data', []):
# collection_task['data'].extend(publish_task_data)
# return collection_task
# else:
return publish_task
async def callback_task(data: dict, task_type:int):
"""
回调任务
:param data:
:param task_type:
:return:
"""
return requests.request('POST', f"{settings.DOMAIN}/api/collection/task", json=data, headers=DEFAULT_HEADER)
if task_type == 1:
return requests.post(f"{settings.DOMAIN}/api/collection/task", json=data, headers=DEFAULT_HEADER)
elif task_type == 2:
return requests.post(f"{settings.DOMAIN}/api/collection/task/callBackPublishTask", json=data)
else:
raise Exception("task_type error")
async def formatCallback(task: dict, result: dict) -> dict:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment