From 21f3dd37b42b3e3adb2b1eeea5c318ac7d32b1a9 Mon Sep 17 00:00:00 2001 From: O1Si <45961392+O1Si@users.noreply.github.com> Date: Tue, 7 Sep 2021 05:52:48 +0800 Subject: [PATCH] Feat new account config (#19) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [ADD] requirements 包依赖描述文件 * Add account config * Integrated utils function * Improve login logic * Update README.md Co-authored-by: judy --- .env | 16 ++++++++++ README.md | 77 ++++++++++++++++++++++++++++------------------- miuitask.py | 38 +++++++++++------------ passwd2md5.py | 8 ----- requirements.txt | 2 ++ system_info.py | 23 -------------- utils/__init__.py | 0 utils/utils.py | 62 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 143 insertions(+), 83 deletions(-) create mode 100644 .env delete mode 100644 passwd2md5.py create mode 100644 requirements.txt delete mode 100644 system_info.py create mode 100644 utils/__init__.py create mode 100644 utils/utils.py diff --git a/.env b/.env new file mode 100644 index 0000000..4ac1c52 --- /dev/null +++ b/.env @@ -0,0 +1,16 @@ +# 小米账户 ID +MI_ID='' +# 小米账户 密码 / MD5 +MI_PASSWORD='' +# 登录所用的 User-Agent +USER_AGENT='' +# 开发版内测 5428803 +# 开发版公测 5433318 +# 稳定版内测 5462204 +# 目前测试三个中完成任意一个即可全部完成 +BOARD_ID='' +# 小米社区签到 +# 警告:根据小米社区规则,非正常渠道签到可能会导致账户封禁 +# 本脚本虽是模拟您的操作向社区发送请求,但仍不能保证绝对安全 +# 如果您愿意自行承担一切风险,请将 N 改为 Y +SIGN_IN='N' \ No newline at end of file diff --git a/README.md b/README.md index 4c427bf..a52247d 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,9 @@ https://www.python.org/downloads/ ``` - 2. Python3 安装完成之后,使用以下命令安装 Requests 模块 + 2. Python3 安装完成之后,请在 **项目目录** 执行以下命令安装所需模块 ```bash - pip install requests + pip install -r requirements.txt ``` 注:你可能需要使用管理员权限运行命令行 @@ -38,36 +38,44 @@ ========== ### **项目介绍**: -- [x] 可自动登录小米账号刷新社区cookie实现自动化 +- [x] 可自动登录小米账号刷新社区 Cookie 实现自动化 - [x] 可自动完成小米社区拔萝卜签到 - [x] 可自动完成以下小米社区KPI任务且不留下可见痕迹 - - [x] 可完成“在内测圈分享这个版本的体验”KPI任务 - - [x] 可完成“参与当前版本满意度投票”KPI任务 - - [x] 可完成“在内测圈提交带日志的bug反馈”KPI任务 - - [x] 可完成“内测圈内互动(答疑、点赞、投票)”KPI任务 + - [x] 可完成 “在内测圈分享这个版本的体验” KPI任务 + - [x] 可完成 “参与当前版本满意度投票” KPI任务 + - [x] 可完成 “在内测圈提交带日志的bug反馈” KPI任务 + - [x] 可完成 “内测圈内互动(答疑、点赞、投票)” KPI任务 - [x] 可自动完成以下小米社区活跃分任务且不留下可见痕迹 - - [x] 可完成“加入1个圈子”活跃分任务 - - [x] 可完成“关注1位用户”活跃分任务 - - [x] 可完成“点赞1篇帖子”活跃分任务 - - [x] 可完成“发布1条评论”活跃分任务 - - [x] 可完成“发布1篇帖子”活跃分任务 + - [x] 可完成 “加入1个圈子” 活跃分任务 + - [x] 可完成 “关注1位用户” 活跃分任务 + - [x] 可完成 “点赞1篇帖子” 活跃分任务 + - [x] 可完成 “发布1条评论” 活跃分任务 + - [x] 可完成 “发布1篇帖子” 活跃分任务 ========== ### **使用说明**: -- 使用你喜爱的编辑器打开 `miuitask.py` 及 `passwd2md5.py` -- 在脚本 Line10 中填写你的MID - - 请注意MID不是手机号或邮箱 - - 示例: `mid = '123456'` -- 在脚本 Line12 中填写小米账号密码使用MD5加密后的密文 - - MD5并不安全,请不要在任何地方暴露密文 - - 请编辑使用随附的"passwd2md5.py"文件本地进行md5转换 - - 在线转换可能不正确或导致密码泄露,因此不建议使用在线工具转换 -- 在脚本 Line19 中填写你常用浏览器的UA,UA可在诸如 `https://ie.icoa.cn` 等类似的网站查看 - - 示例:` lUa = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.73'` - - 请务必先使用这个浏览器登录`https://account.xiaomi.com` +- 使用你偏好的编辑器打开配置文件 `.env` +- 在配置文件 第2行 中填写你的 小米 ID + - 请注意 小米 ID 不是手机号或邮箱 + - 示例: `MI_ID='123456'` +- 在配置文件 第4行 中填写小米账号密码 或 MD5 加密后的密文 + - 示例: `MI_PASSWORD='654321'` + - 示例: `MI_PASSWORD='C33367701511B4F6020EC61DED352059'` + - 允许使用 MD5 登录,便于代理他人操作 +- 在配置文件 第6行 中填写你常用浏览器的UA,可在诸如 `https://ie.icoa.cn` 等类似的网站查看 + - 示例:` USER_AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.73'` + - 请务必先使用这个浏览器登录 `https://account.xiaomi.com` +- 在配置文件 第11行 中填写你要完成的内测任务类型 + - 开发版内测 `5428803` 开发版公测 `5433318` 稳定版内测 `5462204` + - 示例: `BOARD_ID='5428803'` +- 在配置文件 第16行 中配置是否开启 社区签到 + - 根据小米社区规则,非正常渠道签到可能会导致账户封禁 + - 本脚本虽是模拟您的操作向社区发送请求,但仍不能保证绝对安全 + - 如果您愿意自行承担一切风险,请将 `N` 改为 `Y` + - 示例: `SIGN_IN='Y'` - 确保网络正常且无代理服务器后,可以尝试在脚本目录下使用 `python3 miuitask.py` 命令运行脚本了 - - GNU/Linux和MacOS环境下首次运行前可能需要手动执行以下命令 + - GNU/Linux 和 MacOS 环境下首次运行前可能需要手动执行以下命令 ```bash chmod +x passwd2md5.py chmod +x miuitask.py @@ -77,34 +85,41 @@ #### **其他**: * 在使用本脚本时请临时关闭网络代理工具及广告拦截程序 -* 在服务器上使用前建议先使用服务器IP登录`https://account.xiaomi.com` +* 在服务器上使用前建议先使用服务器IP登录 `https://account.xiaomi.com` * 建议配合 Python3 及 Crontab 使用 * **欢迎提供有关的思路,提交BUG以及更多完成社区其他任务方式,我们会认真对待~** #### **贡献**: -如果你在使用过程中发现任何问题,可以 [提交 issue](https://github.com/0-8-4/miui-auto-tasks/issues/new) 或自行 fork 修改后提交 pull request。 +如果你在使用过程中发现任何问题,可以 [提交 issue](https://github.com/0-8-4/miui-auto-tasks/issues/new) 或自行 Fork 修改后提交 Pull request。 -如果你要提交 pull request,请确保你的代码风格和项目已有的代码保持一致,遵循 [PEP 8](https://www.python.org/dev/peps/pep-0008) ,变量命名清晰,有适当的注释。 +如果你要提交 Pull request,请确保你的代码风格和项目已有的代码保持一致,遵循 [PEP 8](https://www.python.org/dev/peps/pep-0008) ,变量命名清晰,有适当的注释。 ========== #### **更新说明**: + v1.3 : + - 增加 独立配置文件 + - 增加 密码登陆方式 + + v1.2.3 : + - 符合 [PEP 8](https://www.python.org/dev/peps/pep-0008) 代码风格 + v1.2.2 : - 增加 输出系统信息到控制台 v1.2.1 : -- 默认关闭“社区拔萝卜签到”功能 +- 默认关闭 “社区拔萝卜签到” 功能 - 根据小米社区规则,非正常渠道签到**一经发现可能会导致账户封禁** - - 如您愿意承担一切可能的后果,可根据脚本 Line397 下方的说明开启功能 + - 如您愿意承担一切可能的后果,请根据 [使用说明](#使用说明) 开启功能 v1.2.0 : -- 增加“社区拔萝卜签到”功能 +- 增加 “社区拔萝卜签到” 功能 v1.1.0 : - 增加领取延迟保证成功率 -- 增加完成“发布1篇帖子”活跃分任务功能 +- 增加完成 “发布1篇帖子” 活跃分任务功能 ========== diff --git a/miuitask.py b/miuitask.py index 9edd964..24374aa 100644 --- a/miuitask.py +++ b/miuitask.py @@ -2,36 +2,31 @@ import requests import time import json -import system_info from urllib import request from http import cookiejar +from utils.utils import system_info, get_config, w_log, conf_check + +# Config +config = get_config() # 小米ID -mid = '' +mi_id = config.get('MI_ID') # 小米账号的密码MD5值,请使用"passwd2md5.py"转换 -p_md5 = '' -# 避免登录失败,如果上面的md5中有小写字母,转换为大写 -p_md5 = p_md5.upper() +p_md5 = config.get('MI_PASSWORD').upper() # 如果登录一直需要短信验证码,在此填入设备id(在account.xiaomi.com的cookie中寻找deviceId) dev_id = '' # 常用浏览器UA # 需要改成你自己常用的浏览器的UA -l_ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 ' \ - 'Safari/537.36 Edg/92.0.902.73 ' +l_ua = config.get('USER_AGENT') # 开发版内测5428803 开发版公测5433318 稳定版内测5462204 目前测试三个中完成任意一个即可全部完成 -board_id = '5428803' +board_id = config.get('BOARD_ID') # 留空 cookie = '' # 留空 miui_vip_ph = '' -def w_log(text): - now_localtime = time.strftime("%H:%M:%S", time.localtime()) - print(now_localtime + ' | ' + str(text)) - - def thumb_up(): headers = { 'cookie': str(cookie) @@ -374,7 +369,7 @@ def mi_login(): '%2525252Fmio%2525252Fmio%2525252FinternalTest%2525253Fref%2525253Dhomepage%26sid%3Dmiui_vip', 'sid': 'miui_vip', '_sign': 'L+dSQY6sjSQ/CRjJs4p+U1vNYLY=', - 'user': str(mid), + 'user': str(mi_id), 'cc': '+86', 'hash': str(p_md5), '_json': 'true' @@ -406,19 +401,20 @@ def mi_login(): if __name__ == "__main__": w_log("MIUITask_v1.2.2") w_log('----------系统信息-开始-------------') - system_info.system_info() + system_info() w_log('----------系统信息-结束-------------') w_log("项目地址:https://github.com/0-8-4/miui-auto-tasks") w_log("欢迎star,感谢東雲研究所中的大佬") + w_log('----------检测配置文件-------------') + conf_check(config) + w_log('----------------------------------') w_log("开始登录小米账号") if mi_login(): w_log("本脚本支持社区签到,因该功能存在风险默认禁用") - w_log("如您愿意承担一切可能的后果,可编辑脚本手动打开该功能") - # wLog("风险功能提示:正在进行社区签到") - # vipsignin() - # 警告:根据小米社区规则,非正常渠道签到可能会导致账户封禁 - # 本脚本虽是模拟您的操作向社区发送请求,但仍不能保证绝对安全 - # 如果您愿意自行承担一切风险,删去Line400和401"#"即可 + w_log("如您愿意承担一切可能的后果,可编辑配置文件手动打开该功能") + if config.get('SIGN_IN'): + w_log("风社险功能提示:正在进行区签到") + vip_sign_in() start_task("10106263") w_log("正在完成BUG反馈任务") new_announce("7") diff --git a/passwd2md5.py b/passwd2md5.py deleted file mode 100644 index 1611116..0000000 --- a/passwd2md5.py +++ /dev/null @@ -1,8 +0,0 @@ -from hashlib import md5 - -mi_passwd = 'my_password' -# 请将"my_password"改为你的小米账号密码 -md5_mi_passwd = md5(mi_passwd.encode('utf8')).hexdigest() -# 利用hashlib模块本地计算md5 -print(md5_mi_passwd) -# 输出 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f0b6301 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +requests~=2.25.1 +python-dotenv \ No newline at end of file diff --git a/system_info.py b/system_info.py deleted file mode 100644 index 8eab9d1..0000000 --- a/system_info.py +++ /dev/null @@ -1,23 +0,0 @@ -import platform -import miuitask -from urllib.request import getproxies - - -def show_info(tip, info): - return "{}: {}".format(tip, info) - - -def system_info(): - miuitask.w_log(show_info("系统及版本信息", platform.platform())) - miuitask.w_log(show_info('系统版本号', platform.version())) - miuitask.w_log(show_info('系统名称', platform.system())) - miuitask.w_log(show_info('系统位数', platform.architecture())) - miuitask.w_log(show_info('计算机类型', platform.machine())) - miuitask.w_log(show_info('处理器类型', platform.processor())) - miuitask.w_log(show_info('Python版本', str(platform.python_version()) + ' ' + str(platform.python_build()))) - if getproxies(): - miuitask.w_log(show_info('系统代理', getproxies())) - - -if __name__ == '__main__': - system_info() diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/utils.py b/utils/utils.py new file mode 100644 index 0000000..5642101 --- /dev/null +++ b/utils/utils.py @@ -0,0 +1,62 @@ +import time +import platform + +from hashlib import md5 +from dotenv import dotenv_values +from urllib.request import getproxies + + +def md5_crypto(passwd: str) -> str: + return md5(passwd.encode('utf8')).hexdigest() + + +def show_info(tip, info): + return "{}: {}".format(tip, info) + + +def system_info(): + w_log(show_info("系统及版本信息", platform.platform())) + w_log(show_info('系统版本号', platform.version())) + w_log(show_info('系统名称', platform.system())) + w_log(show_info('系统位数', platform.architecture())) + w_log(show_info('计算机类型', platform.machine())) + w_log(show_info('处理器类型', platform.processor())) + w_log(show_info('Python版本', str(platform.python_version()) + ' ' + str(platform.python_build()))) + if getproxies(): + w_log(show_info('系统代理', getproxies())) + + +def get_config() -> dict: + config = dotenv_values(".env") + passwd = config.get('MI_PASSWORD') + if len(passwd) != 32: + config['MI_PASSWORD'] = md5_crypto(passwd) + if config.get('SIGN_IN').upper() in ('Y', 'YES'): + config['SIGN_IN'] = True + return config + + +def w_log(text): + now_localtime = time.strftime("%H:%M:%S", time.localtime()) + print(now_localtime + ' | ' + str(text)) + + +def conf_check(config: dict): + if not config.get('MI_ID'): + w_log('小米账户 ID 未配置') + exit(127) + if not config.get('MI_PASSWORD'): + w_log('小米账户 密码 / MD5 未配置') + exit(127) + if not config.get('USER_AGENT'): + w_log('User-Agent 未配置') + exit(127) + if not config.get('BOARD_ID'): + w_log('测试类型 ID 未配置') + exit(127) + w_log('.env 已配置') + + +if __name__ == '__main__': + print(get_config()) + # print(get_config()['MI_PASSWORD']) \ No newline at end of file