test/main.py

417 lines
19 KiB
Python

import json
import subprocess
import time
import uuid
from functools import partial # 用来固定某个参数的固定值
import uvicorn
from pydantic import BaseModel
from fastapi import FastAPI,Request
app = FastAPI()
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs
from fastapi import FastAPI, Depends, Header, HTTPException
from typing import Dict, Optional
from pydantic import BaseModel
from jose import JWTError, jwt
from datetime import datetime, timedelta
from cryptography.fernet import Fernet
import urllib.parse
import requests
from auth import verify_token,create_access_token
class LoginRequest(BaseModel):
user_id: str
role: str
fp: int
@app.post("/login")
async def login(data : LoginRequest):
token = create_access_token(dict(data))
return {"access_token": token, "token_type": "bearer"}
async def check_jwt(authorization: str = Header(...)):
if not authorization.startswith("Bearer "):
raise HTTPException(status_code=401, detail="Token格式错误")
token = authorization.replace("Bearer ", "")
user_data = verify_token(token)
if user_data is None:
raise HTTPException(status_code=401, detail="无效的Token")
return user_data
ctx=execjs.compile(open('ab_19.js', encoding='utf-8').read())
requests.packages.urllib3.disable_warnings()
# cookies = {
# 'BUYIN_SASID': 'SID2_7492380176849060132',
# 'SASID':'SID2_7492380176849060132'
# }
def common_encrypt1(json_data,params,ua):
da = json.dumps(json_data).replace(' ', '')
pa = urllib.parse.urlencode(params)
ab = ctx.call('enc', pa, da, ua)
params['a_bogus'] = ab
data = json.dumps(json_data, separators=(',', ':'))
return data
def common_encrypt2(ua,params):
pa = urllib.parse.urlencode(params)
ab = ctx.call('encryptAbogus', ua, pa)
params['a_bogus'] = ab
# return data
@app.post("/get_yellow_car_products")
async def get_yellow_car(data:Dict,room_id:str,author_id:str,auth=Depends(check_jwt)):
cookies = data
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'origin': 'https://live.douyin.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://live.douyin.com/996935408475',
'sec-ch-ua': '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'uifid': '29d6bea3e5a6c157a08a212e1912b5e8a78666ece26be56100fa19e58a63a45bbf6ac0f2718fca29c4fa2fb5f45bfcaea6a8e560cad35459acf3bec074e26bd507cc878d629deea5d98525276c6c930e2871de6184fcd505c418ad8d62495640d5aef399e4fea7c04b933c919eeffb316d26046e16c46999a152ead37d61379966833aae53a414fc3a0c9ac4a382b31616161535518766374c9afe940933fe48',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
'x-secsdk-csrf-token': '000100000001366a5d3aafc5da2b7fb7a8f9bbd2183e77e6bf0c1be7e91cccd6a288ad38fcd118360d9cc34524df',
}
params = {
'device_platform': 'webapp',
'aid': '6383',
'channel': 'channel_pc_web',
'room_id': f'{room_id}',
'author_id': f'{author_id}',
'offset': '0',
'limit': '20',
'pc_client_type': '1',
'pc_libra_divert': 'Windows',
'update_version_code': '170400',
'support_h265': '1',
'support_dash': '0',
'version_code': '320100',
'version_name': '32.1.0',
'cookie_enabled': 'true',
'screen_width': '1536',
'screen_height': '864',
'browser_language': 'zh-CN',
'browser_platform': 'Win32',
'browser_name': 'Chrome',
'browser_version': '125.0.0.0',
'browser_online': 'true',
'engine_name': 'Blink',
'engine_version': '125.0.0.0',
'os_name': 'Windows',
'os_version': '10',
'cpu_core_num': '16',
'device_memory': '8',
'platform': 'PC',
'downlink': '10',
'effective_type': '4g',
'round_trip_time': '250',
'webid': '7446819597804946956',
'uifid': '29d6bea3e5a6c157a08a212e1912b5e8a78666ece26be56100fa19e58a63a45bbf6ac0f2718fca29c4fa2fb5f45bfcaea6a8e560cad35459acf3bec074e26bd507cc878d629deea5d98525276c6c930e2871de6184fcd505c418ad8d62495640d5aef399e4fea7c04b933c919eeffb316d26046e16c46999a152ead37d61379966833aae53a414fc3a0c9ac4a382b31616161535518766374c9afe940933fe48',
'msToken': '8w0DCcNbCsn5heG_fBkCx7SKtL-Bgv_awvNokCdqa9lboNSq-bYWMmjVA0YRS4RmwKJvI9CBtEdVTM2toasygEyun9PPQMROMAdV4mgZosBDcVJ7xCitwNJJQWhLH9ByYaC3DlxbG6Tz7WmNRZr01N68Ykz9uuweGFuo6eXIq9k=',
}
response = requests.post('https://live.douyin.com/live/promotions/page/', params=params, cookies=cookies,headers=headers)
pa = urllib.parse.urlencode(params)
ab = ctx.call('encryptAbogus', headers['user-agent'], pa)
params['a_bogus'] = ab
return {
"msg": "认证成功",
# "user_data": auth,
"data": response.json()
}
def pack_detail(cookies):
json_data = {
"scene_info": {
"request_page": 2
},
"biz_id": "3717234303709610080",
"biz_id_type": 2,
"enter_from": "pc.selection_square.recommend_main",
"data_module": "pc-non-core",
"extra": {
"use_kol_product": "1"
}
}
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'content-type': 'application/json',
'origin': 'https://buyin.jinritemai.com',
'priority': 'u=1, i',
'referer': 'https://buyin.jinritemai.com/dashboard/merch-picking-library/merch-promoting?commodity_id=3728500413717215016&commodity_location=3&id=3728500413717215016&activity_id=&pick_first_source=%E7%99%BE%E5%BA%94&pick_second_source=%E9%80%89%E5%93%81%E5%B9%BF%E5%9C%BA&pick_third_source=category_recommend&pick_source_id=&product_id=3728498815368560693&shop_id=193158700&search_id=2240ef2d8a855155c5a83bb0482ffccf197cd99dd99017347d914442b8d79bf1ccddd1f0f915ee2c660a28217e6bd5dd66590b94a7ba696647dc643b6fba1d47bf7e7d0612c3783b823e660d70df3343&log_pb=20250408191218566CCF37AF1B90242B12&session_id=2240ef2d8a855155c5a83bb0482ffccf197cd99dd99017347d914442b8d79bf1ccddd1f0f915ee2c660a28217e6bd5dd66590b94a7ba696647dc643b6fba1d47bf7e7d0612c3783b823e660d70df3343&recommend_reason_type=&recommend_reason_text=&is_outside_log=1&only_query_params=1&universal_append=1&pre_universal_unit_params=%257B%2522product_id%2522%253A%25223728498815368560693%2522%252C%2522commodity_id%2522%253A%25223728500413717215016%2522%252C%2522commodity_location%2522%253A3%252C%2522search_id%2522%253A%25222240ef2d8a855155c5a83bb0482ffccf197cd99dd99017347d914442b8d79bf1ccddd1f0f915ee2c660a28217e6bd5dd66590b94a7ba696647dc643b6fba1d47bf7e7d0612c3783b823e660d70df3343%2522%252C%2522log_pb%2522%253A%252220250408191218566CCF37AF1B90242B12%2522%257D&decision_enter_from=pc.selection_square.recommend_main&btm_ppre=a10091.b089178.c809509.d0&btm_pre=a10091.b24215.c644093.d595042_i2&btm_show_id=f578c8cf-e338-4822-b77f-045d94285562&pre_universal_page_params_id=583b872b-f9dd-412e-9587-4694833a881e&universal_page_params_id=3f180795-28e0-4fff-b6fb-b20bfd586d84',
'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Google Chrome";v="132"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
'x-secsdk-csrf-token': '0001000000012482d40eaccfa7a5784bb075513bb1699468b8c87670bc4d5c07922d2be496c218345b0b21308ee7'
}
params = {
'verifyFp': 'verify_m7szifjz_EqImAMTD_IDRv_4sWD_9bo7_sXGFbOtgRlYn',
'fp': 'verify_m7szifjz_EqImAMTD_IDRv_4sWD_9bo7_sXGFbOtgRlYn',
'msToken': 'I7uZRuIOIeku3Jsem5HNw5evwejIpkl9ETCeGQwB1Z-uhEuQR_xTwWc7j-xvUHeqTH7pupZ_5b6f78C_WVa5c2d0e4EQ4X-t8Nk8becYknydU08zj-_sAebX64TPtqqv6NJN7rhiP6F7hMu7uW3K_KIzgUlRzYxv4ikgoMS1M3riQZPlNjlycJA=',
}
data=common_encrypt1(json_data=json_data,params=params,ua=headers['user-agent'])
response = requests.post(
'https://buyin.jinritemai.com/pc/selection/decision/pack_detail',
params=params,
cookies=cookies,
headers=headers,
data=data,
)
return response.json()
def get_material_list(cookies):
# json_data = {
# "scene_info": {
# "request_page": 2
# },
# "biz_id": "3717234303709610080",
# "biz_id_type": 2,
# "enter_from": "pc.selection_square.recommend_main",
# "data_module": "pc-non-core",
# "extra": {
# "use_kol_product": "1"
# }
# }
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
'content-type': 'application/json',
'origin': 'https://buyin.jinritemai.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://buyin.jinritemai.com/dashboard/merch-picking-library?btm_ppre=a0.b0.c0.d0&btm_pre=a10091.b089178.c809509.d0&btm_show_id=11f0284e-a2dd-403d-baab-29a262eb52e1&pre_universal_page_params_id=&universal_page_params_id=2809881b-6321-4d1c-8605-8709c77848e6',
'sec-ch-ua': '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
'x-secsdk-csrf-token': '00010000000194bc30606cc99d766875509daaa72ac141261bac200065eaf3fe8dab9ac361a4182679de3f0cf9d1',
}
params = {
'verifyFp': 'verify_m9dzx9j1_utaEOIfT_m3VQ_4JoY_Bov0_E6EtRx86WJVG',#这两个可以随便乱写
'fp': 'verify_m9dzx9j1_utaEOIfT_m3VQ_4JoY_Bov0_E6EtRx86WJVG',
'msToken': 'I7uZRuIOIeku3Jsem5HNw5evwejIpkl9ETCeGQwB1Z-uhEuQR_xTwWc7j-xvUHeqTH7pupZ_5b6f78C_WVa5c2d0e4EQ4X-t8Nk8becYknydU08zj-_sAebX64TPtqqv6NJN7rhiP6F7hMu7uW3K_KIzgUlRzYxv4ikgoMS1M3riQZPlNjlycJA=',
}
data = {
'scene': 'PCSquareFeed',
'size': 30,
'search_text': '',
'cursor': 0,
'extra': {
'new_session_strategy': '1',
'search_id': '',
'session_id': '',
'use_kol_product': '0',
},
'filters': {},
}
data = common_encrypt1(json_data=data, params=params, ua=headers['user-agent'])
response = requests.post(
'https://buyin.jinritemai.com/pc/selection/common/material_list',
params=params,
cookies=cookies,
headers=headers,
data=data,
verify=False
)
return response.json()
@app.post("/get_products")
async def get_products(data: Dict,auth=Depends(check_jwt)):#todo 橱窗商品查询接口
cookies=data
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://buyin.jinritemai.com/dashboard/shopwindow/goods-list?pre_universal_page_params_id=&universal_page_params_id=50b10430-f2bf-4c4d-9d12-f07ade860f5c',
'sec-ch-ua': '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
}
params = {
'product_type': '0',
'page': '1',
'page_size': '20',
'filter': 'false',
'verifyFp': 'verify_m9fc66zp_hfTxtn1L_FDNH_4kRV_8fsT_u6RPpdK6oQxH',
'fp': 'verify_m9fc66zp_hfTxtn1L_FDNH_4kRV_8fsT_u6RPpdK6oQxH',
'msToken': 'O4i0W-LNj0RKjbWRfh8OBs8sMjJ8xZoDJxmo9Nb-0x9RLllln5uMzsuL8gjfVH2MGukd1T8PdTEB8HSq8xIc6qTJW_dgUPLbg827a5IIKGWRiDKtO5yoZNKV0KXlSWncKA3N6TIdiAdx8_fZaFJTNipYmcd-Me9NrXZjp_3IeUVa',
}
data = common_encrypt1(json_data='', params=params, ua=headers['user-agent'])
response = requests.get('https://buyin.jinritemai.com/api/author/shop/products', params=params, cookies=cookies,
headers=headers)
return {
"msg": "认证成功",
# "user_data": auth,
"data": response.json()
}
@app.post("/identify_products")
def identify_products(data: Dict,urls:str,auth=Depends(check_jwt)):#识别商品
cookies=data
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://buyin.jinritemai.com/dashboard/shopwindow/goods-list?pre_universal_page_params_id=&universal_page_params_id=bf3635b2-a64a-42c3-9f7f-6eb9096cc96f',
'sec-ch-ua': '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
}
params = {
# 'urls': 'https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3702192299720179773&origin_type=2631,https://haohuo.jinritemai.com/views/product/item2?id=3741702496180109752',
'urls': f'{urls}',
'scene': '3',
'verifyFp': 'verify_m9fc66zp_hfTxtn1L_FDNH_4kRV_8fsT_u6RPpdK6oQxH',
'fp': 'verify_m9fc66zp_hfTxtn1L_FDNH_4kRV_8fsT_u6RPpdK6oQxH',
'msToken': 'O4i0W-LNj0RKjbWRfh8OBs8sMjJ8xZoDJxmo9Nb-0x9RLllln5uMzsuL8gjfVH2MGukd1T8PdTEB8HSq8xIc6qTJW_dgUPLbg827a5IIKGWRiDKtO5yoZNKV0KXlSWncKA3N6TIdiAdx8_fZaFJTNipYmcd-Me9NrXZjp_3IeUVa',
}
common_encrypt2(ua=headers['user-agent'],params=params)
response = requests.get(
'https://buyin.jinritemai.com/pc/selection_tool/batch_link',
params=params,
cookies=cookies,
headers=headers,
)
return {
"msg": "认证成功",
"data": response.json()
}
@app.post("/add_products")
def add_products(data:Dict,link_url:str,promotion_ids:str,auth=Depends(check_jwt)):#todo 添加商品
cookies=data
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',
'cache-control': 'no-cache',
'content-type': 'application/json',
'origin': 'https://buyin.jinritemai.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://buyin.jinritemai.com/dashboard/shopwindow/goods-list?universal_page_params_id=4695b182-8959-4fb8-b029-c4fd66004fcf',
'sec-ch-ua': '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0',
'x-secsdk-csrf-token': '000100000001c09f45d66c9f65f6d44d52a5e8f643275f46f7e4f97ef1e5507165c9c2d20aab1834e2fed2495e14',
}
params = {
'verifyFp': 'verify_m9ayab85_7PGRhlEt_WsSw_4Zxz_AMSa_CGNDBbiWKxfm',
'fp': 'verify_m9ayab85_7PGRhlEt_WsSw_4Zxz_AMSa_CGNDBbiWKxfm',
'msToken': 'RmS7vcjWRyT-H1E2l7_Gts5Q4nGHCBsdSwuWjThr8pTeeSDbcBI6SpaVhQX9ml_z3OMIFp1EX1NVFHGsPTggO7dWBL1IoIbkNn2jLRcgqpyR3rHG5-v8vdB-x93lsNgr_TQn0SPzatZk3c1DDqL5x74X8SH-CsBJaLExWecM7yYVD1cA1x-ccg==',
}
pre_data_list = []
for id,url in promotion_ids.split(","),link_url.split(","):
pre_data_list.append({
'promotion_id': f'{id}',
'bind_source': '0',
'link_url': f'{url}',
})
common_encrypt2(ua=headers['user-agent'],params=params)
json_data = {
'pmts': pre_data_list,
'hide_status': 2,
}
response = requests.post(
'https://buyin.jinritemai.com/api/shop/bind/',
params=params,
cookies=cookies,
headers=headers,
json=json_data,
)
return {
"msg": "认证成功",
"data": response.json()
}
@app.post("/del_unbind")
def del_unbind(data:Dict,promotion_ids:str):
cookies=data
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',
'cache-control': 'no-cache',
'content-type': 'application/json',
'origin': 'https://buyin.jinritemai.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://buyin.jinritemai.com/dashboard/shopwindow/goods-list?universal_page_params_id=4695b182-8959-4fb8-b029-c4fd66004fcf',
'sec-ch-ua': '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0',
'x-secsdk-csrf-token': '000100000001c09f45d66c9f65f6d44d52a5e8f643275f46f7e4f97ef1e5507165c9c2d20aab1834e2fed2495e14',
}
params = {
'verifyFp': 'verify_m9ayab85_7PGRhlEt_WsSw_4Zxz_AMSa_CGNDBbiWKxfm',
'fp': 'verify_m9ayab85_7PGRhlEt_WsSw_4Zxz_AMSa_CGNDBbiWKxfm',
'msToken': 'RmS7vcjWRyT-H1E2l7_Gts5Q4nGHCBsdSwuWjThr8pTeeSDbcBI6SpaVhQX9ml_z3OMIFp1EX1NVFHGsPTggO7dWBL1IoIbkNn2jLRcgqpyR3rHG5-v8vdB-x93lsNgr_TQn0SPzatZk3c1DDqL5x74X8SH-CsBJaLExWecM7yYVD1cA1x-ccg==',
}
common_encrypt2(headers['user-agent'],params=params)
promotion_ids_list=[]
for i in promotion_ids.split(","):promotion_ids_list.append(i)
json_data = {
'promotion_ids': promotion_ids_list,
}
print(json_data)
response = requests.post(
'https://buyin.jinritemai.com/api/anchor/shop/unbind',
params=params,
cookies=cookies,
headers=headers,
json=json_data,
)
return {
"msg": "认证成功",
"data": response.json()
}
if __name__ == "__main__":
uvicorn.run(app,host="0.0.0.0",port=8080)
# get_material_list()
# pack_detail()
# get_products()
# identify_products()
# add_products()