From 7f1a5b5e67fda9ccb3168efed22666e8ddc79586 Mon Sep 17 00:00:00 2001 From: Ken Stevan Date: Tue, 15 Apr 2025 20:34:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=A0=E9=99=A4=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth.py | 29 ++++ main.py | 431 ++++++++++++++++++++++++++++++++++++++++++++--- requirements.txt | 7 + test77.py | 89 ++++++++++ web.py | 428 ---------------------------------------------- 5 files changed, 534 insertions(+), 450 deletions(-) create mode 100644 auth.py create mode 100644 requirements.txt create mode 100644 test77.py delete mode 100644 web.py diff --git a/auth.py b/auth.py new file mode 100644 index 0000000..3f9f974 --- /dev/null +++ b/auth.py @@ -0,0 +1,29 @@ +from jose import JWTError, jwt +from fastapi import HTTPException +from datetime import datetime, timedelta +from jose import ExpiredSignatureError +SECRET_KEY = "Bv8Z1&xG$Aq7!s9PfL@t#QwE2rY%Nk*mCjH^Rb6DuXpZ+3VoBO" +ALGORITHM = "HS256" +ACCESS_TOKEN_EXPIRE_MINUTES = 30 + +# === 创建 Token === +def create_access_token(data: dict, expires_delta: timedelta = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)): + to_encode = data.copy() + expire = datetime.utcnow() + expires_delta + to_encode.update({"exp": expire}) + encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) + return encoded_jwt + + +def verify_token(token: str): + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + if payload["role"] != "admin": + return None + + + return payload + except ExpiredSignatureError: + raise HTTPException(status_code=401, detail="Token已过期") + except JWTError: + raise HTTPException(status_code=401, detail="无效的Token") \ No newline at end of file diff --git a/main.py b/main.py index 3f9f974..aeae5f8 100644 --- a/main.py +++ b/main.py @@ -1,29 +1,416 @@ +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 fastapi import HTTPException from datetime import datetime, timedelta -from jose import ExpiredSignatureError -SECRET_KEY = "Bv8Z1&xG$Aq7!s9PfL@t#QwE2rY%Nk*mCjH^Rb6DuXpZ+3VoBO" -ALGORITHM = "HS256" -ACCESS_TOKEN_EXPIRE_MINUTES = 30 +from cryptography.fernet import Fernet +import urllib.parse +import requests +from auth import verify_token,create_access_token -# === 创建 Token === -def create_access_token(data: dict, expires_delta: timedelta = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)): - to_encode = data.copy() - expire = datetime.utcnow() + expires_delta - to_encode.update({"exp": expire}) - encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) - return encoded_jwt +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', + } -def verify_token(token: str): - try: - payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) - if payload["role"] != "admin": - return None + 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() - return payload - except ExpiredSignatureError: - raise HTTPException(status_code=401, detail="Token已过期") - except JWTError: - raise HTTPException(status_code=401, detail="无效的Token") \ No newline at end of file +@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() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6ccf037 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +cryptography==44.0.2 +fastapi==0.115.12 +pydantic==2.11.3 +PyExecJS==1.5.1 +python_jose==3.4.0 +Requests==2.32.3 +uvicorn==0.34.1 diff --git a/test77.py b/test77.py new file mode 100644 index 0000000..728e54b --- /dev/null +++ b/test77.py @@ -0,0 +1,89 @@ +import requests +import uuid +import time +# from auth import create_access_token +data={ + "user_id": str(uuid.UUID), + "role": "admin", + "fp":int(time.time()), + } +jwt=requests.post("http://localhost:8080/login",json=data).json()['access_token'] +#TODO 这里是巨量百应的ck +data2 = { + 'BUYIN_SASID': 'SID2_7492981858080112935', + 'SASID':'SID2_7492981858080112935' +} +#TODO 这里是抖音的ck +data1 = { + 'ttwid': '1%7CUVB51cDI7GY0yyiCBtrU5IoTdHixuxTrNykHrPzbRCk%7C1744392589%7Cb0ed96d039d373f75e9f86983304ad70532dd23a4df1af69f1b0828103c1b6e5', + 'n_mh': 'geOcP6qU-laruJUx6JHMEUZkPwLFtVmTFaO3fJ46gMI', + 'sid_guard': '9e24a6486603b34cc5c60a16712a9fb3%7C1744596869%7C5184000%7CFri%2C+13-Jun-2025+02%3A14%3A29+GMT', + 'uid_tt': 'adb3fcdab0d4ed5626f9a3c5c4a5bf47', + 'uid_tt_ss': 'adb3fcdab0d4ed5626f9a3c5c4a5bf47', + 'sid_tt': '9e24a6486603b34cc5c60a16712a9fb3', + 'sessionid': '9e24a6486603b34cc5c60a16712a9fb3', + 'sessionid_ss': '9e24a6486603b34cc5c60a16712a9fb3', + 'is_staff_user': 'false', + 'sid_ucp_v1': '1.0.0-KDk3OTIzZTIxZDJmZDMxYWIyOTVlODU5NmQyMDhhOTQ2OGQ2MTYzMDcKIQjNiNDHsIz1BxCF3_G_BhjvMSAMMMafwpEGOAdA9AdIBBoCbHEiIDllMjRhNjQ4NjYwM2IzNGNjNWM2MGExNjcxMmE5ZmIz', + 'ssid_ucp_v1': '1.0.0-KDk3OTIzZTIxZDJmZDMxYWIyOTVlODU5NmQyMDhhOTQ2OGQ2MTYzMDcKIQjNiNDHsIz1BxCF3_G_BhjvMSAMMMafwpEGOAdA9AdIBBoCbHEiIDllMjRhNjQ4NjYwM2IzNGNjNWM2MGExNjcxMmE5ZmIz', + 'login_time': '1744596869897', + 'IsDouyinActive': 'true', + 'publish_badge_show_info': '%220%2C0%2C0%2C1744596872958%22', + 'xg_device_score': '7.523030082041696', + 'SelfTabRedDotControl': '%5B%5D', + '_bd_ticket_crypt_cookie': '15005b8d8b6ad1f68d33b050cfdf481e', + '__security_mc_1_s_sdk_sign_data_key_web_protect': '82669e23-4437-b1c5', + '__security_mc_1_s_sdk_cert_key': 'f4c89aed-4e94-bacb', + '__security_server_data_status': '1', + 'bd_ticket_guard_client_data': 'eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCUE8wVmY0bGZmSGlldGhPblN1MFNVM1pHR3Vwbk9CUlE2UElUTlY0WGphWko2V2EvMmkrMVhVN0hUQWM2VFpsSXRkTnA4Q1JqRHZzdXh5SEpRZGlES2c9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoyfQ%3D%3D', + 'passport_fe_beating_status': 'true', + 'odin_tt': '7281e3ee93766f632e95b0ad354335ee955ebc379555617fbc680eb18d393f054d84e37c9cec7f01214eddd9a5749c55596ae87f5995403c92e7a268f5fafed7', + 'live_can_add_dy_2_desktop': '%221%22', + 'volume_info': '%7B%22isMute%22%3Afalse%2C%22isUserMute%22%3Afalse%2C%22volume%22%3A0.6%7D', + 'download_guide': '%223%2F20250414%2F0%22', +} + +headers = { +"Authorization": f"Bearer {jwt}" +} +import unittest + +class MyTestCase(unittest.TestCase): + ''' + 测试识别 + ''' + def test_identify_products(self): + 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" + } + result=requests.post("http://localhost:8080/identify_products",json=data2,params=params,headers=headers) + print(f"result.json()---->{result.json()}") + ''' + 测试增加商品 + ''' + def test_add_products(self): + params = {#请注意这里url要与id对应(顺序对应) + "link_url":"https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3702192299720179773&origin_type=2631,https://haohuo.jinritemai.com/views/product/item2?id=3741702496180109752", + "promotion_ids":"3702192299720179773,3741702496180109752" + } + result=requests.post("http://localhost:8080/add_products",json=data2,params=params,headers=headers) + print(f"result.json()---->{result.json()}") + ''' + 测试删除 + ''' + def test_del_unbind(self): + params = { + "promotion_ids": "3723494051140468845,3568029813883172377" + } + result=requests.post("http://localhost:8080/del_unbind",json=data2,params=params,headers=headers) + print(f"result.json()---->{result.json()}") + + ''' + 测试小黄车 + ''' + def test_get_yellow_car(self): + params={"room_id":"7493339316282723123", + "author_id":"1626907841411991" + } + result = requests.post("http://localhost:8080/get_yellow_car_products", json=data1, params=params, headers=headers) + print(f"result.json()---->{result.json()}") \ No newline at end of file diff --git a/web.py b/web.py deleted file mode 100644 index 79fc720..0000000 --- a/web.py +++ /dev/null @@ -1,428 +0,0 @@ -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,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': '4498836619270612', - '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, - } - # json_data = { - # 'pmts': [ - # { - # 'promotion_id': '3702193318256605699', - # 'bind_source': '0', - # 'link_url': 'https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3702192299720179773&origin_type=2631', - # }, - # { - # 'promotion_id': '3743576749200507019', - # 'bind_source': '0', - # 'link_url': 'https://haohuo.jinritemai.com/views/product/item2?id=3741702496180109752', - # }, - # ], - # '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_id: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) - json_data = { - 'promotion_id': f'{promotion_id}', - } - - 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=8000) - # get_material_list() - # pack_detail() - # get_products() - # identify_products() - # add_products()