Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
doudian-py
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
baiquan
doudian-py
Commits
128bb4f2
Commit
128bb4f2
authored
Jul 14, 2025
by
baiquan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化上传图片与视频
parent
4c6547c8
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
82 additions
and
203 deletions
+82
-203
service/doudian_service.py
+32
-3
service/upload_image_and_video.py
+16
-16
service/upload_video.py
+13
-11
shop.py
+5
-168
utils/common.py
+16
-5
No files found.
service/doudian_service.py
View file @
128bb4f2
...
...
@@ -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
):
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"
):
...
...
service/upload_image_and_video.py
View file @
128bb4f2
...
...
@@ -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,17 +60,20 @@ 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} 文件不存在,开始下载"
)
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
):
...
...
@@ -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
(
'i
tem_i
d'
)
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
:
...
...
service/upload_video.py
View file @
128bb4f2
...
...
@@ -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
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
)
else
:
file_path
=
task
.
get
(
"file_path"
)
if
not
os
.
path
.
exists
(
file_path
):
logger
.
info
(
f
"文件 {file_name
} 不存在,开始下载"
)
logger
.
info
(
f
"文件 {file_path
} 不存在,开始下载"
)
download_video
(
task
[
'video_url'
],
file_path
,
headers
=
task
[
'headers'
])
else
:
logger
.
info
(
f
"文件 {file_name
} 已存在,跳过下载"
)
logger
.
info
(
f
"文件 {file_path
} 已存在,跳过下载"
)
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
is_video_corrupted
(
file_path
):
raise
VideoError
(
f
"视频文件 {file_path} 已损坏"
)
video_duration
=
get_video_duration
(
file_path
)
if
video_duration
>
60
:
logger
.
error
(
"视频时长大于60秒,上传失败"
)
...
...
shop.py
View file @
128bb4f2
...
...
@@ -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"
:
"
%7
B
%22
uuid
%22%3
A
%22
cb5919b0-458b-4624-8b98-d892792f45b9
%22%2
C
%22
platform
%22%3
A
%22
pc
%22%2
C
%22
source
%22%3
A
%22
seo.fxg.jinritemai.com
%22%7
D"
,
"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
%7
C5T5KdCu_h9A6pP4qtqJkuvnCdPsfIRAm_dESgkSngmw
%7
C1752230963
%7
Cd53db946aa81740ad6e6d58ff0088d40c3ea5d8b436d38413c46709cfcff0b01"
,
"tt_scid"
:
"2KhbBXGi8bq7NY4eEzJ5Ufm6FSnwaPn4YCYNBgBV.5o8p9.vxD3GDJ3vNHnJjomae74f"
,
"d_ticket_doudian"
:
"fdc963a28a3d01565c5cdd7c5ca9370589493"
,
"n_mh_doudian"
:
"9-mIeuD4wZnlYrrOvfzG3MuT6aQmCUtmr8FxV8Kl8xY"
,
"odin_tt"
:
"e6355d3676dde538ff181f527dc4c41eff64064ef8cad5dcc1025a0e4cb6c85c22670aa3949866ec315660abc92b616b2b91a2e1a8a22c932b76f80ecdb16664"
,
"passport_mfa_token"
:
"CjH6e8E1oe3y3s4Dnhr
%2
FwwzAVTZiA4ZF0NgsK5ukU9XG6f
%2
B4oIxVrT6I2159TRkWiJeaGkoKPAAAAAAAAAAAAABPOLzKSMDQhC8NS2qIXsj2pRnOTqs1KCiBjE
%2
BljrWpk1yLHjX5arEfMaaO0bHRcP57
%2
BhC7ufYNGPax0WwgAiIBA2h3AgA
%3
D"
,
"session_tlb_tag"
:
"sttt
%7
C10
%7
CABEYXGW9YgvKXr0ig8tAaP________-h9ea8ZAQgTyGsZJXe3JHrS14yvoUHqDuvWyWWQBfImjs
%3
D"
,
"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
%7
C1752230990
%7
C5184000
%7
CTue
%2
C+09-Sep-2025+10
%3
A49
%3
A50+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
:
#
while True:
asyncio
.
run
(
run
())
time
.
sleep
(
10
)
#
time.sleep(10)
utils/common.py
View file @
128bb4f2
...
...
@@ -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
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment