sign获取
- sign校验了token、时间错、appkey、data参数
2在这里插入代码片
`
function jj (e) {
function t(e, t) {
return e << t | e >>> 32 - t
}
function n(e, t) {
var n, r, o, i, a;
return o = 2147483648 & e,
i = 2147483648 & t,
a = (1073741823 & e) + (1073741823 & t),
(n = 1073741824 & e) & (r = 1073741824 & t) ? 2147483648 ^ a ^ o ^ i : n | r ? 1073741824 & a ? 3221225472 ^ a ^ o ^ i : 1073741824 ^ a ^ o ^ i : a ^ o ^ i
}
function r(e, r, o, i, a, u, s) {
return e = n(e, n(n(function(e, t, n) {
return e & t | ~e & n
}(r, o, i), a), s)),
n(t(e, u), r)
}
function o(e, r, o, i, a, u, s) {
return e = n(e, n(n(function(e, t, n) {
return e & n | t & ~n
}(r, o, i), a), s)),
n(t(e, u), r)
}
function i(e, r, o, i, a, u, s) {
return e = n(e, n(n(function(e, t, n) {
return e ^ t ^ n
}(r, o, i), a), s)),
n(t(e, u), r)
}
function a(e, r, o, i, a, u, s) {
return e = n(e, n(n(function(e, t, n) {
return t ^ (e | ~n)
}(r, o, i), a), s)),
n(t(e, u), r)
}
function u(e) {
var t, n = "", r = "";
for (t = 0; 3 >= t; t++)
n += (r = "0" + (e >>> 8 * t & 255).toString(16)).substr(r.length - 2, 2);
return n
}
var s, l, c, d, f, p, h, m, g, v;
for (v = function(e) {
for (var t, n = e.length, r = n + 8, o = 16 * ((r - r % 64) / 64 + 1), i = new Array(o - 1), a = 0, u = 0; n > u; )
a = u % 4 * 8,
i[t = (u - u % 4) / 4] = i[t] | e.charCodeAt(u) << a,
u++;
return a = u % 4 * 8,
i[t = (u - u % 4) / 4] = i[t] | 128 << a,
i[o - 2] = n << 3,
i[o - 1] = n >>> 29,
i
}(e = function(e) {
e = e.replace(/\r\n/g, "\n");
for (var t = "", n = 0; n < e.length; n++) {
var r = e.charCodeAt(n);
128 > r ? t += String.fromCharCode(r) : r > 127 && 2048 > r ? (t += String.fromCharCode(r >> 6 | 192),
t += String.fromCharCode(63 & r | 128)) : (t += String.fromCharCode(r >> 12 | 224),
t += String.fromCharCode(r >> 6 & 63 | 128),
t += String.fromCharCode(63 & r | 128))
}
return t
}(e)),
p = 1732584193,
h = 4023233417,
m = 2562383102,
g = 271733878,
s = 0; s < v.length; s += 16)
l = p,
c = h,
d = m,
f = g,
p = r(p, h, m, g, v[s + 0], 7, 3614090360),
g = r(g, p, h, m, v[s + 1], 12, 3905402710),
m = r(m, g, p, h, v[s + 2], 17, 606105819),
h = r(h, m, g, p, v[s + 3], 22, 3250441966),
p = r(p, h, m, g, v[s + 4], 7, 4118548399),
g = r(g, p, h, m, v[s + 5], 12, 1200080426),
m = r(m, g, p, h, v[s + 6], 17, 2821735955),
h = r(h, m, g, p, v[s + 7], 22, 4249261313),
p = r(p, h, m, g, v[s + 8], 7, 1770035416),
g = r(g, p, h, m, v[s + 9], 12, 2336552879),
m = r(m, g, p, h, v[s + 10], 17, 4294925233),
h = r(h, m, g, p, v[s + 11], 22, 2304563134),
p = r(p, h, m, g, v[s + 12], 7, 1804603682),
g = r(g, p, h, m, v[s + 13], 12, 4254626195),
m = r(m, g, p, h, v[s + 14], 17, 2792965006),
p = o(p, h = r(h, m, g, p, v[s + 15], 22, 1236535329), m, g, v[s + 1], 5, 4129170786),
g = o(g, p, h, m, v[s + 6], 9, 3225465664),
m = o(m, g, p, h, v[s + 11], 14, 643717713),
h = o(h, m, g, p, v[s + 0], 20, 3921069994),
p = o(p, h, m, g, v[s + 5], 5, 3593408605),
g = o(g, p, h, m, v[s + 10], 9, 38016083),
m = o(m, g, p, h, v[s + 15], 14, 3634488961),
h = o(h, m, g, p, v[s + 4], 20, 3889429448),
p = o(p, h, m, g, v[s + 9], 5, 568446438),
g = o(g, p, h, m, v[s + 14], 9, 3275163606),
m = o(m, g, p, h, v[s + 3], 14, 4107603335),
h = o(h, m, g, p, v[s + 8], 20, 1163531501),
p = o(p, h, m, g, v[s + 13], 5, 2850285829),
g = o(g, p, h, m, v[s + 2], 9, 4243563512),
m = o(m, g, p, h, v[s + 7], 14, 1735328473),
p = i(p, h = o(h, m, g, p, v[s + 12], 20, 2368359562), m, g, v[s + 5], 4, 4294588738),
g = i(g, p, h, m, v[s + 8], 11, 2272392833),
m = i(m, g, p, h, v[s + 11], 16, 1839030562),
h = i(h, m, g, p, v[s + 14], 23, 4259657740),
p = i(p, h, m, g, v[s + 1], 4, 2763975236),
g = i(g, p, h, m, v[s + 4], 11, 1272893353),
m = i(m, g, p, h, v[s + 7], 16, 4139469664),
h = i(h, m, g, p, v[s + 10], 23, 3200236656),
p = i(p, h, m, g, v[s + 13], 4, 681279174),
g = i(g, p, h, m, v[s + 0], 11, 3936430074),
m = i(m, g, p, h, v[s + 3], 16, 3572445317),
h = i(h, m, g, p, v[s + 6], 23, 76029189),
p = i(p, h, m, g, v[s + 9], 4, 3654602809),
g = i(g, p, h, m, v[s + 12], 11, 3873151461),
m = i(m, g, p, h, v[s + 15], 16, 530742520),
p = a(p, h = i(h, m, g, p, v[s + 2], 23, 3299628645), m, g, v[s + 0], 6, 4096336452),
g = a(g, p, h, m, v[s + 7], 10, 1126891415),
m = a(m, g, p, h, v[s + 14], 15, 2878612391),
h = a(h, m, g, p, v[s + 5], 21, 4237533241),
p = a(p, h, m, g, v[s + 12], 6, 1700485571),
g = a(g, p, h, m, v[s + 3], 10, 2399980690),
m = a(m, g, p, h, v[s + 10], 15, 4293915773),
h = a(h, m, g, p, v[s + 1], 21, 2240044497),
p = a(p, h, m, g, v[s + 8], 6, 1873313359),
g = a(g, p, h, m, v[s + 15], 10, 4264355552),
m = a(m, g, p, h, v[s + 6], 15, 2734768916),
h = a(h, m, g, p, v[s + 13], 21, 1309151649),
p = a(p, h, m, g, v[s + 4], 6, 4149444226),
g = a(g, p, h, m, v[s + 11], 10, 3174756917),
m = a(m, g, p, h, v[s + 2], 15, 718787259),
h = a(h, m, g, p, v[s + 9], 21, 3951481745),
p = n(p, l),
h = n(h, c),
m = n(m, d),
g = n(g, f);
return (u(p) + u(h) + u(m) + u(g)).toLowerCase()
}
function map(ts,data) {
var e = ('918dff33bd1fc4a34477abe44c850c9c' + "&" + ts + "&" + '12574478' + "&" + JSON.stringify(data))
return jj(e)
}
`
py代码
import json
import random
import time
import execjs
import requests
"""三个参数不变
@token
@rankId
@elemeRequestId
"""
def getmap(samp,data):
with open("newjs.js",'r',encoding='utf-8') as f:
codesj = f.read()
cmsjs = execjs.compile(codesj)
return cmsjs.call("map",samp,data)
def test():
for page in range(10):
offset = page*20
api = 'https://waimai-guide.ele.me/h5/mtop.alsc.eleme.miniapp.collection.homepagev1/1.0/'
headers = {
"cookie": 'ubt_ssid=g2bi2iu9febpx59c2ielyke2ggi1a6ve_2022-05-27; cna=k3oOGzOExgkCAdzKwxqQJWW1; t=3c383d1183fa2283aef064f858830961; USERID=5056881218; UTUSER=5056881218; x5check_ele=D%2Bz4o%2F6ZZ1vka5%2FYC5k3x%2BAUZ0GR%2FMsTEoI1oGuu%2BtU%3D; tfstk=csKdBy0kgfch41llbM3Ga-SIX4LRZ3hR1J1u23mAEq6nF1rRioxDDJwiRT1V9AC..; l=eBIpXVgqLoQmv0A5BOfZnurza77TIIRAguPzaNbMiOCPO2CM5mQVB6PWcWTHCnGVh62pR3JmWBfTBeYBqQd-nxv96IUUIRHmn; _samesite_flag_=true; cookie2=16cc7ad4b0e1963eb90d10d2c6338afc; _tb_token_=fea7a1e3b6344; sgcookie=E1006Eh4JbiPAL%2BayyRE0kX%2FDiKYmKVC25TG8xlcLuG5uDTamATj2L8BvTUyFLye7vE7BP1MktX2bRxc4D8QJ4EwNaeZRY6YGx%2FKQ3njQRGtato%3D; munb=2205988831615; csg=3f0fcfdf; t_eleuc4=id4=0%40BA%2FvuHCrrRj%2BohBlqxJwL36ZSVDAJuJk4ovQKw%3D%3D; unb=2205988831615; SID=MTZjYzdhZDRiMGUxOTYzZWI5MGQxMGQyYzYzMzhhZmN1VjG8p3PBSLJ4axEcIZkh; tzyy=1e5e5a1e94e5566da49dc5d33d001118; _m_h5_tk=918dff33bd1fc4a34477abe44c850c9c_1665518378620; _m_h5_tk_enc=76f87d73ea3dcb11a80201764a39ed8a; isg=BH9_CgzxIPNv7yU6fyfOqUfKDlMJZNMGQ1N7nRFLsS51IJ-iGTWtV38yYvDeeKt-',
"user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.37'
}
samp = int(time.time()) * 1000
data = r'{"eventAction":"nextPage","sceneCode":"MINIAPP_ELEME_HOME_LIST","componentCode":"frontend_page_shop_list_recommend","logicPageId":"transformerpage_987","pageParams":"{\"offset\":30,\"rankId\":\"bc6ede48e07d45e99ade93be26ff3daf\",\"behavior\":\"\",\"queryParams\":\"{\\\"id\\\":\\\"\\\",\\\"description\\\":\\\"\\\",\\\"title\\\":\\\"附近推荐\\\",\\\"tabName\\\":\\\"%E9%99%84%E8%BF%91%E6%8E%A8%E8%8D%90\\\",\\\"pageCode\\\":\\\"tsfm_home_shoplist\\\",\\\"pageType\\\":\\\"\\\",\\\"clickAfterColor\\\":\\\"#00a6ff\\\",\\\"clickBeforeColor\\\":\\\"#333\\\",\\\"fontWeight\\\":\\\"bold\\\",\\\"listType\\\":\\\"\\\",\\\"position\\\":1,\\\"scrollTop\\\":0}\",\"limit\":20,\"scene\":\"miniapp:homepage\",\"elemeRequestId\":\"HMHDN118HLHBLB-1665511943402\"}","longitude":116.379737,"latitude":23.539703}'
data = data.replace('":30',f'":{offset}')
sign = getmap(samp, json.loads(data))
params = {
"jsv": "2.6.2",
"appKey": "12574478",
"t": str(samp),
"sign": sign,
"api": "mtop.alsc.eleme.miniapp.collection.homepagev1",
"v": "1.0",
"dataType": "json",
"subDomain": "waimai-guide",
"mainDomain": "ele.me",
"H5Request": True,
"pageDomain": "ele.me",
"ttid": "h5@Web_android_10.6.10",
"type": "originaljson",
"data": data,
}
res = requests.get(api, headers=headers, params=params).json()
items = res['data']['data']['frontend_page_shop_list_recommend']['fields']['items']
for item in items:
restaurant = item['fields']['restaurant']
name = restaurant['name']
print(page+1,name,restaurant)
time.sleep(random.uniform(1,3))
if __name__ == "__main__":
test()