Python で書かれた Taobao スナップ アシスタント: お気に入りの商品を簡単にスナップ

使用方法
1. このソフトウェアを実行し、リンクをコピーして検索し、淘宝網の検索ボックスにログインします。

2. モバイル淘宝網は、スナップアップする必要があるリンクを共有します。

3. 採取住所の行政区分コード、スナップアップする製品の SKUID、およびスナップアップが開始された時刻 (13 桁のタイムスタンプ) を入力します。

Python代コード
インポートリクエスト、re、time、execjs、random
import urllib.parse
from urllib.parse import unquote


def get_sign(data): ##メソッドが失敗した場合は、まずopen('test.js', 'r',coding='utf8') as f:
jscode = f.read()
sign = execjsを使用して JS ファイルを確認します。.compile(jscode)
sign1 =sign.call("sign", data)
returnsign1

def getparameters():
short link = input('WeChat 共有リンクを入力してください:')
listend = { 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1。 4 (KHTML、Gecko など) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI' } r =requests.get(short link, headers=heard).text実アドレス = r[r.find("https://amtaabao .com/"):r.find("'", r.find("https://amtaabao.com/"))] tk = ショートリンク [ショートリンク.find('=') + 1:] ID = 実アドレス[実アドレス.find('/i') + 2:実アドレス.find('.htm')]価格 = 実アドレス[実アドレス.find('price=') + 6:実アドレス.find ( '&', 実アドレス.find('price='))] suid = 実アドレス[実アドレス.find('suid=') + 5:実アドレス.find('&', 実アドレス.find('suid='))] shareUniqueId = 実アドレス [実アドレス.find('shareUniqueId=') + 14:実アドレス.find('&', 実アドレス.find('shareUniqueId='))]









ut_sk = 実アドレス [実アドレス.find('ut_sk=') + 6: 実アドレス.find('&', 実アドレス.find('ut_sk='))] un = 実アドレス [実アドレス.find(
' un=') + 3: 実アドレス.find('&', 実アドレス.find('un='))]
spm = 実アドレス [実アドレス.find('spm=') + 4: 実アドレス.find ('&', 実アドレス.find('spm='))]
sp_tk = 実アドレス [実アドレス.find('sp_tk=') + 6:実アドレス.find('&', 実アドレス.find(' sp_tk='))]
bc_fl_src = 実アドレス [実アドレス.find('bc_fl_src=') + 10:実アドレス.find('&', 実アドレス.find('bc_fl_src='))] short_name = 実アドレス
[実アドレス.find('short_name=') + 11:実アドレス.find('&', 実アドレス.find('short_name='))] bxsign
= 実アドレス [実アドレス.find('bxsign=') + 7:]
聞いた = { 'リファラー': 'https://h5.m.taobao.com/','ユーザーエージェント': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 のような Mac OS X) AppleWebKit/600.1.4 (KHTML、Gecko のような) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI' }



type = str(int(time.time() * 1000))
r = request.get(
' https://h5api.m.taabao.com/h5/mtop.taabao.baichuan.smb.get/1.0/? jsv =2.6.2&appKey=12574478&t=1641292896089&sign=e02e24da3b819b99a6d7344bb0c310a8&api=mtop.taabao.baichuan.smb.get&v=1.0&type=originaljson&dataType=jsonp&timeout=10 000'、headers=heard ).cookies トークン = r['_m_h5_tk'][:
r
[ '_m_h5_tk'].find('_')]

データ = '{' + '"id":"{}"、"価格":"{}"、"sourceType":"item"、"suid":"{}"、"shareUniqueId":"{}" ,"ut_sk":"{}","un":"{}","share_crt_v":"1","un_site":"0","spm":"{}","sp_tk":"{ }","bc_fl_src":"{}","cpp":"1","shareurl":"true","short_name":"{}","bxsign":"{}","sm": "{}","app":"weixin","detail_v":"3.5.0","exParams":"'.format(
ID、価格、suid、shareUniqueId、ut_sk、un、spm、sp_tk、bc_fl_src、 short_name、bxsign、
tk) + r'{"id":"' + ID + r'","price":"' + 価格 + r'","sourceType":"item","suid":"' + suid + r '","shareUniqueId":"' + shareUniqueId + r'","ut_sk":"' + ut_sk + r'","un":"' + un + r'","share_crt_v":"1", "un_site":"0","spm":"' + spm + r'"、"sp_tk":"' + sp_tk + r'"、"bc_fl_src":"' + bc_fl_src + r'"、"cpp" :"1","shareurl":"true","short_name":"' + short_name + r'","bxsign":"' + bxsign + r'","sm":"' + tk + r' "、"アプリ":"weixin","appReqFrom":"detail","container_type":"xdetail","dinamic_v3":"true","supportV7":"true","ultron2":"true"}","itemNumId": "' + ID + '","pageCode":"ミニアプリ詳細","_from_":"ミニアプリ"}'

記号 = get_sign( トークン + '&' + キーワード + '&12574478&' + データ)
URL = 'https://h5api.m.taabao.com/h5/mtop.taabao.detail.getdetail/6.0/?jsv=2.6 。 2&appKey=12574478&t={}&sign={}&api=mtop.taabao.detail.getdetail&v=6.0&time=202012%40taabao_h5_9.17.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&type=jsonp&da taType=jsonp&callback= mtopjsonp1&data={}' .format(
string, signed, urllib.parse.quote(data))
# スペルチェック---------------------------- --- -------------
r = request.get(url, headers=heard).text
categoryId=re.findall(r'categoryId":"(.*?)"', r)[ 0]
print(categoryId)
sellerId=re.findall(r'sellerId":(.*?),',r)[0]
print(sellerId)
itemId=re.findall(r'&itemId=(.*?)', r)[0]
print(itemId)
itemId、sellerId、categoryIdを返す


defgenerateUmidToken():
umid_token = 'C' + str(int(time.time() * 1000))
umid_token += ''.join(str(random.choice(range(10))) for _ in range(11) ))
umid_token += str(int(time.time() * 1000))
umid_token += ''.join(str(random.choice(range(10))) for _ in range(3))
return umid_token

def 淘宝扫码登录():
session =requests.Session()
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/79.0。 3945.130 Safari/537.36' } login_url = 'https://login.taabao.com/member/login.jhtml?allp=&wbp=&sub=false&sr=false&c_is_scure=&from=tbTop&type=1&style=&minipara=&css_style=&tpl_redirect_url= https%3A //www.taobao.com&popid=&callback=&is_ignore=&trust_alipay=&full_redirect=&need_sign=&sign=×tamp=&from_encoding=&qrLogin=&keyLogin=&newMini2=' getqr_login_url = 'https://qrlogin.taovao.com/qrcodelogin/generateQRCode4Login.do?adUrl=&adImage=&adText=&viewFd4PC=&viewFd4Mobile=&from=tb&appkey=00000000&umid_token={}'





checkqr_login_url = 'https://qrlogin.taabao.com/qrcodelogin/qrcodeLoginCheck.do?lgToken={}&defaulturl=https://www.taabao.com'
session.headers.update(headers)
umid_token = generatedUmidToken()
応答 = session.get(login_url)
応答 = session.get(getqr_login_url.format(umid_token))
応答_json = response.json()
if response_json['success']:
xcode_url = response_json.get('url', '')
lg_token = response_json .get('lgToken', '')
print('复制此链接到某宝搜索进行登录:','https://login.m.taabao.com/qrcodeCheck.htm?lgToken={}&tbScanOpenType=Notification' .format(lg_token))
else:
raise RuntimeError('ログインに失敗しました、qrcode の URL を取得できません')
session.headers.update({'Referer': 'https://login.taabao.com/member/login_unusual.htm?user_num_id=2979250577&is_ignore=&from=tbTop&style=
&popid=&callback=&minipara=&css_style=&is_scure=true&c_is_secure=&tpl_redirect_url= https%3A%2F%2Fwww.
タオバオ.com%2F&cr=https%3A%2F%2Fwww.タオバオ。
com%2F&trust_alipay=&full_redirect=&need_sign=¬_duplite_str =&from_encoding=&sign=×tamp=&sr=false&guf=&sub=false&wbp=&wfl=null&allp=&loginsite=0&login_type=11&lang =zh_CN&appkey=00000000¶m= 7nmIF0VTf6m%
2Bbx8wuCmPLTEdh1Ftef8 %2B5yUA%2FXNtAI%2FfMwadkeaCast40u2Ng0%2FC7Z75s
OSVLMugWTqKjJ7aA55JYIL%2FPDFJ7zaJhq9XSVUOX%2B1AxQatuIvw4TXGJm1VG4alZ2UohVAAt5WTLYbs5im077nTG%2BOkovORQNt MCEzWKM
e0xcuienFAhsBhC0V7qIYZJvPGOOEt0tORA8Fv1zYPuOkWEPDFsPwYG5xj4LTKNZt5HSRRHkviiPy9AJ9uC%2Bs7V%2FQ7b6K07YUG1fA3tFwAL
GnorSUXRdhcXUBBAt6IiyStIkWFWDgJEymOAXOS5RNGlO1EL5ppmpQas7BarrW2Krui4bxV81AJXyxLfnk3MOxI2dUNdO9VQNY0F6a6nk%2FCzUfR
0NfPRrIoXuZDn2N01A8q5XGrMlWmBCH5%2FSKz6%2F%2BrUx3%2FxQTYWmgV49rVSdtySIHip5PsrXHWXCbHqscdve540l5CUKTT7znsoL45pth%2FosxMUb649Yw1EPAq'})
while True:
response = session.get(checkqr_login_url.format(lg_token))
response_json = response.json()
# --扫码成功
の場合、response_json['code'] == '10006':
# ----检查か安全验证
response = session.get(response_json.get('url', '') + '&umid_token={}'.format (umid_token))
request.url.find('login_unusual.htm') > -1 の場合:
raise RuntimeError('ログインに失敗しました。アカ​​ウントにはセキュリティ検証が必要です')
uid, token = re.findall(r'uid=(.*?)&token=(.*?)&', response_json.get('url') )[0]
username = unquote(uid.replace('cntaabao', ''))
Break
# --QR コードの有効期限が切れています
elif response_json['code'] == '10004':
raise RuntimeError('ログインに失敗しました、qrcode有効期限が切れています')
# -- スキャンまたはその他の理由
elif response_json['code'] in ['10001', '10000']:
pass
time.sleep(1)

cookies_dict = request.utils.dict_from_cookiejar(session.cookies)
print('[INFO]: アカウント -> %s、ログイン成功' % ユーザー名)
infos_return = {'ユーザー名': ユーザー名, 'uid': uid, 'トークン': infos_return.update
(response_json)
print(cookies_dict)
return cookies_dict

cookies=淘宝スキャンコードlogin()
tb_token=cookies['_tb_token_']
tsid = cookies['t']
itemId,sellerId,categoryId=パラメータを取得() # https://m.tb.cn/h.fQxjOfl?tk =Igyd2bCwOtMdeliveryCityCode
= input('地元の郵便番号を入力してください:')#汕頭などの行政区分コードは 440500
skuId = input('製品の SKUID を入力してください:') #'4440144444848' が
聞こえました = {'referer': ' https://detail.tmall.com/item.htm?&id={}&skuId={}'.format(itemId, skuId), '
user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit /537.36 (KHTML、Gecko など) Chrome/97.0.4692.99 Safari/537.36',
}


購入時間=input('購入時間を入力してください:')
while True:
print(type(販売時間))
r =requests.get('http://api.m.taabao.com/rest/api3.do? api =mtop.common.getTimestamp').textTimestamp
=int(r[-16:-3])
if int(時間の購入)<=timestamp:
#ks = str(time.time() * 1000)
ks = タイムスタンプ
r =requests.get(
'https://fbuy.tmall.com/cart/addCartItems.do?_tb_token_={}&add=%7B%22deliveryCityCode%22%3A{}%2C%22campaignId%22%3A0%2C%22from_etao%22%3A%22%22%2C%22umpkey%22%3A%22%22 %2C%22items%22%3A%5B%7B%22itemId%22%3A%22{}%22%2C%22skuId%22%3A%22{}%22%2C%22iChannel%22%3A%22%22 %2C%22quantity%22%3A1%2C%22serviceInfo%22%3A%22%22%2C%22extraAttribute%22%3A%7B%7D%7D%5D%7D&tsid={}&itemId={}&sellerId={}&categoryId ={}&root_refer=&item_url_refer=&noAnim=true&_ksTS={}_787&callback=jsonp788'.format(
tb_token,deliveryCityCode,itemId,skuId,tsid,itemId,sellerId,categoryId,ks),headers=heard,
cookies=cookies)
print(r.text)
break
print('時間が経過していません。引き続き待ちます')
time.sleep (0.5)

おすすめ

転載: blog.csdn.net/winkexin/article/details/131324438