运动_刷步思路+Python源码+云部署_⼀蓑烟⾬任平⽣
⽂章⽬录
前⾔
我们每天都在⾛路,⽀付宝都会记录下来,怎么记录的呢,过程是什么呢?这些问题我思考了⼀下,⼤概流程:应该是⼿机晃动,传感器接收到数据,然后上报平台,然后更新步数,具体怎么上报平台?具体怎么修改运动,⽀付宝等步数呢?这就是今天我们要研究的话题了
⼀、思路
我也是突发奇想的,步数是服务器存的,平时我们⾛路都是上报给服务器数据,然后进⾏更新,那我可不可以直接给服务器发数据呢?答案是不能的,因为如果你能攻克腾讯服务器的话,那你也不会再这⾥听我吓唬扯⽪了
⼆、电脑发数据(碰壁)
数据肯定是⼿机发给服务器的,但是我们不能直接给腾讯阿⾥服务器发数据,这就要借助第三⽅⼯具了,⽐如?⼩⽶运动!对的,注册⼩⽶运动,然后绑定⽀付宝,就可以修改⼩⽶运动步数,就可以
同步⽀付宝了,那么第⼀步就是想办法得到服务器发送的POST请求,由于是⼿机,所以⽤电脑的F12就GG了,电脑有抓包⼯具,可以查到每个请求的链接,⼿机呢?⼿机也有,苹果⼿机直接⽤APP应⽤商店下载Stream,然后就可以抓包了
三、使⽤⼿机抓包
抓包分三步:
1. ⾸先登陆的时候需要抓到密钥,这个就好⽐你去取钱必须要有认证的密码(当然不是你⼩⽶账号的密码,这⾥是经过加密的)
2. 抓到步数修改的POST请求,抓到包之后看到了地址,还有参数,我们要做的就是把参数修改下,⽐如你⾛了⼀步,它给服务器发送
⼀步的时候,你截取下来请求,然后改成99999,给服务器发送,这样⼦就可以了
四、部署云函数(阿⾥,腾讯都可以)
抓到步数了,但是每天你总不能天天打开电脑刷步⼦吧?累不累呢?有没有⼀种东西替代我发请求??
这⾥介绍下阿⾥云函数吧,腾讯云⼀个道理
1.登录阿⾥云
2.配置函数
3.执⾏代码
4.设置定时
废话不多说了,直接上脚本吧
import requests, time, re
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' }
# 以下参数⾃⼰填写
user ="你的⼿机号"
高压锅炖鸡password ="⼩⽶运动密码"
step =str("59420")
def get_code(location):
code_pattern = repile("(?<=access=).*?(?=&)")
code = code_pattern.findall(location)[0]
# print(code)
return code
# get_code("s3-us-west-2.amazonaws/hm-registration/successsignin.html?region=cn-northwest-1&access=N2CPd5eddwaEs0vWwqUlC&count ry_code=CN&expiration=1602140234")
def login(user, password):
url1 ="api-user.huami/registrations/+86"+ user +"/tokens"
七夕送给老公的话headers ={
"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8",
"User-Agent":"MiFit/4.6.0 (iPhone; iOS 14.0.1; Scale/2.00)"
}
data1 ={
"client_id":"HuaMi",
"password": f"{password}",
"redirect_uri":"s3-us-west-2.amazonaws/hm-registration/successsignin.html",
"token":"access"
}
r1 = requests.post(url1, data=data1, headers=headers, allow_redirects=False)
)
location = r1.headers["Location"]
保护个人隐私# print(location)
try:
code = get_code(location)
except:
print("登录失败!")
return0,0
print("access_code获取成功!")
print(code)
url2 ="account.huami/v2/client/login"
data2 ={
"app_name":"com.xiaomi.hm.health",
红颜胡彦斌"app_version":"4.6.0",
"code": f"{code}",
"country_code":"CN",
"device_id":"2C8B4939-0CCD-4E94-8CBA-CB8EA6E613A1",
"device_model":"phone",
"grant_type":"access_token",
他夏了夏天 歌词
"third_name":"huami_phone",
}
r2 = requests.post(url2, data=data2, headers=headers).json()
login_token = r2["token_info"]["login_token"]
print("login_token获取成功!")
print(login_token)
userid = r2["token_info"]["user_id"]
print("userid获取成功!")
print(userid)
return login_token, userid
# login("","")
def main_handler(event, context):
login_token, userid = login(user, password)
if login_token ==0:
return
t = get_time()
app_token = get_app_token(login_token)
with open('','rt')as f:
data_json = f.read()
date = time.strftime("%Y-%m-%d", time.localtime())
date = time.strftime("%Y-%m-%d", time.localtime())
data_json += date +"\"}]"
step_pattern = repile("12345")
de_id_pattern = repile("321123")
data_json = de_id_pattern.sub("DA932FFFFE8816E7", data_json)
data_json = step_pattern.sub(f"{step}", data_json)
url = f'api-mifit-cn.huami/v1/data/band_data.json?&t={t}'
head ={
'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMesseng er/7.0.12(0x17000c2d) NetType/WIFI Language/zh_CN',
'apptoken': f'{app_token}'
}
data ={
'data_json': f'{data_json}',
'userid': f'{userid}',
'device_type':'0',
kszx.fsjy'last_sync_data_time':'1589917081',
'last_deviceid':'DA932FFFFE8816E7',
}
response = requests.post(url, data=data, headers=head).json()
print(response)
result = f"每⽇修改步数{step}:"+ response['message']
print(result)
return result
# 获取时间戳
def get_time():
url ='aobao/rest/api3.do?Timestamp'
response = (url, headers=headers).json()
t = response['data']['t']
return t
# 获取app_token
def get_app_token(login_token):
url = f"account-cn.huami/v1/client/app_tokens?app_name=com.xiaomi.hm.health&dn=api-user.huami%2Capi-mifit.huami%2Capp-analytics.huami&login_token={login_token}&os_version=4.1.0"
response = (url, headers=headers).json()
app_token = response['token_info']['app_token']
print("app_token获取成功!")
print(app_token)
return app_token
# 测试⽤
main_handler(0,0)
data数据太长了,所以就⽤⽂本读取了,当然你也可以直接写代码⾥,只要你觉得不难看
上⽂本内容
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论