├── READ.md
├── README.md
├── main.py
├── run.yml
└── send.py
/READ.md:
--------------------------------------------------------------------------------
1 |
2 |
小米运动刷步数
3 |
4 | [](https://github.com/Ysnsn/mimotion)
5 | [](https://github.com/Ysnsn/mimotion/network)
6 | [](https://github.com/Ysnsn/mimotion/issues)
7 | 
8 |
9 |
10 | ## 懒人必备(纯小白)我已经部署在云函数了
11 |
12 | https://service-8jy2jg0z-1302033217.bj.apigw.tencentcs.com/release/xm?user=手机号&password=密码&step=步数
13 |
14 |
15 |
16 | ### 把手机号和密码换成自己的就行了,每天 *点一下* 就开始刷了(点一下就行了看返回值,严禁滥用)
17 |
18 |
19 |
20 | ## Github Actions 部署指南
21 |
22 | ### 一、Fork 此仓库
23 |
24 | ### 二、设置账号密码
25 |
26 | 添加名为 **key**、**SCKEY**、**USER**、**PWD**、**STEP** 的变量,值分别为 **QQ酷推**、**server酱推送key(0关闭)**、 **账号(仅支持手机号)**、**密码**、**步数(0则为2w-3w之间随机 或自定义随机范围[20000-21000])**
27 |
28 | > 多账号账号和密码分别用 “#” 隔开 ,步数用 “-” 隔开
29 |
30 | > 新增加企业微信应用推送 * corpid corpsecret *
31 |
32 |
33 |
34 |
35 | ## 小米运动修改无效的附解决办法!
36 | - 进入小米运动 APP 点 - 我的 - 设置 - 账号与安全 - 点注销账号 - 点清除数据-公众号再取关
37 | - 等 30 分钟后,在重新绑定需要同步的应用,即可继续使用刷步数
38 | - ⚠️⚠️:我个人亲测有效
39 |
40 | ## 更新日志
41 |
42 | 点击展开🎈
43 |
44 | - 2021-4-24 增加tg推送
45 |
46 |
47 |
48 | ## star 趋势
49 | 
50 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 本库仅为测试,为本人学习
2 | ## 如有下载请24h内删除(与我无关)
3 | ### ~~~.yml放到根目录了 用的人自己新建仓库移动目录好了~~~
4 | ### 更新日志
5 |
6 | 点击展开👉 日志
7 |
8 | ### 2021-8-21 更新修复接口
9 |
10 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf8 -*-
2 | # python >=3.8
3 |
4 | import requests,time,re,json,random, send
5 | import os
6 |
7 |
8 |
9 | def telegram_bot(title, content):
10 | print("\n")
11 | tg_bot_token = TG_BOT_TOKEN
12 | tg_user_id = TG_USER_ID
13 | if "TG_BOT_TOKEN" in os.environ and "TG_USER_ID" in os.environ:
14 | tg_bot_token = os.environ["TG_BOT_TOKEN"]
15 | tg_user_id = os.environ["TG_USER_ID"]
16 | if not tg_bot_token or not tg_user_id:
17 | print("Telegram推送的tg_bot_token或者tg_user_id未设置!!\n取消推送")
18 | return
19 | print("Telegram 推送开始")
20 | send_data = {"chat_id": tg_user_id, "text": title +
21 | '\n\n'+content, "disable_web_page_preview": "true"}
22 | response = requests.post(
23 | url='https://api.telegram.org/bot%s/sendMessage' % (tg_bot_token), data=send_data)
24 | print(response.text)
25 |
26 | now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
27 | headers = {
28 | 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 9; MI 6 MIUI/20.6.18)'
29 | }
30 |
31 | #获取登录code
32 | def get_code(location):
33 | code_pattern = re.compile("(?<=access=).*?(?=&)")
34 | code = code_pattern.findall(location)[0]
35 | return code
36 |
37 | #登录
38 | def login(user,password):
39 | url1 = "https://api-user.huami.com/registrations/+86" + user + "/tokens"
40 | headers = {
41 | "Content-Type":"application/x-www-form-urlencoded;charset=UTF-8",
42 | "User-Agent":"MiFit/4.6.0 (iPhone; iOS 14.0.1; Scale/2.00)"
43 | }
44 | data1 = {
45 | "client_id":"HuaMi",
46 | "password":f"{password}",
47 | "redirect_uri":"https://s3-us-west-2.amazonaws.com/hm-registration/successsignin.html",
48 | "token":"access"
49 | }
50 | r1 = requests.post(url1,data=data1,headers=headers,allow_redirects=False)
51 | location = r1.headers["Location"]
52 | try:
53 | code = get_code(location)
54 | except:
55 | return 0,0
56 | #print("access_code获取成功!")ste
57 | #print(code)
58 |
59 | url2 = "https://account.huami.com/v2/client/login"
60 | data2 = {
61 | "app_name":"com.xiaomi.hm.health",
62 | "app_version":"4.6.0",
63 | "code":f"{code}",
64 | "country_code":"CN",
65 | "device_id":"2C8B4939-0CCD-4E94-8CBA-CB8EA6E613A1",
66 | "device_model":"phone",
67 | "grant_type":"access_token",
68 | "third_name":"huami_phone",
69 | }
70 | r2 = requests.post(url2,data=data2,headers=headers).json()
71 | login_token = r2["token_info"]["login_token"]
72 | #print("login_token获取成功!")
73 | #print(login_token)
74 | userid = r2["token_info"]["user_id"]
75 | #print("userid获取成功!")
76 | #print(userid)
77 |
78 | return login_token,userid
79 |
80 | #主函数
81 | def main(user, passwd, step):
82 | user = str(user)
83 | password = str(passwd)
84 | step = str(step)
85 | if user == '' or password == '':
86 | print ("用户名或密码填写有误!")
87 | return
88 |
89 | if step == '':
90 | print ("已设置为随机步数(20000-29999)")
91 | step = str(random.randint(20000,22999))
92 | login_token = 0
93 | login_token,userid = login(user,password)
94 | if login_token == 0:
95 | print("登陆失败!")
96 | return "login fail!"
97 |
98 | t = get_time()
99 |
100 | app_token = get_app_token(login_token)
101 |
102 | today = time.strftime("%F")
103 |
104 | data_json = '%5B%7B%22data_hr%22%3A%22%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9L%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FVv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0v%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9e%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0n%5C%2Fa%5C%2F%5C%2F%5C%2FS%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0b%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F1FK%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FR%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9PTFFpaf9L%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FR%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0j%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9K%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FOv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fzf%5C%2F%5C%2F%5C%2F86%5C%2Fzr%5C%2FOv88%5C%2Fzf%5C%2FPf%5C%2F%5C%2F%5C%2F0v%5C%2FS%5C%2F8%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FSf%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fz3%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0r%5C%2FOv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FS%5C%2F9L%5C%2Fzb%5C%2FSf9K%5C%2F0v%5C%2FRf9H%5C%2Fzj%5C%2FSf9K%5C%2F0%5C%2F%5C%2FN%5C%2F%5C%2F%5C%2F%5C%2F0D%5C%2FSf83%5C%2Fzr%5C%2FPf9M%5C%2F0v%5C%2FOv9e%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FS%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fzv%5C%2F%5C%2Fz7%5C%2FO%5C%2F83%5C%2Fzv%5C%2FN%5C%2F83%5C%2Fzr%5C%2FN%5C%2F86%5C%2Fz%5C%2F%5C%2FNv83%5C%2Fzn%5C%2FXv84%5C%2Fzr%5C%2FPP84%5C%2Fzj%5C%2FN%5C%2F9e%5C%2Fzr%5C%2FN%5C%2F89%5C%2F03%5C%2FP%5C%2F89%5C%2Fz3%5C%2FQ%5C%2F9N%5C%2F0v%5C%2FTv9C%5C%2F0H%5C%2FOf9D%5C%2Fzz%5C%2FOf88%5C%2Fz%5C%2F%5C%2FPP9A%5C%2Fzr%5C%2FN%5C%2F86%5C%2Fzz%5C%2FNv87%5C%2F0D%5C%2FOv84%5C%2F0v%5C%2FO%5C%2F84%5C%2Fzf%5C%2FMP83%5C%2FzH%5C%2FNv83%5C%2Fzf%5C%2FN%5C%2F84%5C%2Fzf%5C%2FOf82%5C%2Fzf%5C%2FOP83%5C%2Fzb%5C%2FMv81%5C%2FzX%5C%2FR%5C%2F9L%5C%2F0v%5C%2FO%5C%2F9I%5C%2F0T%5C%2FS%5C%2F9A%5C%2Fzn%5C%2FPf89%5C%2Fzn%5C%2FNf9K%5C%2F07%5C%2FN%5C%2F83%5C%2Fzn%5C%2FNv83%5C%2Fzv%5C%2FO%5C%2F9A%5C%2F0H%5C%2FOf8%5C%2F%5C%2Fzj%5C%2FPP83%5C%2Fzj%5C%2FS%5C%2F87%5C%2Fzj%5C%2FNv84%5C%2Fzf%5C%2FOf83%5C%2Fzf%5C%2FOf83%5C%2Fzb%5C%2FNv9L%5C%2Fzj%5C%2FNv82%5C%2Fzb%5C%2FN%5C%2F85%5C%2Fzf%5C%2FN%5C%2F9J%5C%2Fzf%5C%2FNv83%5C%2Fzj%5C%2FNv84%5C%2F0r%5C%2FSv83%5C%2Fzf%5C%2FMP%5C%2F%5C%2F%5C%2Fzb%5C%2FMv82%5C%2Fzb%5C%2FOf85%5C%2Fz7%5C%2FNv8%5C%2F%5C%2F0r%5C%2FS%5C%2F85%5C%2F0H%5C%2FQP9B%5C%2F0D%5C%2FNf89%5C%2Fzj%5C%2FOv83%5C%2Fzv%5C%2FNv8%5C%2F%5C%2F0f%5C%2FSv9O%5C%2F0ZeXv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F1X%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9B%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FTP%5C%2F%5C%2F%5C%2F1b%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9N%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%22%2C%22date%22%3A%222021-08-07%22%2C%22data%22%3A%5B%7B%22start%22%3A0%2C%22stop%22%3A1439%2C%22value%22%3A%22UA8AUBQAUAwAUBoAUAEAYCcAUBkAUB4AUBgAUCAAUAEAUBkAUAwAYAsAYB8AYB0AYBgAYCoAYBgAYB4AUCcAUBsAUB8AUBwAUBIAYBkAYB8AUBoAUBMAUCEAUCIAYBYAUBwAUCAAUBgAUCAAUBcAYBsAYCUAATIPYD0KECQAYDMAYB0AYAsAYCAAYDwAYCIAYB0AYBcAYCQAYB0AYBAAYCMAYAoAYCIAYCEAYCYAYBsAYBUAYAYAYCIAYCMAUB0AUCAAUBYAUCoAUBEAUC8AUB0AUBYAUDMAUDoAUBkAUC0AUBQAUBwAUA0AUBsAUAoAUCEAUBYAUAwAUB4AUAwAUCcAUCYAUCwKYDUAAUUlEC8IYEMAYEgAYDoAYBAAUAMAUBkAWgAAWgAAWgAAWgAAWgAAUAgAWgAAUBAAUAQAUA4AUA8AUAkAUAIAUAYAUAcAUAIAWgAAUAQAUAkAUAEAUBkAUCUAWgAAUAYAUBEAWgAAUBYAWgAAUAYAWgAAWgAAWgAAWgAAUBcAUAcAWgAAUBUAUAoAUAIAWgAAUAQAUAYAUCgAWgAAUAgAWgAAWgAAUAwAWwAAXCMAUBQAWwAAUAIAWgAAWgAAWgAAWgAAWgAAWgAAWgAAWgAAWREAWQIAUAMAWSEAUDoAUDIAUB8AUCEAUC4AXB4AUA4AWgAAUBIAUA8AUBAAUCUAUCIAUAMAUAEAUAsAUAMAUCwAUBYAWgAAWgAAWgAAWgAAWgAAWgAAUAYAWgAAWgAAWgAAUAYAWwAAWgAAUAYAXAQAUAMAUBsAUBcAUCAAWwAAWgAAWgAAWgAAWgAAUBgAUB4AWgAAUAcAUAwAWQIAWQkAUAEAUAIAWgAAUAoAWgAAUAYAUB0AWgAAWgAAUAkAWgAAWSwAUBIAWgAAUC4AWSYAWgAAUAYAUAoAUAkAUAIAUAcAWgAAUAEAUBEAUBgAUBcAWRYAUA0AWSgAUB4AUDQAUBoAXA4AUA8AUBwAUA8AUA4AUA4AWgAAUAIAUCMAWgAAUCwAUBgAUAYAUAAAUAAAUAAAUAAAUAAAUAAAUAAAUAAAUAAAWwAAUAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAeSEAeQ8AcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBcAcAAAcAAAcCYOcBUAUAAAUAAAUAAAUAAAUAUAUAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcCgAeQAAcAAAcAAAcAAAcAAAcAAAcAYAcAAAcBgAeQAAcAAAcAAAegAAegAAcAAAcAcAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcCkAeQAAcAcAcAAAcAAAcAwAcAAAcAAAcAIAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcCIAeQAAcAAAcAAAcAAAcAAAcAAAeRwAeQAAWgAAUAAAUAAAUAAAUAAAUAAAcAAAcAAAcBoAeScAeQAAegAAcBkAeQAAUAAAUAAAUAAAUAAAUAAAUAAAcAAAcAAAcAAAcAAAcAAAcAAAegAAegAAcAAAcAAAcBgAeQAAcAAAcAAAcAAAcAAAcAAAcAkAegAAegAAcAcAcAAAcAcAcAAAcAAAcAAAcAAAcA8AeQAAcAAAcAAAeRQAcAwAUAAAUAAAUAAAUAAAUAAAUAAAcAAAcBEAcA0AcAAAWQsAUAAAUAAAUAAAUAAAUAAAcAAAcAoAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAYAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBYAegAAcAAAcAAAegAAcAcAcAAAcAAAcAAAcAAAcAAAeRkAegAAegAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAEAcAAAcAAAcAAAcAUAcAQAcAAAcBIAeQAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBsAcAAAcAAAcBcAeQAAUAAAUAAAUAAAUAAAUAAAUBQAcBYAUAAAUAAAUAoAWRYAWTQAWQAAUAAAUAAAUAAAcAAAcAAAcAAAcAAAcAAAcAMAcAAAcAQAcAAAcAAAcAAAcDMAeSIAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBQAeQwAcAAAcAAAcAAAcAMAcAAAeSoAcA8AcDMAcAYAeQoAcAwAcFQAcEMAeVIAaTYAbBcNYAsAYBIAYAIAYAIAYBUAYCwAYBMAYDYAYCkAYDcAUCoAUCcAUAUAUBAAWgAAYBoAYBcAYCgAUAMAUAYAUBYAUA4AUBgAUAgAUAgAUAsAUAsAUA4AUAMAUAYAUAQAUBIAASsSUDAAUDAAUBAAYAYAUBAAUAUAUCAAUBoAUCAAUBAAUAoAYAIAUAQAUAgAUCcAUAsAUCIAUCUAUAoAUA4AUB8AUBkAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAA%22%2C%22tz%22%3A32%2C%22did%22%3A%22DA932FFFFE8816E7%22%2C%22src%22%3A24%7D%5D%2C%22summary%22%3A%22%7B%5C%22v%5C%22%3A6%2C%5C%22slp%5C%22%3A%7B%5C%22st%5C%22%3A1628296479%2C%5C%22ed%5C%22%3A1628296479%2C%5C%22dp%5C%22%3A0%2C%5C%22lt%5C%22%3A0%2C%5C%22wk%5C%22%3A0%2C%5C%22usrSt%5C%22%3A-1440%2C%5C%22usrEd%5C%22%3A-1440%2C%5C%22wc%5C%22%3A0%2C%5C%22is%5C%22%3A0%2C%5C%22lb%5C%22%3A0%2C%5C%22to%5C%22%3A0%2C%5C%22dt%5C%22%3A0%2C%5C%22rhr%5C%22%3A0%2C%5C%22ss%5C%22%3A0%7D%2C%5C%22stp%5C%22%3A%7B%5C%22ttl%5C%22%3A18272%2C%5C%22dis%5C%22%3A10627%2C%5C%22cal%5C%22%3A510%2C%5C%22wk%5C%22%3A41%2C%5C%22rn%5C%22%3A50%2C%5C%22runDist%5C%22%3A7654%2C%5C%22runCal%5C%22%3A397%2C%5C%22stage%5C%22%3A%5B%7B%5C%22start%5C%22%3A327%2C%5C%22stop%5C%22%3A341%2C%5C%22mode%5C%22%3A1%2C%5C%22dis%5C%22%3A481%2C%5C%22cal%5C%22%3A13%2C%5C%22step%5C%22%3A680%7D%2C%7B%5C%22start%5C%22%3A342%2C%5C%22stop%5C%22%3A367%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A2295%2C%5C%22cal%5C%22%3A95%2C%5C%22step%5C%22%3A2874%7D%2C%7B%5C%22start%5C%22%3A368%2C%5C%22stop%5C%22%3A377%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1592%2C%5C%22cal%5C%22%3A88%2C%5C%22step%5C%22%3A1664%7D%2C%7B%5C%22start%5C%22%3A378%2C%5C%22stop%5C%22%3A386%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1072%2C%5C%22cal%5C%22%3A51%2C%5C%22step%5C%22%3A1245%7D%2C%7B%5C%22start%5C%22%3A387%2C%5C%22stop%5C%22%3A393%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1036%2C%5C%22cal%5C%22%3A57%2C%5C%22step%5C%22%3A1124%7D%2C%7B%5C%22start%5C%22%3A394%2C%5C%22stop%5C%22%3A398%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A488%2C%5C%22cal%5C%22%3A19%2C%5C%22step%5C%22%3A607%7D%2C%7B%5C%22start%5C%22%3A399%2C%5C%22stop%5C%22%3A414%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A2220%2C%5C%22cal%5C%22%3A120%2C%5C%22step%5C%22%3A2371%7D%2C%7B%5C%22start%5C%22%3A415%2C%5C%22stop%5C%22%3A427%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1268%2C%5C%22cal%5C%22%3A59%2C%5C%22step%5C%22%3A1489%7D%2C%7B%5C%22start%5C%22%3A428%2C%5C%22stop%5C%22%3A433%2C%5C%22mode%5C%22%3A1%2C%5C%22dis%5C%22%3A152%2C%5C%22cal%5C%22%3A4%2C%5C%22step%5C%22%3A238%7D%2C%7B%5C%22start%5C%22%3A434%2C%5C%22stop%5C%22%3A444%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A2295%2C%5C%22cal%5C%22%3A95%2C%5C%22step%5C%22%3A2874%7D%2C%7B%5C%22start%5C%22%3A445%2C%5C%22stop%5C%22%3A455%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1592%2C%5C%22cal%5C%22%3A88%2C%5C%22step%5C%22%3A1664%7D%2C%7B%5C%22start%5C%22%3A456%2C%5C%22stop%5C%22%3A466%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1072%2C%5C%22cal%5C%22%3A51%2C%5C%22step%5C%22%3A1245%7D%2C%7B%5C%22start%5C%22%3A467%2C%5C%22stop%5C%22%3A477%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1036%2C%5C%22cal%5C%22%3A57%2C%5C%22step%5C%22%3A1124%7D%2C%7B%5C%22start%5C%22%3A478%2C%5C%22stop%5C%22%3A488%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A488%2C%5C%22cal%5C%22%3A19%2C%5C%22step%5C%22%3A607%7D%2C%7B%5C%22start%5C%22%3A489%2C%5C%22stop%5C%22%3A499%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A2220%2C%5C%22cal%5C%22%3A120%2C%5C%22step%5C%22%3A2371%7D%2C%7B%5C%22start%5C%22%3A500%2C%5C%22stop%5C%22%3A511%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1268%2C%5C%22cal%5C%22%3A59%2C%5C%22step%5C%22%3A1489%7D%2C%7B%5C%22start%5C%22%3A512%2C%5C%22stop%5C%22%3A522%2C%5C%22mode%5C%22%3A1%2C%5C%22dis%5C%22%3A152%2C%5C%22cal%5C%22%3A4%2C%5C%22step%5C%22%3A238%7D%5D%7D%2C%5C%22goal%5C%22%3A8000%2C%5C%22tz%5C%22%3A%5C%2228800%5C%22%7D%22%2C%22source%22%3A24%2C%22type%22%3A0%7D%5D'
105 |
106 | finddate = re.compile(r'.*?date%22%3A%22(.*?)%22%2C%22data.*?')
107 | findstep = re.compile(r'.*?ttl%5C%22%3A(.*?)%2C%5C%22dis.*?')
108 | data_json = re.sub(finddate.findall(data_json)[0], today, str(data_json))
109 | data_json = re.sub(findstep.findall(data_json)[0], step, str(data_json))
110 |
111 | url = f'https://api-mifit-cn.huami.com/v1/data/band_data.json?&t={t}'
112 | head = {
113 | "apptoken": app_token,
114 | "Content-Type": "application/x-www-form-urlencoded"
115 | }
116 |
117 | data = f'userid={userid}&last_sync_data_time=1597306380&device_type=0&last_deviceid=DA932FFFFE8816E7&data_json={data_json}'
118 |
119 | response = requests.post(url, data=data, headers=head).json()
120 | #print(response)
121 | result = f"{user[:4]}****{user[-4:]}: [{now}] 修改步数({step})"+ response['message']
122 | print(result)
123 | return result
124 |
125 | #获取时间戳
126 | def get_time():
127 | url = 'http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp'
128 | response = requests.get(url,headers=headers).json()
129 | t = response['data']['t']
130 | return t
131 |
132 | #获取app_token
133 | def get_app_token(login_token):
134 | url = f"https://account-cn.huami.com/v1/client/app_tokens?app_name=com.xiaomi.hm.health&dn=api-user.huami.com%2Capi-mifit.huami.com%2Capp-analytics.huami.com&login_token={login_token}"
135 | response = requests.get(url,headers=headers).json()
136 | app_token = response['token_info']['app_token']
137 | #print("app_token获取成功!")
138 | #print(app_token)
139 | return app_token
140 |
141 | ##
142 | def qywx(msg):
143 | server_url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}"
144 | re = requests.post(server_url)
145 | jsontxt = json.loads(re.text)
146 | access_token = jsontxt['access_token']
147 | html = msg.replace('\n', '
')
148 | url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}"
149 | data ={"touser" : "@all",
150 | "msgtype" : "mpnews",
151 | "agentid" : "1000002",
152 | "mpnews" : {
153 | "articles" : [
154 | {
155 | "title" : "小米运动推送",
156 | "content" : html,
157 | "author" : "智能推送助手",
158 | "thumb_media_id": "2GhsYxtOfHM92u0_WK0iNTjxxes7EAH4-GbAgxfc7YyZt17JEiTfHFkFZ4ob9xL7j",
159 | "content_source_url" : "",
160 | "digest" : msg
161 | }
162 | ]
163 | },
164 | "safe": 0
165 | }
166 |
167 | send_msges=(bytes(json.dumps(data), 'utf-8'))
168 | res = requests.post(url, send_msges)
169 | respon = res.json() #当返回的数据是json串的时候直接用.json即可将respone转换成字典
170 |
171 | ##print (res.text)
172 | if respon['errmsg'] == "ok":
173 | print(f"推送成功\n")
174 | else:
175 | print(f" 推送失败:鬼知道哪错了\n")
176 |
177 | print("推鬼知道修改成功没")
178 |
179 | ## 推送QQ
180 | def push_qq(msg):
181 | """
182 | 推送消息到QQ酷推
183 | """
184 | if key == '':
185 | print("[注意] 未提供key,不进行推送!")
186 | else:
187 | server_url = f"https://push.xuthus.cc/send/{key}?"
188 | params = {
189 | "c": msg
190 | }
191 |
192 | response = requests.get(server_url, params=params)
193 | json_data = response.json()
194 | if json_data['reason'] == "操作成功":
195 | print(f"推送成功")
196 | else:
197 | print(f" 推送失败:鬼知道哪错了")
198 |
199 | print("QQ酷推鬼知道修改成功没")
200 | # 推送server
201 | def push_wx(msg):
202 | """
203 | 推送消息到微信
204 | """
205 | if sckey == '':
206 | print("[注意] 未提供sckey,不进行推送!")
207 | else:
208 | server_url = f"https://sc.ftqq.com/{sckey}.send"
209 | params = {
210 | "text": '小米运动 步数修改',
211 | "desp": msg
212 | }
213 |
214 | response = requests.get(server_url, params=params)
215 | json_data = response.json()
216 |
217 | if json_data['errno'] == 0:
218 | print(f"[{now}] 推送成功。")
219 | else:
220 | print(f"[{now}] 推送失败:{json_data['errno']}({json_data['errmsg']})")
221 |
222 | if __name__ == "__main__":
223 | # ServerChan&
224 | sckey = os.environ.get("sckey")
225 | if str(sckey) == '0':
226 | sckey = ''
227 | # 用户名(格式为 13800138000)
228 | user = os.environ.get("user")
229 | # 登录密码
230 | passwd = os.environ.get("pwd")
231 | # 要修改的步数,直接输入想要修改的步数值,留空为随机步数
232 | step = os.environ.get("step")
233 | corpid = os.environ.get("corpid")
234 | corpsecret = os.environ.get("corpsecret")
235 |
236 | user_list = user.split('#')
237 | passwd_list = passwd.split('#')
238 | setp_array = step.split('-')
239 |
240 | if len(user_list) == len(passwd_list):
241 | if user == '' :
242 | print("啥也没有,不执行,快去填写账号密码")
243 | else :
244 | push = ''
245 | for line in range(0,len(user_list)):
246 | if len(setp_array) == 2:
247 | step = str(random.randint(int(setp_array[0]),int(setp_array[1])))
248 | elif str(step) == '0':
249 | step = ''
250 | push += main(user_list[line], passwd_list[line], step) + '\n'
251 | send.send(push)
252 | else:
253 | print('用户名和密码数量不对')
254 |
--------------------------------------------------------------------------------
/run.yml:
--------------------------------------------------------------------------------
1 | name: 刷步数
2 |
3 | on:
4 | push:
5 | branches: [ master ]
6 | pull_request:
7 | branches: [ master ]
8 | schedule:
9 | - cron: 0 8 * * *
10 |
11 | jobs:
12 | build:
13 | runs-on: ubuntu-latest
14 | if: github.event.repository.owner.id == github.event.sender.id
15 |
16 | steps:
17 | - uses: actions/checkout@v2
18 | - name: 初始化Python
19 | uses: actions/setup-python@v2
20 | with:
21 | python-version: 3.7
22 | - name: 开始
23 | run: |
24 | pip install requests
25 | sckey='${{ secrets.SCKEY }}'
26 | key='${{ secrets.KEY }}'
27 | corpid='${{ secrets.CORPID }}'
28 | corpsecret='${{ secrets.CORPSECRET }}'
29 | user='${{ secrets.USER }}'
30 | pwd='${{ secrets.PWD }}'
31 | step='${{ secrets.STEP }}'
32 | tgbotoken ='${{ secrets.TGBOTOKEN }}'
33 | chatid ='${{ secrets.CHATID }}'
34 |
35 | python3 main.py <=3.8
3 | import requests,json,time,random
4 | corpid = os.environ.get("corpid")
5 | corpsecret = os.environ.get("corpsecret")
6 | tgbotoken = os.environ.get("tgbotoken")
7 | chatid =os.environ.get("chatid")
8 | key = os.environ.get("key")
9 | sckey = os.environ.get("sckey")
10 |
11 | now = time.strftime("🎃 %Y-%m-%d %H:%M:%S 🎃\n\n", time.localtime())
12 | msg =""
13 |
14 | def lt() :
15 | r = requests.get("https://cdn.jsdelivr.net/gh/Ysnsn/source/list.txt").text
16 | return random.choice(r.split('\n'))
17 |
18 | a = lt()
19 |
20 | def push_wx(msg):
21 | if corpid == '' or corpsecret == '':
22 | print("[注意] 未提供corpid or corpsecret ,推送个🍗!请别开玩笑了")
23 | else:
24 | server_url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}"
25 | re = requests.post(server_url)
26 | jsontxt = json.loads(re.text)
27 | access_token = jsontxt['access_token']
28 | html = msg.replace('\n', '
')
29 | url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}"
30 | data ={"touser" : "@all",
31 | "msgtype" : "mpnews",
32 | "agentid" : "1000002",
33 | "mpnews" : {
34 | "articles" : [
35 | {
36 | "title" : "🥱文案推送官🥱",
37 | "content" : html,
38 | "author" : "智能推送助手",
39 | "thumb_media_id": a,
40 | "content_source_url" : "",
41 | "digest" : msg
42 | }
43 | ]
44 | },
45 | "safe": 0
46 | }
47 |
48 | send_msges=(bytes(json.dumps(data), 'utf-8'))
49 | res = requests.post(url, send_msges)
50 | respon = res.json() #当返回的数据是json串的时候直接用.json即可将respone转换成字典
51 |
52 | if respon['errmsg'] == "ok":
53 | print(f"企业微信推送成功\n")
54 | else:
55 | print(f" 推送失败:鬼知道哪错了\n")
56 | print(respon)
57 |
58 |
59 | ## 推送QQ
60 | def push_qq(msg):
61 | """
62 | 推送消息到QQ酷推
63 | """
64 | if key == '':
65 | print("[注意] 未提供Qmsgkey,推送!个🍗")
66 | else:
67 | server_url = f"https://qmsg.zendee.cn/group/{key}?"
68 | params = {
69 | "msg": msg
70 | }
71 |
72 | response = requests.get(server_url, params=params)
73 | json_data = response.json()
74 | if json_data['reason'] == "操作成功":
75 | print(f"推送成功")
76 | else:
77 | print(f" 推送失败:鬼知道哪错了")
78 | print(json_data)
79 | # 推送server
80 | def push_wxs(msg):
81 | """
82 | 推送消息到微信
83 | """
84 | if sckey == '':
85 | print("[注意] 未提供sckey,推送个🍗!")
86 | else:
87 | html = msg.replace('\n', '
')
88 | server_url = f"https://sc.ftqq.com/{sckey}.send"
89 | params = {
90 | "text": '测试消息',
91 | "desp": html
92 | }
93 |
94 | response = requests.get(server_url, params=params)
95 | json_data = response.json()
96 |
97 | if json_data['errno'] == 0:
98 | print(f"推送成功。")
99 | else:
100 | print(f"推送失败:{json_data['errno']}({json_data['errmsg']})")
101 |
102 | def push_tg(msg):
103 | if tgbotoken == '' or chatid == '':
104 | print("[注意] 未提供TG key,推送!个🍗别开玩笑了")
105 | else:
106 | url=f"https://tgpush.wyang.workers.dev/bot{tgbotoken}/sendMessage?parse_mode=Markdown&text={msg}&chat_id={chatid}"
107 | res = requests.get(url)
108 | re= res.json()
109 | # print(re)
110 | if re['ok'] == True :
111 | print("Tg:发送成功")
112 | else :
113 | print("Tg:发送失败!")
114 | print(re)
115 |
116 | def send(msg):
117 | msg = now+ msg
118 | push_tg(msg)
119 | push_qq(msg)
120 | push_wx(msg)
121 |
122 |
--------------------------------------------------------------------------------