[U] Update script
This commit is contained in:
@@ -1,20 +1,22 @@
|
|||||||
import json
|
|
||||||
import os
|
import os
|
||||||
import time
|
import urllib.parse
|
||||||
|
from json import JSONDecodeError
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from types import SimpleNamespace
|
from typing import Literal
|
||||||
from typing import Any, Literal
|
|
||||||
from urllib.parse import urlparse, parse_qs
|
from urllib.parse import urlparse, parse_qs
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
import uvicorn
|
||||||
from fastapi import Body, FastAPI
|
from fastapi import Body, FastAPI
|
||||||
from hypy_utils import json_stringify
|
from hypy_utils import json_stringify
|
||||||
from hypy_utils.serializer import pickle_decode, pickle_encode
|
from hypy_utils.serializer import pickle_decode, pickle_encode
|
||||||
from starlette.middleware.cors import CORSMiddleware
|
from starlette.middleware.cors import CORSMiddleware
|
||||||
|
from starlette.requests import Request
|
||||||
|
from starlette.responses import PlainTextResponse
|
||||||
|
|
||||||
from dotdotbuy_auth import sign_params, sign_api
|
from dotdotbuy_auth import sign_params, sign_api
|
||||||
from popos.popos import *
|
|
||||||
from popos.gateway_order import *
|
from popos.gateway_order import *
|
||||||
|
from popos.popos import *
|
||||||
|
|
||||||
r = requests.Session()
|
r = requests.Session()
|
||||||
r.encoding = 'utf-8'
|
r.encoding = 'utf-8'
|
||||||
@@ -33,11 +35,11 @@ def user_id() -> str:
|
|||||||
|
|
||||||
def login(user: str, passwd: str) -> LoginData:
|
def login(user: str, passwd: str) -> LoginData:
|
||||||
# Desktop:
|
# Desktop:
|
||||||
resp: SuperbuyResponse = js(r.post('https://login.superbuy.com/api/site/login', data={'login_name': user, 'password': passwd}))
|
# resp: SuperbuyResponse = jsn(r.post('https://login.superbuy.com/api/site/login', data={'login_name': user, 'password': passwd}))
|
||||||
assert resp.state == 0, resp
|
# assert resp.state == 0, resp
|
||||||
|
|
||||||
# Mobile:
|
# Mobile:
|
||||||
resp: SuperbuyResponse = js(r.post('https://api.superbuy.com/auth/login', data={'loginToken': user, 'password': passwd}))
|
resp: SuperbuyResponse = jsn(r.post('https://api.superbuy.com/auth/login', data={'loginToken': user, 'password': passwd}))
|
||||||
assert resp.state == 0, resp
|
assert resp.state == 0, resp
|
||||||
data: LoginData = resp.data
|
data: LoginData = resp.data
|
||||||
|
|
||||||
@@ -62,10 +64,10 @@ def login_cached(user: str, passwd: str):
|
|||||||
|
|
||||||
|
|
||||||
def app_order_list():
|
def app_order_list():
|
||||||
# endpoint = 'https://front.superbuy.com/package/parcel/expert-send-list'
|
# Mobile
|
||||||
endpoint = 'https://front.superbuy.com/package/parcel/app-list'
|
endpoint = 'https://front.superbuy.com/package/parcel/app-list'
|
||||||
req = r.get(endpoint, params=dict(pageSize=100, currPage=1, includeOverdueItemFlg=1), headers=sign_params(dict(r.headers)))
|
req = r.get(endpoint, params=dict(pageSize=100, currPage=1, includeOverdueItemFlg=1), headers=sign_params(dict(r.headers)))
|
||||||
resp: SuperbuyResponse = js(req)
|
resp: SuperbuyResponse = jsn(req)
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
@@ -73,11 +75,12 @@ def gateway_order_list(limit: int = 200, type: Literal['storage', 'payment', 'al
|
|||||||
"""
|
"""
|
||||||
Get a list of orders that are already added to the account.
|
Get a list of orders that are already added to the account.
|
||||||
"""
|
"""
|
||||||
|
# Mobile
|
||||||
endpoint = f'https://api.superbuy.com/gateway/orderpkg/list/{user_id()}/1/{limit}'
|
endpoint = f'https://api.superbuy.com/gateway/orderpkg/list/{user_id()}/1/{limit}'
|
||||||
print(endpoint)
|
print(endpoint)
|
||||||
print(sign_api(dict(r.headers)))
|
print(sign_api(dict(r.headers)))
|
||||||
req = r.get(endpoint, params=dict(type=type, orderType=orderType), headers=sign_api(dict(r.headers)))
|
req = r.get(endpoint, params=dict(type=type, orderType=orderType), headers=sign_api(dict(r.headers)))
|
||||||
resp: PaginatedResponse = js(req)
|
resp: PaginatedResponse = jsn(req)
|
||||||
assert resp.Code == 10000, resp
|
assert resp.Code == 10000, resp
|
||||||
return resp.List
|
return resp.List
|
||||||
|
|
||||||
@@ -90,12 +93,17 @@ def crawl(item_url: str) -> dict:
|
|||||||
id = get_url_param(item_url, 'id')
|
id = get_url_param(item_url, 'id')
|
||||||
out_path = Path(f'crawler/{id}.json')
|
out_path = Path(f'crawler/{id}.json')
|
||||||
|
|
||||||
if not out_path.is_file():
|
while True:
|
||||||
print(f'Crawling {id}...')
|
if not out_path.is_file():
|
||||||
out_path.parent.mkdir(parents=True, exist_ok=True)
|
print(f'Crawling {id}...')
|
||||||
out_path.write_text(r.post('https://front.superbuy.com/crawler/', data={"needSoldOutSkuInfo": 1, "location": 2, "goodUrl": item_url}).text)
|
out_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
resp = r.post('https://front.superbuy.com/crawler/', data={"needSoldOutSkuInfo": 1, "location": 2, "goodUrl": item_url})
|
||||||
return json.loads(out_path.read_text())
|
if resp.status_code != 200:
|
||||||
|
print(f"Request failed: {resp.status_code}")
|
||||||
|
assert input("Retry? [y/N]").lower() == 'y'
|
||||||
|
continue
|
||||||
|
out_path.write_text(resp.text)
|
||||||
|
return resp.json()
|
||||||
|
|
||||||
|
|
||||||
def create_diy_order(create: list[TaobaoOrder]):
|
def create_diy_order(create: list[TaobaoOrder]):
|
||||||
@@ -106,7 +114,7 @@ def create_diy_order(create: list[TaobaoOrder]):
|
|||||||
"""
|
"""
|
||||||
orders = gateway_order_list()
|
orders = gateway_order_list()
|
||||||
ids = [get_url_param(i.GoodsLink, 'id') for o in orders for i in o.Items if 'id=' in i.GoodsLink]
|
ids = [get_url_param(i.GoodsLink, 'id') for o in orders for i in o.Items if 'id=' in i.GoodsLink]
|
||||||
create = [o for o in create if o.date >= '2022-08-10' and not any(get_url_param(i.url, 'id') in ids for i in o.items)]
|
create = [o for o in create if o.date >= '2023-01-01' and not any(get_url_param(i.url, 'id') in ids for i in o.items)]
|
||||||
for c in create:
|
for c in create:
|
||||||
shop_name = c.store.name
|
shop_name = c.store.name
|
||||||
shop_id = crawl(c.items[0].url)['data']['shop']['shopId']
|
shop_id = crawl(c.items[0].url)['data']['shop']['shopId']
|
||||||
@@ -161,10 +169,10 @@ def fill_express_no(taobao_data: list[TaobaoOrder]):
|
|||||||
|
|
||||||
def load_taobao(p: str = 'bought_items.json') -> list[TaobaoOrder]:
|
def load_taobao(p: str = 'bought_items.json') -> list[TaobaoOrder]:
|
||||||
p = Path(p)
|
p = Path(p)
|
||||||
return js(p.read_text())
|
return jsn(p.read_text())
|
||||||
|
|
||||||
|
|
||||||
delivery_companies: list[SuperbuyDeliveryCompany] = js(Path('data/delivery.json').read_text('utf-8'))
|
delivery_companies: list[SuperbuyDeliveryCompany] = jsn(Path('data/delivery.json').read_text('utf-8'))
|
||||||
delivery_name_map = {d.name: d for d in delivery_companies}
|
delivery_name_map = {d.name: d for d in delivery_companies}
|
||||||
|
|
||||||
|
|
||||||
@@ -176,21 +184,27 @@ app = FastAPI()
|
|||||||
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True)
|
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True)
|
||||||
|
|
||||||
|
|
||||||
@app.post('/taobao/fill_items')
|
@app.post('/taobao', response_class=PlainTextResponse)
|
||||||
def taobao_fill_items(body: Any = Body):
|
def taobao_complete(body: Any = Body()):
|
||||||
taobao_data: list[TaobaoOrder] = js(body)
|
taobao_data: list[TaobaoOrder] = jsn(body)
|
||||||
create_diy_order(taobao_data)
|
|
||||||
|
|
||||||
|
|
||||||
@app.post('/taobao/fill_delivery')
|
|
||||||
def taobao_fill_delivery(body: Any = Body):
|
|
||||||
taobao_data: list[TaobaoOrder] = js(body)
|
|
||||||
print(taobao_data)
|
print(taobao_data)
|
||||||
pass
|
create_diy_order(taobao_data)
|
||||||
|
fill_express_no(taobao_data)
|
||||||
|
return "Up"
|
||||||
|
|
||||||
|
|
||||||
|
@app.post('/login-desktop', response_class=PlainTextResponse)
|
||||||
|
async def fn_login(req: Request):
|
||||||
|
# await fetch("http://127.0.0.1:12842/login", {method: "POST", body: document.cookie})
|
||||||
|
body = (await req.body()).decode()
|
||||||
|
cookies = [[urllib.parse.unquote(k) for k in c.strip().split("=", 1)] for c in body.split(";")]
|
||||||
|
# noinspection PyTypeChecker
|
||||||
|
r.cookies.update(dict(cookies))
|
||||||
|
print(app_order_list())
|
||||||
|
return "Up"
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print(login(os.environ['user'], os.environ['pass']))
|
print(login(os.environ['user'], os.environ['pass']))
|
||||||
# print(r.get(f'https://api.superbuy.com/gateway/oauth2/personalcenter/{USERID}').json())
|
print(gateway_order_list())
|
||||||
create_diy_order(load_taobao())
|
uvicorn.run(app, host="127.0.0.1", port=12842)
|
||||||
fill_express_no(load_taobao())
|
|
||||||
|
|||||||
Reference in New Issue
Block a user