当前位置:网站首页>[v2.0] automatic update system based on motion step API (support disconnection reconnection and data compensation)

[v2.0] automatic update system based on motion step API (support disconnection reconnection and data compensation)

2022-06-25 06:17:00 Mike Zhou, exclusive musician of Netease

【V2.0】 Based on the number of motion steps API Automatic update system of ( Support disconnection and reconnection 、 Data compensation )

above :
https://blog.csdn.net/weixin_53403301/article/details/122882366

Resources and APP:

Adopt millet sport API Realize the modification of wechat steps and other data And added GUI It's done APP You can set the number of steps to update automatically Support disconnection and reconnection 、 Data compensation

The interface is as shown in the figure ( Packaged as APP):
 Insert picture description here
quote :https://blog.csdn.net/chinaherolts2008/article/details/119921976
https://blog.csdn.net/Jaeger_Java/article/details/109631118

There is no user information when running for the first time , Click remember user , Automatically stored in the program directory “steps.txt” In file , Easy to read next time

The step number range is used to update the step number If the number of steps is not set Or set the minimum number of wrong steps - Maximum value For random updates

Click Update steps You can update the number of steps If not filled Or it is filled in incorrectly Random size

The auto update function needs to set the number of starting steps Number of single steps and number of cycles The default is 0 6 1 namely 0 Step on Every time 3 Second loop 1 Time Co cycle 1 Time Each time 6 Step

The number of steps added each time is a random number ± N/6 That is to say, by default 6 Words Show 5-7

 Insert picture description here
Finally, you can set TG Of BOT_TOKEN and USER_ID For pushing Click Set push You can start pushing when the number of steps is updated

After closing the window Turn on terminal mode But the function is much less Only users can be filled in Then fill in the number of steps If you don't fill in Is the random number of steps Pictured :

 Insert picture description here
Demonstration of automatic update function :

 Insert picture description here
During the automatic update process , The step number column will display the current step number result

Reconnection function demonstration :
 Insert picture description here

After reconnection Every time 30s Notify once After automatic reconnection Auto calibration steps and Cycles Continue to cycle

 Insert picture description here

Set random step update mode The range display can be updated You can also click the update steps directly after filling in The input box will be automatically calibrated :

 Insert picture description here

The code is as follows :

import requests,time,re,json,random
import os
import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import *
import tkinter.messagebox
import threading

TG_BOT_TOKEN = ""           # telegram bot token  Apply for 
TG_USER_ID = ""             # telegram  user ID
global now 
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
headers = {
    
        'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 9; MI 6 MIUI/20.6.18)'
        }

# Push function 
def telegram_bot(title, content):
    try:
        tg_bot_token = TG_BOT_TOKEN
        tg_user_id = TG_USER_ID
        if "TG_BOT_TOKEN" in os.environ and "TG_USER_ID" in os.environ:
            tg_bot_token = os.environ["TG_BOT_TOKEN"]
            tg_user_id = os.environ["TG_USER_ID"]
        if not tg_bot_token or not tg_user_id:
            print("Telegram Push the TG_BOT_TOKEN perhaps TG_USER_ID Not set !!")
            return
        print("Telegram  Push start ")
        send_data = {
    "chat_id": tg_user_id, "text": title +
                     '\n\n'+content, "disable_web_page_preview": "true"}
        response = requests.post(
            url='https://api.telegram.org/bot%s/sendMessage' % (tg_bot_token), data=send_data)
        print(response.text)
    except:
        print("Error")
  
# Get login code
def get_code(location):
    code_pattern = re.compile("(?<=access=).*?(?=&)")
    code = code_pattern.findall(location)[0]
    return code
  
# Sign in 
def login(user,password):
    url1 = "https://api-user.huami.com/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":"https://s3-us-west-2.amazonaws.com/hm-registration/successsignin.html",
        "token":"access"
        }
    r1 = requests.post(url1,data=data1,headers=headers,allow_redirects=False)
    location = r1.headers["Location"]
    try:
        code = get_code(location)
    except:
        return 0,0
    #print("access_code To be successful !")ste
    #print(code)
      
    url2 = "https://account.huami.com/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 To be successful !")
    #print(login_token)
    userid = r2["token_info"]["user_id"]
    #print("userid To be successful !")
    #print(userid)
  
    return login_token,userid
  
# The main function 
def step_main(user, passwd, step, min_num, max_num):
    user = str(user)
    password = str(passwd)
    step = str(step)
    if user == '' or password == '':
        print (" Incorrect user name or password !")
        return
     
    if step == '':
        print (" Set to random steps ("+str(min_num)+"-"+str(max_num)+")")
        step = str(random.randint(min_num,max_num))
    login_token = 0
    login_token,userid = login(user,password)
    if login_token == 0:
        print(" Login failed !")
        return "login fail!"
  
    t = get_time()
      
    app_token = get_app_token(login_token)
  
    today = time.strftime("%F")
  
    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'
  
    finddate = re.compile(r'.*?date%22%3A%22(.*?)%22%2C%22data.*?')
    findstep = re.compile(r'.*?ttl%5C%22%3A(.*?)%2C%5C%22dis.*?')
    data_json = re.sub(finddate.findall(data_json)[0], today, str(data_json))
    data_json = re.sub(findstep.findall(data_json)[0], step, str(data_json))
      
    url = f'https://api-mifit-cn.huami.com/v1/data/band_data.json?&t={
      t}'
    head = {
    
        "apptoken": app_token,
        "Content-Type": "application/x-www-form-urlencoded"
        }
      
    data = f'userid={
      userid}&last_sync_data_time=1597306380&device_type=0&last_deviceid=DA932FFFFE8816E7&data_json={
      data_json}'
     
    response = requests.post(url, data=data, headers=head).json()
    #print(response)
    result = f"{
      user[:3]}****{
      user[-4:]}: [{
      now}]  Modify the steps ({
      step})"+ response['message']
    print(result)
    return result
   
# Get the timestamp 
def get_time():
    url = 'http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp'
    response = requests.get(url,headers=headers).json()
    t = response['data']['t']
    return t
   
# obtain app_token
def get_app_token(login_token):
    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}"
    response = requests.get(url,headers=headers).json()
    app_token = response['token_info']['app_token']
    #print("app_token To be successful !")
    #print(app_token)
    return app_token
 
def gui_start():
    root=Tk()
    root.title(" Millet sports API")
    mainfram=Frame(root,width=320, height=660)
    mainfram.grid_propagate(0)
    mainfram.grid()
    
    labelName=tkinter.Label(root, text=' user name :', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=10, width=80, height=40)
    labelName=tkinter.Label(root, text=' password :', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=50, width=80, height=40)
    labelName=tkinter.Label(root, text=' Step range :', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=130, width=80, height=40)
    labelName=tkinter.Label(root, text=' to ', justify=tkinter.RIGHT, width=80)
    labelName.place(x=180, y=130, width=40, height=40)
    labelName=tkinter.Label(root, text=' They count :', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=210, width=80, height=40)
    labelName=tkinter.Label(root, text=' Auto update start :', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=290, width=80, height=40)
    labelName=tkinter.Label(root, text=' Number of single steps (N):', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=330, width=80, height=40)
    labelName=tkinter.Label(root, text=' cycles :', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=370, width=80, height=40)    
    labelName=tkinter.Label(root, text='BOT_TOKEN:', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=490, width=80, height=40) 
    labelName=tkinter.Label(root, text='USER_ID:', justify=tkinter.RIGHT, width=80)
    labelName.place(x=10, y=530, width=80, height=40) 

    user = ''
    passwd = ''
    step = ''
    user_list = []
    passwd_list = []
    setp_array = []
    push = ''
    auto_step = 0
    auto_loops = 1
    auto_solo = 6
    begin_step = 0
    end_step = 6
    min_num = 20000
    max_num = 29999
    global auto_flag
    auto_flag = 1
    global TG_flag
    TG_flag = 1
    
    f0 = open("steps.txt", 'a')
    f0.close()
    f1 = open("steps.txt", 'r')
    users=[]
    for line in f1.readlines():
        users.append(line)
    if len(users)>0:
        user = (users[0].split("\n")[0])
        if len(users)>1:
            passwd = (users[1].split("\n")[0])
    f1.close()
    
    e1 = Entry(mainfram)
    #e1.grid(ipadx=50,row=0,column=1)
    e1.delete(0, END)  #  Clear the contents of the input box 
    e1.insert(0, user)  
    e1.place(x=100, y=10, width=200, height=40)
    
    e2 = Entry(mainfram)
    #e2.grid(ipadx=50,row=1,column=1)
    e2.delete(0, END)  #  Clear the contents of the input box 
    e2.insert(0, passwd)
    e2.place(x=100, y=50, width=200, height=40)
    
    e3 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e3.delete(0, END)  #  Clear the contents of the input box 
    e3.insert(0, " Random steps ("+str(min_num)+"-"+str(max_num)+")") 
    e3.place(x=100, y=210, width=200, height=40)
    
    e4 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e4.delete(0, END)  #  Clear the contents of the input box 
    e4.insert(0, str(min_num)) 
    e4.place(x=100, y=130, width=80, height=40)
    
    e5 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e5.delete(0, END)  #  Clear the contents of the input box 
    e5.insert(0, str(max_num)) 
    e5.place(x=220, y=130, width=80, height=40)
    
    e6 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e6.delete(0, END)  #  Clear the contents of the input box 
    e6.insert(0, str(begin_step)) 
    e6.place(x=100, y=290, width=200, height=40)
    
    e7 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e7.delete(0, END)  #  Clear the contents of the input box 
    e7.insert(0, " The default is :"+str(auto_loops)+", About N Step /3s A cycle ") 
    e7.place(x=100, y=370, width=200, height=40)
    
    e8 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e8.delete(0, END)  #  Clear the contents of the input box 
    e8.insert(0, " The default is :"+str(auto_solo)+", One cycle approx 3s, Random float ") 
    e8.place(x=100, y=330, width=200, height=40)
    
    e9 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e9.delete(0, END)  #  Clear the contents of the input box 
    e9.insert(0, str(TG_BOT_TOKEN)) 
    e9.place(x=100, y=490, width=200, height=40)
    
    e10 = Entry(mainfram)
# e3.grid(ipadx=50,row=3,column=0)
    e10.delete(0, END)  #  Clear the contents of the input box 
    e10.insert(0, str(TG_USER_ID)) 
    e10.place(x=100, y=530, width=200, height=40)
    
    def start():
        global TG_flag
        global now 
        now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        user = str(e1.get())
        passwd = str(e2.get())
        try:
            step = str(int(float(e3.get())))
        except:
            step = ""
        try:
            min_num_tem = int(float(e4.get()))
            max_num_tem = int(float(e5.get()))
            if min_num_tem < max_num_tem:
                min_num = int(min_num_tem)
                max_num = int(max_num_tem)
            else:
                min_num = 20000
                max_num = 29999
        except:
             min_num = 20000
             max_num = 29999
             
        e3.delete(0, END)  #  Clear the contents of the input box 
        e3.insert(0, str(step)) 
        
        if step == "":
            e3.delete(0, END)  #  Clear the contents of the input box 
            e3.insert(0, " Random steps ("+str(min_num)+"-"+str(max_num)+")") 
            
        user_list = user.split('#')
        passwd_list = passwd.split('#')
        setp_array = step.split('-')
        
        if len(user_list) == len(passwd_list):
            push = ''
            for line in range(0,len(user_list)):
                if len(setp_array) == 2:
                    step = str(random.randint(int(setp_array[0]),int(setp_array[1])))
                elif str(step) == '0':
                    step = ''
                push += step_main(user_list[line], passwd_list[line], step, min_num, max_num) + '\n'
            if TG_flag == 0:
                thread2 = threading.Thread(target=telegram_bot(" Millet sports ", push))
                thread2.start()
            else:
                TG_flag = 1
        else:
            print(' Incorrect number of user names and passwords ')
            
    def save_user():
        user = str(e1.get())
        passwd = str(e2.get())
        
        f2 = open("steps.txt", 'w')
        f2.write(str(user))
        f2.write("\n")
        f2.write(str(passwd))
        f2.write("\n")
        f2.close()
        
    def save_random():        
        try:
            min_num_tem = int(float(e4.get()))
            max_num_tem = int(float(e5.get()))
            if min_num_tem < max_num_tem:
                min_num = int(min_num_tem)
                max_num = int(max_num_tem)
            else:
                min_num = 20000
                max_num = 29999
        except:
             min_num = 20000
             max_num = 29999

        e3.delete(0, END)  #  Clear the contents of the input box 
        e3.insert(0, " Random steps ("+str(min_num)+"-"+str(max_num)+")") 
       
    def auto_steps():
        global auto_flag
        global TG_flag
        global now
        now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        time_flag = 0
        auto_flag = 0
        loop_flag = 0
        time_over_flag = 0
        time_over_step = 0
        time_over_loop = 0
        time_over = time.time()
        if auto_flag==0:
            try:
                auto_loops = int(float(e7.get()))
            except:
                auto_loops = 1
            print(" Total number of cycles :"+str(auto_loops))  
            try:
                begin_step = int(float(e6.get()))
            except:
                begin_step = 0
            print(" Starting steps :"+str(begin_step))  
            try:
                auto_solo = int(float(e8.get()))
            except:
                auto_solo = 6
            random_step = random.randint(auto_solo-int(auto_solo/6),auto_solo+int(auto_solo/6))
            print(" Number of single steps :"+str(auto_solo-int(auto_solo/6))+"-"+str(auto_solo+int(auto_solo/6)))
            auto_step = begin_step
            end_step = auto_loops*auto_solo+begin_step
            print(" Estimated update steps :"+str(begin_step)+"-"+str(end_step))
            print(" Estimated time required :"+str(int(auto_loops*3/3600))+" when "+str(int(((auto_loops*3/3600)%1)*60))+" branch ")
            user = str(e1.get())
            passwd = str(e2.get())
            user_list = user.split('#')
            passwd_list = passwd.split('#')
            print(" Start the cycle \n")
            while True:
                if time_over_step > 0:
                    auto_step = auto_step + time_over_step
                    time_over_step = 0
                else:
                    random_step = random.randint(auto_solo-int(auto_solo/6),auto_solo+int(auto_solo/6))
                    auto_step = auto_step + random_step
                
                step = str(auto_step)
                setp_array = step.split('-')
                
                if len(user_list) == len(passwd_list):
                    push = ''
                    for line in range(0,len(user_list)):
                        if len(setp_array) == 2:
                            step = str(random.randint(int(setp_array[0]),int(setp_array[1])))
                        elif str(step) == '0':
                            step = ''
                        try:
                            push += step_main(user_list[line], passwd_list[line], step, min_num, max_num) + '\n'
                            if time_over_flag == 1:
                                time_over_step = int((time.time()-time_over)*auto_solo/3)
                                time_flag = time_flag + int((time.time()-time_over)/3)
                                time_over = time.time()
                                time_over_flag = 0
                                print(" Reset successful ")
                            else:
                                time_over = time.time()
                                time_over_flag = 0
                        except:
                            time_over_flag = 1
                            time_flag = time_flag
                            auto_step = auto_step - random_step
                            time.sleep(1)
                    if TG_flag == 0:
                        thread2 = threading.Thread(target=telegram_bot(" Millet sports ", push))
                        thread2.start()
                    else:
                        TG_flag = 1
                else:
                    print(' Incorrect number of user names and passwords ')
                    
                if time_over_flag == 1:
                    if time_over_loop == 0:
                        time_over_loop = time.time()
                        print(" Broken wire , Resetting ")
                    elif time.time() - time_over_loop > 30:
                        print(" Still disconnected , Please wait \n")
                        time_over_loop = 0
                else:
                    print(" Steps updated automatically :"+str(auto_step)+"  To complete the degree :"+str(int(100*(auto_step/(end_step-begin_step))))+"%")
                    e3.delete(0, END)  #  Clear the contents of the input box 
                    e3.insert(0, str(auto_step)) 
                    print(" Number of cycles :"+str(time_flag+1))
                    now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                    print(" current time :"+time.ctime()+"\n")
                    time.sleep(1)
                    if auto_flag == 1:
                        print(" Cycle off ")
                        print(" End of automatic update \n")
                        return 0
                    if time_flag+1>=auto_loops:
                        print(" All cycles completed ")
                        if auto_step < end_step:
                            print(" Replenishing remaining steps ")
                            auto_step = end_step
                            step = str(auto_step)
                            setp_array = step.split('-')
                            while True:
                                try:
                                    push = ''+step_main(user_list[line], passwd_list[line], step, min_num, max_num) + '\n'
                                    print(" Steps updated automatically :"+str(auto_step)+"  To complete the degree :"+str(int(100*(auto_step/(end_step-begin_step))))+"%")
                                    e3.delete(0, END)  #  Clear the contents of the input box 
                                    e3.insert(0, str(auto_step))
                                    now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                                    print(" current time :"+time.ctime()+"\n")
                                    print(" The remaining steps are completed ")
                                    break
                                except:
                                    print(" Failed to supplement the remaining steps , Retrying ")
                                    time.sleep(1)
                                if auto_flag == 1:
                                    print(" Cycle off ")
                                    print(" End of automatic update \n")
                                    return 0
                                else:
                                    auto_flag=0
                        print(" End of automatic update \n")
                        return 0
                    else:
                        for j in range(time_flag+1,auto_loops):
                            if time_over_step > 0:
                                auto_step = auto_step + time_over_step
                                time_over_step = 0
                            else:
                                random_step = random.randint(auto_solo-int(auto_solo/6),auto_solo+int(auto_solo/6))
                                auto_step = auto_step + random_step
                            if auto_step > end_step:
                                auto_step = end_step
                            step = str(auto_step)
                            setp_array = step.split('-')
                            try:
                                push = ''+step_main(user_list[line], passwd_list[line], step, min_num, max_num) + '\n'
                                time_over = time.time()
                                time_over_flag = 0
                            except:
                                time_over_flag = 1
                                time_flag = j-1
                                auto_step = auto_step - random_step
                                print(" Broken wire , Resetting ")
                                break
                            if TG_flag == 0:
                                thread2 = threading.Thread(target=telegram_bot(" Millet sports ", push))
                                thread2.start()
                            else:
                                TG_flag = 1
                            
                            print(" Steps updated automatically :"+str(auto_step)+"  To complete the degree :"+str(int(100*(auto_step/(end_step-begin_step))))+"%")
                            e3.delete(0, END)  #  Clear the contents of the input box 
                            e3.insert(0, str(auto_step)) 
                            print(" Number of cycles :"+str(j+1))
                            now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                            print(" current time :"+time.ctime()+"\n")
                            if j+1 == auto_loops:
                                print(" All cycles completed ")
                                if auto_step < end_step:
                                    print(" Replenishing remaining steps ")
                                    auto_step = end_step
                                    step = str(auto_step)
                                    setp_array = step.split('-')
                                    while True:
                                        try:
                                            push = ''+step_main(user_list[line], passwd_list[line], step, min_num, max_num) + '\n'
                                            print(" Steps updated automatically :"+str(auto_step)+"  To complete the degree :"+str(int(100*(auto_step/(end_step-begin_step))))+"%")
                                            e3.delete(0, END)  #  Clear the contents of the input box 
                                            e3.insert(0, str(auto_step))
                                            now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                                            print(" current time :"+time.ctime()+"\n")
                                            print(" The remaining steps are completed ")
                                            break
                                        except:
                                            print(" Failed to supplement the remaining steps , Retrying ")
                                            time.sleep(1)
                                        if auto_flag == 1:
                                            print(" Cycle off ")
                                            print(" End of automatic update \n")
                                            return 0
                                        else:
                                            auto_flag=0
                                print(" End of automatic update \n")
                                return 0
                            if auto_flag == 1:
                                print(" Cycle off ")
                                print(" End of automatic update \n")
                                return 0
                            else:
                                auto_flag=0
                                time.sleep(1)
                    
                if loop_flag == 1:
                    print(" All cycles completed ")
                    print(" End of automatic update ")
                    return 0
                if auto_flag == 1:
                    print(" Cycle off ")
                    print(" End of automatic update \n")
                    return 0
            else:
                print(" Cycle off ")
                
            print(" End of automatic update \n")
            return 0

    def start_thread():
        thread0 = threading.Thread(target=start)
        thread0.start()
        
    def auto_thread():
        global auto_flag
        auto_flag=0
        thread1 = threading.Thread(target=auto_steps)
        thread1.start() 
    
    def auto_close():
        global auto_flag
        auto_flag=1
        print(" Turning off automatic updates ")
        
    def TG_set():
        global TG_BOT_TOKEN
        global TG_USER_ID
        global TG_flag
        TG_flag=0
        TG_BOT_TOKEN=e9.get()
        TG_USER_ID=e10.get()
        print(" Push... Has been set ")
    
    def TG_close():
        global TG_BOT_TOKEN
        global TG_USER_ID
        global TG_flag
        TG_flag=1
        TG_BOT_TOKEN=""
        TG_USER_ID=""
        print(" Push turned off ")
        
    button0=Button(mainfram,width=30,text=" Remember users ",command=save_user).place(x=100, y=90, width=200, height=40)
    button1=Button(mainfram,width=30,text=" Update steps ",command=start_thread).place(x=100, y=250, width=200, height=40)
    button2=Button(mainfram,width=30,text=" Update random step range display ",command=save_random).place(x=100, y=170, width=200, height=40)
    button3=Button(mainfram,width=30,text=" Auto update steps ",command=auto_thread).place(x=100, y=410, width=200, height=40)
    button4=Button(mainfram,width=30,text=" Turn off automatic updates ",command=auto_close).place(x=100, y=450, width=200, height=40)
    button5=Button(mainfram,width=30,text=" Set push ",command=TG_set).place(x=100, y=570, width=200, height=40)
    button6=Button(mainfram,width=30,text=" Turn off push ",command=TG_close).place(x=100, y=610, width=200, height=40)

    root.mainloop()
    
def normal_start():
    #  user name ( The format of a single user is  13800138000 , Multi user # separate , for example 13800138000#13800138000#13800138000)
    user = input(" user name :")
    #  The login password ( use # separate , for example 123456#123456#123456)
    if user == "":
        print(" User not logged in ")
        return 0
    passwd = input(" password :")
    #  Number of steps to modify , Directly enter the step value you want to modify , Leave blank for random steps 20000 to 29999 Between 
    if passwd == "":
        print(" User not logged in ")
        return 0
    step = input(" They count ( The default is 20000-29999 The random number ):")
    
    min_num = 20000
    max_num = 29999
    
    user_list = user.split('#')
    passwd_list = passwd.split('#')
    setp_array = step.split('-')
    
    if len(user_list) == len(passwd_list):
        push = ''
        for line in range(0,len(user_list)):
            if len(setp_array) == 2:
                step = str(random.randint(int(setp_array[0]),int(setp_array[1])))
            elif str(step) == '0':
                step = ''
            push += step_main(user_list[line], passwd_list[line], step, min_num, max_num) + '\n'
        telegram_bot(" Millet sports ", push)
    else:
        print(' Incorrect number of user names and passwords ')

if __name__ ==  "__main__":
    print(" A window has been opened ")
    gui_start()
    print(" Closed window , And turn on the terminal mode ")
    while True:
        normal_start()
        normal_flag = input(" Whether or not to continue (Y/N)?:")
        if normal_flag == "N":
            print(" Program end ")
            break
        if normal_flag == "Y":
            print(" The program continues ")
        else:
            print(" Program end ")
            break
    
原网站

版权声明
本文为[Mike Zhou, exclusive musician of Netease]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202201238272314.html