├── LICENSE ├── README.md ├── check.sample.json ├── check.sample.toml ├── checksendNotify.py ├── dailycheckin_scripts ├── README.md ├── ck_2nzz.py ├── ck_AcFun.py ├── ck_EVERPHOTO.py ├── ck_baidu.py ├── ck_bilibili.py ├── ck_cloud189.py ├── ck_csdn.py ├── ck_duokan.py ├── ck_fmapp.py ├── ck_iqiyi.py ├── ck_kgqq.py ├── ck_meizu.py ├── ck_mgtv.py ├── ck_mimotion.py ├── ck_oneplusBBS.py ├── ck_picacomic.py ├── ck_smzdm.py ├── ck_tieba.py ├── ck_unicom.py ├── ck_v2ex.py ├── ck_vqq.py ├── ck_weibo.py ├── ck_womail.py ├── ck_wzyd.py ├── ck_youdao.py └── ck_zhiyoo.py ├── other_scripts ├── README.md └── oc_163game.py └── utils.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Sitoi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

签到盒青龙版

3 |
4 | 5 | ![GitHub stars](https://img.shields.io/github/stars/yuxian158/check?style=flat-square) 6 | ![GitHub forks](https://img.shields.io/github/forks/yuxian158/check?style=flat-square) 7 | ![GitHub issues](https://img.shields.io/github/issues/yuxian158/check?style=flat-square) 8 | ![GitHub issues](https://img.shields.io/github/languages/code-size/yuxian158/check?style=flat-square) 9 | 10 | 11 | # 一个运行在青龙的签到函数 12 | 13 | [青龙](https://github.com/whyour/qinglong.git) 14 | 15 | ## 特别声明 16 | 17 | - 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 18 | 19 | - 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。 20 | 21 | - 本人对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害。 22 | 23 | - 间接使用脚本的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 本人对于由此引起的任何隐私泄漏或其他后果概不负责。 24 | 25 | - 请勿将本仓库的任何内容用于商业或非法目的,否则后果自负。 26 | 27 | - 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本。 28 | 29 | - 任何以任何方式查看此项目的人或直接或间接使用该项目的任何脚本的使用者都应仔细阅读此声明。本人保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或Script项目的规则,则视为您已接受此免责声明。 30 | 31 | **您必须在下载后的24小时内从计算机或手机中完全删除以上内容** 32 | 33 | > ***您使用或者复制了本仓库且本人制作的任何脚本,则视为 `已接受` 此声明,请仔细阅读*** 34 | 35 | ## 支持的签到列表 36 | 37 | 可以在各文件夹查看 38 | 39 | #### 1.dailycheckin_scripts: 40 | 41 | 该文件夹下是 [sitoi/dailycheckin](https://github.com/sitoi/dailycheckin) 该项目的全部支持脚本 42 | 43 | [配置方式查看](https://github.com/yuxian158/check/blob/master/dailycheckin_scripts/README.md) 44 | 45 | AcFun | 百度搜索资源平台 | Bilibili | 天翼云盘 | CSDN | 多看阅读 | 恩山论坛 | Fa米家 | 网易云游戏 | 葫芦侠 | 爱奇艺 | 全民K歌 | MEIZU 社区 | 芒果 TV | 小米运动 | 网易云音乐 | 一加手机社区官方论坛 | 哔咔漫画 | 吾爱破解 | 什么值得买 | 百度贴吧 | V2EX | 腾讯视频 | 微博 | 联通沃邮箱 | 哔咔网单 | 王者营地 | 有道云笔记 | 智友邦 | 机场签到 | 欢太商城 | NGA | 掘金 | GLaDOS | HiFiNi | 时光相册 | 联通营业厅 46 | 47 | ## 使用方法 48 | 49 | **进入容器后运行以下命令**(docker exec -it ql bash)修改ql为你的青龙容器名字 50 | 51 | 以下命令全部都是进入容器后输入 52 | 53 | ### 1.拉取仓库 54 | 55 | 只使用dailycheckin_scripts: 56 | 57 | ``` 58 | ql repo https://github.com/yuxian158/check.git "ck_" "" "checksend|utils" 59 | ``` 60 | 61 | 只使用others_scripts: 62 | 63 | ``` 64 | ql repo https://github.com/yuxian158/check.git "oc_" "" "checksend|utils" 65 | ``` 66 | 67 | 我全都要: 68 | 69 | ``` 70 | ql repo https://github.com/yuxian158/check.git "ck_|oc_" "" "checksend|utils" 71 | ``` 72 | 73 | ### 2.运行以下命令 74 | 75 | 旧版(青龙v2.12以下) 76 | 77 | ```shell 78 | cd /ql/repo/yuxian158_check && python3 utils.py 79 | ``` 80 | 81 | 新版 82 | 83 | ```shell 84 | cd /ql/data/repo/yuxian158_check && python3 utils.py 85 | ``` 86 | 87 | 然后不出意外的话你可以在青龙面板的配置文件下找到check.toml或check.json文件 88 | 89 | 然后根据各文件夹下REDEME修改配置[这里](https://sitoi.gitee.io/dailycheckin/settings/) 90 | 91 | ### 3.说明 92 | 93 | 1.本仓库在12.21日的更新中同时支持了json和toml两种格式的配置文件,但是推荐使用toml格式配置文件 94 | 95 | 2.当toml和json配置文件共存时优先使用toml文件 96 | 97 | 3.为避免未设置的签到项目推送,请禁止该签到任务,或注释掉配置文件中关于这个任务的配置项目 98 | 99 | 4.在运行修改运行时间后若出现未知错误 100 | 101 | **请先确认database.sqlite.back或crontab.db.back是否存在**,然后 102 | 103 | ``` 104 | cd /ql/data/db/ && rm database.sqlite && cp database.sqlite.back database.sqlite #v2.12+ 105 | ``` 106 | 107 | ``` 108 | cd /ql/db/ && rm database.sqlite && cp database.sqlite.back database.sqlite #v2.11+ 109 | ``` 110 | 111 | ``` 112 | cd /ql/db/ && rm crontab.db && cp crontab.db.back crontab.db #v2.11- 113 | ``` 114 | 115 | ### 4.**更新支持了多账号** 116 | 117 | toml配置方式 118 | 119 | ```toml 120 | [[ACFUN]] 121 | password = "Sitoi" 122 | phone = "188xxxxxxxx" 123 | 124 | [[ACFUN]] 125 | password = "123456" 126 | phone = "135xxxxxxxx" 127 | ``` 128 | 129 | json配置方式 130 | 131 | ```json 132 | "ACFUN" : [ 133 | { 134 | "password": "Sitoi", 135 | "phone": "18888xxxxxx" 136 | }, 137 | { 138 | "password": "多账号 密码填写,请参考上面", 139 | "phone": "多账号 手机号填写,请参考上面" 140 | } 141 | ], 142 | ``` 143 | 144 | ### 5.通知配置 145 | 146 | 来自于青龙的config.sh 147 | 148 | **在2022.4.10更新接入消息推送APP** 149 | 150 | 环境变量为设置别名的内容 151 | 152 | ```shell 153 | export MI_PUSH_ALIAS="********" 154 | ``` 155 | 156 | ## 其他 157 | 158 | #### 1.关于 toml 的语法参考: 159 | 160 | * [toml-lang/toml](https://github.com/toml-lang/toml) 161 | * [中文知乎介绍](https://zhuanlan.zhihu.com/p/50412485) 162 | * [TOML 教程中文版](https://toml.io/cn/v1.0.0) 163 | 164 | #### 2.排错指引 165 | 166 | 1.在sitoi/dailycheckin的某次更新中修改了键名,请尽量删除原配置文件后重新配置 167 | 168 | 2.本库找配置文件时使用了正则表达式,在最外层配置时可以不区分大小写,且只要包含字段就可以,甚至可以写中文(强烈不建议这么写,貌似toml不支持) 169 | 170 | 3.很多脚本并没有测试 171 | 172 | ## 致谢 173 | 174 | [@Wenmoux](https://github.com/Wenmoux/) 175 | 176 | [@Sitoi](https://github.com/Sitoi) 177 | 178 | [@Oreomeow](https://github.com/Oreomeow) 179 | 180 | 181 | ## Stargazers over time 182 | 183 | [![Stargazers over time](https://starchart.cc/yuxian158/check.svg)](https://starchart.cc/yuxian158/check) 184 | 185 | -------------------------------------------------------------------------------- /check.sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "IQIYI": [ 3 | { 4 | "cookie": "__dfp=xxxxxx; QP0013=xxxxxx; QP0022=xxxxxx; QYABEX=xxxxxx; P00001=xxxxxx; P00002=xxxxxx; P00003=xxxxxx; P00007=xxxxxx; QC163=xxxxxx; QC175=xxxxxx; QC179=xxxxxx; QC170=xxxxxx; P00010=xxxxxx; P00PRU=xxxxxx; P01010=xxxxxx; QC173=xxxxxx; QC180=xxxxxx; P00004=xxxxxx; QP0030=xxxxxx; QC006=xxxxxx; QC007=xxxxxx; QC008=xxxxxx; QC010=xxxxxx; nu=xxxxxx; __uuid=xxxxxx; QC005=xxxxxx;" 5 | }, 6 | { 7 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 8 | } 9 | ], 10 | "VQQ": [ 11 | { 12 | "auth_refresh": "https://access.video.qq.com/user/auth_refresh?vappid=xxxxxx&vsecret=xxxxxx&type=qq&g_tk=&g_vstk=xxxxxx&g_actk=xxxxxx&callback=xxxxxx&_=xxxxxx", 13 | "cookie": "pgv_pvid=xxxxxx; pac_uid=xxxxxx; RK=xxxxxx; ptcz=xxxxxx; tvfe_boss_uuid=xxxxxx; video_guid=xxxxxx; video_platform=xxxxxx; pgv_info=xxxxxx; main_login=xxxxxx; vqq_access_token=xxxxxx; vqq_appid=xxxxxx; vqq_openid=xxxxxx; vqq_vuserid=xxxxxx; vqq_refresh_token=xxxxxx; login_time_init=xxxxxx; uid=xxxxxx; vqq_vusession=xxxxxx; vqq_next_refresh_time=xxxxxx; vqq_login_time_init=xxxxxx; login_time_last=xxxxxx;" 14 | }, 15 | { 16 | "auth_refresh": "多账号 refresh url,请参考上面,以实际获取为准", 17 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 18 | } 19 | ], 20 | "YOUDAO": [ 21 | { 22 | "cookie": "JSESSIONID=xxxxxx; __yadk_uid=xxxxxx; OUTFOX_SEARCH_USER_ID_NCOO=xxxxxx; YNOTE_SESS=xxxxxx; YNOTE_PERS=xxxxxx; YNOTE_LOGIN=xxxxxx; YNOTE_CSTK=xxxxxx; _ga=xxxxxx; _gid=xxxxxx; _gat=xxxxxx; PUBLIC_SHARE_18a9dde3de846b6a69e24431764270c4=xxxxxx;" 23 | }, 24 | { 25 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 26 | } 27 | ], 28 | "KGQQ": [ 29 | { 30 | "cookie": "muid=xxxxxx; uid=xxxxxx; userlevel=xxxxxx; openid=xxxxxx; openkey=xxxxxx; opentype=xxxxxx; qrsig=xxxxxx; pgv_pvid=xxxxxx;" 31 | }, 32 | { 33 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 34 | } 35 | ], 36 | "MUSIC163": [ 37 | { 38 | "password": "Sitoi", 39 | "phone": "18888xxxxxx" 40 | }, 41 | { 42 | "password": "多账号 密码", 43 | "phone": "多账号 手机号" 44 | } 45 | ], 46 | "ONEPLUSBBS": [ 47 | { 48 | "cookie": "acw_tc=xxxxxx; qKc3_0e8d_saltkey=xxxxxx; qKc3_0e8d_lastvisit=xxxxxx; bbs_avatar=xxxxxx; qKc3_0e8d_sendmail=xxxxxx; opcid=xxxxxx; opcct=xxxxxx; oppt=xxxxxx; opsid=xxxxxx; opsct=xxxxxx; opbct=xxxxxx; UM_distinctid=xxxxxx; CNZZDATA1277373783=xxxxxx; www_clear=xxxxxx; ONEPLUSID=xxxxxx; qKc3_0e8d_sid=xxxxxx; bbs_uid=xxxxxx; bbs_uname=xxxxxx; bbs_grouptitle=xxxxxx; opuserid=xxxxxx; bbs_sign=xxxxxx; bbs_formhash=xxxxxx; qKc3_0e8d_ulastactivity=xxxxxx; opsertime=xxxxxx; qKc3_0e8d_lastact=xxxxxx; qKc3_0e8d_checkpm=xxxxxx; qKc3_0e8d_noticeTitle=xxxxxx; optime_browser=xxxxxx; opnt=xxxxxx; opstep=xxxxxx; opstep_event=xxxxxx; fp=xxxxxx;" 49 | }, 50 | { 51 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 52 | } 53 | ], 54 | "BAIDU": [ 55 | { 56 | "data_url": "https://cdn.jsdelivr.net/gh/Sitoi/Sitoi.github.io/baidu_urls.txt", 57 | "submit_url": "http://data.zz.baidu.com/urls?site=https://sitoi.cn&token=xxxxxx", 58 | "times": 10 59 | }, 60 | { 61 | "data_url": "多账号 data_url 链接地址,以实际获取为准", 62 | "submit_url": "多账号 submit_url 链接地址,以实际获取为准", 63 | "times": 10 64 | } 65 | ], 66 | "FMAPP": [ 67 | { 68 | "blackbox": "eyJlcnJxxxxxx", 69 | "cookie": "sensorsdata2015jssdkcross=xxxxxx", 70 | "device_id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxx", 71 | "fmversion": "xxxxxx", 72 | "os": "xxxxxx", 73 | "token": "xxxxxx.xxxxxx-xxxxxx-xxxxxx.xxxxxx-xxxxxx", 74 | "useragent": "xxxxxx" 75 | }, 76 | { 77 | "blackbox": "多账号 blackbox 填写,请参考上面,blackbox 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)", 78 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)", 79 | "device_id": "多账号 device_id 填写,请参考上面,以实际获取为准", 80 | "fmversion": "多账号 fmVersion 填写,请参考上面,以实际获取为准", 81 | "os": "多账号 os 填写,请参考上面,以实际获取为准", 82 | "token": "多账号 token 填写,请参考上面,以实际获取为准", 83 | "useragent": "多账号 User-Agent 填写,请参考上面,以实际获取为准" 84 | } 85 | ], 86 | "TIEBA": [ 87 | { 88 | "cookie": "BIDUPSID=xxxxxx; PSTM=xxxxxx; BAIDUID=xxxxxx; BAIDUID_BFESS=xxxxxx; delPer=xxxxxx; PSINO=xxxxxx; H_PS_PSSID=xxxxxx; BA_HECTOR=xxxxxx; BDORZ=xxxxxx; TIEBA_USERTYPE=xxxxxx; st_key_id=xxxxxx; BDUSS=xxxxxx; BDUSS_BFESS=xxxxxx; STOKEN=xxxxxx; TIEBAUID=xxxxxx; ab_sr=xxxxxx; st_data=xxxxxx; st_sign=xxxxxx;" 89 | }, 90 | { 91 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 92 | } 93 | ], 94 | "BILIBILI": [ 95 | { 96 | "cookie": "_uuid=xxxxxx; rpdid=xxxxxx; LIVE_BUVID=xxxxxx; PVID=xxxxxx; blackside_state=xxxxxx; CURRENT_FNVAL=xxxxxx; buvid3=xxxxxx; fingerprint3=xxxxxx; fingerprint=xxxxxx; buivd_fp=xxxxxx; buvid_fp_plain=xxxxxx; DedeUserID=xxxxxx; DedeUserID__ckMd5=xxxxxx; SESSDATA=xxxxxx; bili_jct=xxxxxx; bsource=xxxxxx; finger=xxxxxx; fingerprint_s=xxxxxx;", 97 | "coin_num": 0, 98 | "coin_type": 1, 99 | "silver2coin": true 100 | }, 101 | { 102 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)", 103 | "coin_num": 0, 104 | "coin_type": 1, 105 | "silver2coin": true 106 | } 107 | ], 108 | "V2EX": [ 109 | { 110 | "cookie": "_ga=xxxxxx; __cfduid=xxxxxx; PB3_SESSION=xxxxxx; A2=xxxxxx; V2EXSETTINGS=xxxxxx; V2EX_REFERRER=xxxxxx; V2EX_LANG=xxxxxx; _gid=xxxxxx; V2EX_TAB=xxxxxx;", 111 | "proxy": "使用代理的信息,无密码例子: http://127.0.0.1:1080 有密码例子: http://username:password@127.0.0.1:1080" 112 | }, 113 | { 114 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)", 115 | "proxy": "使用代理的信息,无密码例子: http://127.0.0.1:1080 有密码例子: http://username:password@127.0.0.1:1080" 116 | } 117 | ], 118 | "WWW2NZZ": [ 119 | { 120 | "cookie": "YPx9_2132_saltkey=xxxxxx; YPx9_2132_lastvisit=xxxxxx; YPx9_2132_sendmail=xxxxxx; YPx9_2132_con_request_uri=xxxxxx; YPx9_2132_sid=xxxxxx; YPx9_2132_client_created=xxxxxx; YPx9_2132_client_token=xxxxxx; YPx9_2132_ulastactivity=xxxxxx; YPx9_2132_auth=xxxxxx; YPx9_2132_connect_login=xxxxxx; YPx9_2132_connect_is_bind=xxxxxx; YPx9_2132_connect_uin=xxxxxx; YPx9_2132_stats_qc_login=xxxxxx; YPx9_2132_checkpm=xxxxxx; YPx9_2132_noticeTitle=xxxxxx; YPx9_2132_nofavfid=xxxxxx; YPx9_2132_lastact=xxxxxx;" 121 | }, 122 | { 123 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 124 | } 125 | ], 126 | "SMZDM": [ 127 | { 128 | "cookie": "__jsluid_s=xxxxxx; __ckguid=xxxxxx; device_id=xxxxxx; homepage_sug=xxxxxx; r_sort_type=xxxxxx; _zdmA.vid=xxxxxx; sajssdk_2015_cross_new_user=xxxxxx; sensorsdata2015jssdkcross=xxxxxx; footer_floating_layer=xxxxxx; ad_date=xxxxxx; ad_json_feed=xxxxxx; zdm_qd=xxxxxx; sess=xxxxxx; user=xxxxxx; _zdmA.uid=xxxxxx; smzdm_id=xxxxxx; userId=xxxxxx; bannerCounter=xxxxxx; _zdmA.time=xxxxxx;" 129 | }, 130 | { 131 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 132 | } 133 | ], 134 | "MIMOTION": [ 135 | { 136 | "max_step": "20000", 137 | "min_step": "10000", 138 | "password": "Sitoi", 139 | "phone": "18888xxxxxx" 140 | }, 141 | { 142 | "max_step": "多账号 最大步数填写,请参考上面", 143 | "min_step": "多账号 最小步数填写,请参考上面", 144 | "password": "多账号 密码填写,请参考上面", 145 | "phone": "多账号 手机号填写,请参考上面" 146 | } 147 | ], 148 | "ACFUN": [ 149 | { 150 | "password": "Sitoi", 151 | "phone": "18888xxxxxx" 152 | }, 153 | { 154 | "password": "多账号 密码填写,请参考上面", 155 | "phone": "多账号 手机号填写,请参考上面" 156 | } 157 | ], 158 | "CLOUD189": [ 159 | { 160 | "password": "Sitoi", 161 | "phone": "18888xxxxxx" 162 | }, 163 | { 164 | "password": "多账号 密码填写,请参考上面", 165 | "phone": "多账号 手机号填写,请参考上面" 166 | } 167 | ], 168 | "POJIE": [ 169 | { 170 | "cookie": "htVD_2132_client_token=xxxxxx; htVD_2132_connect_is_bind=xxxxxx; htVD_2132_connect_uin=xxxxxx; htVD_2132_nofavfid=xxxxxx; htVD_2132_smile=xxxxxx; Hm_lvt_46d556462595ed05e05f009cdafff31a=xxxxxx; htVD_2132_saltkey=xxxxxx; htVD_2132_lastvisit=xxxxxx; htVD_2132_client_created=xxxxxx; htVD_2132_auth=xxxxxx; htVD_2132_connect_login=xxxxxx; htVD_2132_home_diymode=xxxxxx; htVD_2132_visitedfid=xxxxxx; htVD_2132_viewid=xxxxxx; KF4=xxxxxx; htVD_2132_st_p=xxxxxx; htVD_2132_lastcheckfeed=xxxxxx; htVD_2132_sid=xxxxxx; htVD_2132_ulastactivity=xxxxxx; htVD_2132_noticeTitle=xxxxxx;" 171 | }, 172 | { 173 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 174 | } 175 | ], 176 | "MGTV": [ 177 | { 178 | "params": "uuid=xxxxxx&uid=xxxxxx&ticket=xxxxxx&token=xxxxxx&device=iPhone&did=xxxxxx&deviceId=xxxxxx&appVersion=6.8.2&osType=ios&platform=iphone&abroad=0&aid=xxxxxx&nonce=xxxxxx×tamp=xxxxxx&appid=xxxxxx&type=1&sign=xxxxxx&callback=xxxxxx" 179 | }, 180 | { 181 | "params": "多账号 请求参数填写,请参考上面" 182 | } 183 | ], 184 | "PICACOMIC": [ 185 | { 186 | "email": "Sitoi", 187 | "password": "xxxxxx" 188 | }, 189 | { 190 | "email": "多账号 账号填写,请参考上面", 191 | "password": "多账号 密码填写,请参考上面" 192 | } 193 | ], 194 | "MEIZU": [ 195 | { 196 | "draw_count": "1", 197 | "cookie": "aliyungf_tc=xxxxxx; logined_uid=xxxxxx; acw_tc=xxxxxx; LT=xxxxxx; MZBBS_2132_saltkey=xxxxxx; MZBBS_2132_lastvisit=xxxxxx; MZBBSUC_2132_auth=xxxxxx; MZBBSUC_2132_loginmember=xxxxxx; MZBBSUC_2132_ticket=xxxxxx; MZBBS_2132_sid=xxxxxx; MZBBS_2132_ulastactivity=xxxxxx; MZBBS_2132_auth=xxxxxx; MZBBS_2132_loginmember=xxxxxx; MZBBS_2132_lastcheckfeed=xxxxxx; MZBBS_2132_checkfollow=xxxxxx; MZBBS_2132_lastact=xxxxxx;" 198 | }, 199 | { 200 | "draw_count": "多账号 抽奖次数设置", 201 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 202 | } 203 | ], 204 | "ZHIYOO": [ 205 | { 206 | "cookie": "ikdQ_9242_saltkey=xxxxxx; ikdQ_9242_lastvisit=xxxxxx; ikdQ_9242_onlineusernum=xxxxxx; ikdQ_9242_sendmail=1; ikdQ_9242_seccode=xxxxxx; ikdQ_9242_ulastactivity=xxxxxx; ikdQ_9242_auth=xxxxxx; ikdQ_9242_connect_is_bind=xxxxxx; ikdQ_9242_nofavfid=xxxxxx; ikdQ_9242_checkpm=xxxxxx; ikdQ_9242_noticeTitle=1; ikdQ_9242_sid=xxxxxx; ikdQ_9242_lip=xxxxxx; ikdQ_9242_lastact=xxxxxx" 207 | }, 208 | { 209 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 210 | } 211 | ], 212 | "WEIBO": [ 213 | { 214 | "url": "https://api.weibo.cn/2/users/show?wm=xxxxxx&launchid=xxxxxx&b=xxxxxx&from=xxxxxx&c=xxxxxx&networktype=xxxxxx&v_p=xxxxxx&skin=xxxxxx&v_f=xxxxxx&lang=xxxxxx&sflag=xxxxxx&ua=xxxxxx&ft=xxxxxx&aid=xxxxxx&has_extend=xxxxxx&uid=xxxxxx&gsid=xxxxxx&sourcetype=&get_teenager=xxxxxx&s=xxxxxx&has_profile=xxxxxx" 215 | }, 216 | { 217 | "url": "多账号 show_url 填写,请参考上面,show_url 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 218 | } 219 | ], 220 | "DUOKAN": [ 221 | { 222 | "cookie": "user_id=xxxxxx; token=xxxxxx; user_gender=xxxxxx; device_id=xxxxxx; app_id=xxxxxx; build=xxxxxx; short_version=xxxxxx" 223 | }, 224 | { 225 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 226 | } 227 | ], 228 | "CSDN": [ 229 | { 230 | "cookie": "uuid_tt_dd=xxxxxx; _ga=xxxxxx; UserName=xxxxxx; UserInfo=xxxxxx; UserToken=xxxxxx; UserNick=xxxxxx; AU=768; UN=xxxxxx; BT=xxxxxx; p_uid=xxxxxx; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=xxxxxx; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=xxxxxx; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=xxxxxx dc_sid=xxxxxx; c_segment=xxxxxx; dc_session_id=xxxxxx; csrfToken=xxxxxx; c_first_ref=xxxxxx; c_first_page=xxxxxx; c_page_id=xxxxxx; announcement-new=xxxxxx; log_Id_click=xxxxxx; c_pref=xxxxxx; c_ref=xxxxxx; dc_tos=xxxxxx; log_Id_pv=xxxxxx; log_Id_view=xxxxxx" 231 | }, 232 | { 233 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 234 | } 235 | ], 236 | "WZYD": [ 237 | { 238 | "data": "areaId=xxxxxx&roleId=xxxxxx&gameId=xxxxxx&serverId=xxxxxx&gameOpenid=xxxxxx&userId=xxxxxx&appVersion=xxxxxx&cClientVersionName=xxxxxx&platid=xxxxxx&source=xxxxxx&algorithm=xxxxxx&version=xxxxxx×tamp=xxxxxx&appid=xxxxxx&openid=xxxxxx&sig=xxxxxx&encode=2&msdkEncodeParam=xxxxxx&cSystem=xxxxxx&h5Get=xxxxxx&msdkToken=&appOpenid=xxxxxx" 239 | }, 240 | { 241 | "data": "多账号 data 填写,请参考上面,data 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)" 242 | } 243 | ], 244 | "WOMAIL": [ 245 | { 246 | "url": "https://nyan.mail.wo.cn/cn/sign/index/index?mobile=xxxxxx&userName=&openId=xxxxxx", 247 | "pause21days": true, 248 | "password": "Sitoi", 249 | "phone": "18888xxxxxx" 250 | }, 251 | { 252 | "url": "多账号 url 填写,请参考上面,url 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)", 253 | "pause21days": true, 254 | "password": "多账号 密码填写,请参考上面", 255 | "phone": "多账号 手机号填写,请参考上面" 256 | } 257 | ], 258 | "HEYTAP": [ 259 | { 260 | "cookie": "sa_distinct_id=xxxxxx;Personalized=xxxxxx;s_channel=xxxxxx;source_type=xxxxxx;app_param=xxxxxx;ENCODE_TOKENSID=xxxxxx;scene_id=xxxxxx;apkPkg=xxxxxx;exp_id=;app_utm=xxxxxx;TOKENSID=xxxxxx;strategy_id=xxxxxx;referer=;experiment_id=xxxxxx;section_id=;s_version=xxxxxx;app_innerutm=xxxxxx;retrieve_id=;log_id=;", 261 | "useragent": "xxxxxx", 262 | "draw": false 263 | }, 264 | { 265 | "cookie": "多账号 cookie 填写,请参考上面,cookie 以实际获取为准(遇到特殊字符如双引号\" 请加反斜杠转义)", 266 | "useragent": "多账号 User-Agent 填写,请参考上面,以实际获取为准", 267 | "draw": false 268 | } 269 | ], 270 | "UNICOM": [ 271 | { 272 | "mobile": "18888xxxxxx", 273 | "password": "xxxxxx", 274 | "app_id": "xxxxxx" 275 | }, 276 | { 277 | "mobile": "多账号 手机号", 278 | "password": "多账号 密码", 279 | "app_id": "多账号 appId" 280 | } 281 | ], 282 | "EVERPHOTO": [ 283 | { 284 | "mobile": "+8618888xxxxxx", 285 | "password": "xxxxxx" 286 | }, 287 | { 288 | "mobile": "多账号 手机号", 289 | "password": "多账号 密码" 290 | } 291 | ] 292 | } -------------------------------------------------------------------------------- /check.sample.toml: -------------------------------------------------------------------------------- 1 | # 配置文件 2 | #by @Oreomeow 3 | #有些脚本未进库配置也没什么用 4 | # cookie 以实际获取为准,如遇到带双引号的需用 \ 转义,或改为单引号,或将最外层双引号改为单引号 5 | # e.g.1 cookie = "xxx; app_param={\"brand\":\"iPhone\"}" 6 | # e.g.2 cookie = "xxx; app_param={'brand':'iPhone'}" 7 | # e.g.3 cookie = 'xxx; app_param={"brand":"iPhone"}' 8 | 9 | ## 爱企查e卡监控 10 | #ECARDCHECK = false 11 | # 12 | ## Hax 监控 13 | #HAX = false 14 | # 15 | ## LeetCode 每日一题 16 | #LEETCODE = false 17 | # 18 | ## 每日一句 19 | #MOTTO = true 20 | # 21 | ## 每日新闻 22 | #NEWS = true 23 | # 24 | ## 青龙随机定时 25 | #QL_RANDOM_TIME = false 26 | # 27 | ## 天气预报 28 | #CITY = ["上海", "朝阳区"] 29 | 30 | # AcFun 31 | # https://www.acfun.cn 32 | ######### 多账号示例 ######### 33 | [[ACFUN]] 34 | password = "Sitoi" 35 | phone = "188xxxxxxxx" 36 | [[ACFUN]] 37 | password = "123456" 38 | phone = "135xxxxxxxx" 39 | ######### 多账号示例 ######### 40 | 41 | # 机场签到 42 | # 邮箱 43 | # 密码 44 | # 链接,只支持 SSPanel 类型。删除 /auth/login 45 | [[AIRPORT]] 46 | email = "xxxxxxxx@qq.com" 47 | password = "xxxxxxxx" 48 | url = "https://xxxxxxxx.xxx" 49 | 50 | # 爱企查【WEB】 51 | # https://www.baidu.com,同百度贴吧 cookie 一样 52 | # 批量查询任务需手动抓包查询之后的 exportkey,可不填 53 | [[AQC]] 54 | cookie = 'log_guid=xxxxxx; BDPPN=xxx"xxx;...' 55 | exportkey = "" 56 | 57 | # 百度搜索资源平台 58 | # 提交网站的 URL 链接 59 | # https://ziyuan.baidu.com/site/index# 提交百度网站的目标 URL 60 | # 每日对同个网站提交次数 61 | [[BAIDU]] 62 | data_url = "https://cdn.jsdelivr.net/gh/Sitoi/Sitoi.github.io/baidu_urls.txt" 63 | submit_url = "http://data.zz.baidu.com/urls?site=https://sitoi.cn&token=xxxxxx" 64 | times = 10 65 | 66 | # Bilibili【WEB】 67 | # 每日投币数量 68 | # 投币方式:1-关注用户列表,0-随机;若关注用户视频不足,则其余随机 69 | # https://www.bilibili.com cookie 70 | # 是否开启银币兑换硬币 71 | [[BILIBILI]] 72 | coin_num = 0 73 | coin_type = 1 74 | cookie = "_uuid=xxxxxx; rpdid=xxx'xxx; LIVE_BUVID=xxxxxx; PVID=xxxxxx; blackside_state=xxxxxx; CURRENT_FNVAL=xxxxxx; buvid3=xxxxxx; fingerprint3=xxxxxx; fingerprint=xxxxxx; buivd_fp=xxxxxx; buvid_fp_plain=xxxxxx; DedeUserID=xxxxxx; DedeUserID__ckMd5=xxxxxx; SESSDATA=xxxxxx; bili_jct=xxxxxx; bsource=xxxxxx; finger=xxxxxx; fingerprint_s=xxxxxx;" 75 | silver2coin = true 76 | 77 | # CCAVA【WEB】 78 | # https://pc.ccava.net/invites/CKIN66 cookie 79 | [[CCAVA]] 80 | cookie = "__vtins__JGU9XP985GXENwEs=xxxxxx; ......cookie_islog=x; cookieVf=xxxxxx; is_mochu_us_load=xxxxxx" 81 | 82 | # 天翼云盘 83 | # https://cloud.189.cn/web/login.html 84 | [[CLOUD189]] 85 | password = "Sitoi" 86 | phone = "18888xxxxxx" 87 | 88 | # CSDN【WEB】 89 | # https://www.csdn.net cookie 90 | [[CSDN]] 91 | cookie = "uuid_tt_dd=xxxxxx; _ga=xxxxxx; UserName=xxxxxx; UserInfo=xxxxxx; UserToken=xxxxxx; UserNick=xxxxxx; AU=768; UN=xxxxxx; BT=xxxxxx; p_uid=xxxxxx; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=xxxxxx; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=xxxxxx; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=xxxxxx dc_sid=xxxxxx; c_segment=xxxxxx; dc_session_id=xxxxxx; csrfToken=xxxxxx; c_first_ref=xxxxxx; c_first_page=xxxxxx; c_page_id=xxxxxx; announcement-new=xxxxxx; log_Id_click=xxxxxx; c_pref=xxxxxx; c_ref=xxxxxx; dc_tos=xxxxxx; log_Id_pv=xxxxxx; log_Id_view=xxxxxx" 92 | 93 | # 网易蜗牛读书【APP】 94 | # 网易蜗牛读书 APP 签到后抓取 https://du.163.com/activity/201907/activityCenter/sign.json 下的 cookie 95 | # 自备 UA 96 | [[DU163]] 97 | cookie = "X-Auth-Token=xxxxxx; JSESSIONID-WNYD-WEB=xxxxxx; _cid=xxxxxx; _xsrf=xxxxxx" 98 | user_agent = "" 99 | 100 | # 多看阅读【APP】 101 | # 多看阅读 APP 抓取开头为 https://www.duokan.com 下的 cookie 102 | [[DUOKAN]] 103 | cookie = "user_id=xxxxxx; token=xxxxxx; user_gender=xxxxxx; device_id=xxxxxx; app_id=xxxxxx; build=xxxxxx; short_version=xxxxxx" 104 | 105 | # 企鹅电竞【WEB】 106 | # https://egame.qq.com cookie 107 | [[EGAME]] 108 | cookie = "pgv_pvi=xxxxxx; RK=xxxxxx; ptcz=xxxxxx; pgv_pvid=xxxxxx; pac_uid=xxxxxx; iip=x; o_cookie=xxxxxx; sd_userid=xxxxxx; sd_cookie_crttime=xxxxxx; tvfe_boss_uuid=xxxxxx; _tc_unionid=xxxxxx; _ga=xxxxxx; pgg_ssid=xxxxxx; new_device=x; pgv_info=xxxxxx; ts_refer=xxxxxx; ts_uid=xxxxxx; _qpsvr_localtk=xxxxxx; pgg_uid=xxxxxx; pgg_appid=xxxxxx; pgg_openid=xxxxxx; pgg_access_token=xxxxxx; pgg_type=x; pgg_user_type=x; pgg_pvid=xxxxxx; ts_last=xxxxxx; tKeplerToken=xxxxxx" 109 | 110 | # 恩山论坛【WEB】 111 | # https://www.right.com.cn/forum/forum.php cookie 112 | [[ENSHAN]] 113 | cookie = "DJyZ_2132_saltkey=xxxxxx; DJyZ_2132_lastvisit=xxxxxx; DJyZ_2132_onlineusernum=xxxx; DJyZ_2132_sendmail=1; DJyZ_2132_ulastactivity=xxxxxx; DJyZ_2132_auth=xxxxxxxx; DJyZ_2132_sid=0; DJyZ_2132_connect_is_bind=0; DJyZ_2132_nofavfid=1; DJyZ_2132_checkpm=1; DJyZ_2132_noticeTitle=1; DJyZ_2132_lastact=xxxxxx" 114 | 115 | # Epic【WEB】 116 | # https://www.epicgames.com/store/zh-CN 117 | [[EPIC]] 118 | email = "" 119 | password = "" 120 | 121 | # EUserv 122 | # https://apitruecaptcha.org/api 的 apikey 123 | # 教程:https://github.com/a-beam-of-light/eu_ex#readme 124 | # https://support.euserv.com 密码 125 | # https://apitruecaptcha.org/api 的 userid 126 | # https://support.euserv.com 邮箱 127 | #[[EUSERV]] 128 | #apikey = "xxxxxx" 129 | #mailparser_dl_url_id = "xxxxxx" 130 | #password = "xxxxxx" 131 | #userid = "xxxxxx" 132 | #username = "xxxxxx@xxx.com" 133 | 134 | # 时光相册【WEB】 135 | # https://web.everphoto.cn/#signin 请求 URL https://web.everphoto.cn/api/auth 最下方表单数据,带区号 136 | # 同上,不是原始密码 137 | [[EVERPHOTO]] 138 | mobile = "+86188xxxxxxxx" 139 | password = "c63xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 140 | 141 | # Fa米家【APP】 142 | # Fa米家 APP headers 中寻找 143 | [[FMAPP]] 144 | blackbox = "eyJlcnJxxxxxx" 145 | cookie = "sensorsdata2015jssdkcross=xxxxxx" 146 | device_id = "xxxxxx-xxxx-xxxx-xxxx-xxxxxx" 147 | fmversion = "xxxxxx" 148 | os = "xxxxxx" 149 | token = "xxxxxx.xxxxxx-xxxxxx-xxxxxx.xxxxxx-xxxxxx" 150 | useragent = "xxxxxx" 151 | 152 | # Freenom 153 | # https://www.freenom.com 154 | [[FREENOM]] 155 | password = "" 156 | username = "" 157 | 158 | # 网易云游戏【WEB】 159 | # 网易云游戏官网 https://cg.163.com/#/mobile cookie 160 | [[GAME163]] 161 | authorization = "" 162 | 163 | # GLaDOS【WEB】 164 | # https://glados.network cookie 165 | [[GLADOS]] 166 | cookie = "koa:sess=xxxxxx; koa:sess.sig=xxxxxx" 167 | 168 | # 欢太商城【APP】 169 | # 欢太商城 APP cookie,建议全部粘贴 170 | # 抽奖总开关,设置为 false 将不参与任何抽奖,应对一些抽奖黑号 171 | # 欢太商城 APP UA 172 | [[HEYTAP]] 173 | cookie = 'source_type=xxx;TOKENSID=TOKEN_xxxx;app_param=xx"xx' 174 | draw = false 175 | useragent = "" 176 | 177 | # HiFiNi【WEB】 178 | # https://www.hifini.com cookie 179 | [[HIFINI]] 180 | cookie = "bbs_sid=xxxxxx; bbs_token=xxxxxx" 181 | 182 | # 葫芦侠【APP】 183 | [[HLX]] 184 | password = "" 185 | username = "" 186 | 187 | # HOSTLOC 188 | # https://hostloc.com 189 | [[HOSTLOC]] 190 | password = "" 191 | username = "" 192 | 193 | # 爱奇艺【WEB】 194 | # https://www.iqiyi.com cookie 195 | [[IQIYI]] 196 | cookie = "__dfp=xxxxxx; QP0013=xxxxxx; QP0022=xxxxxx; QYABEX=xxxxxx; P00001=xxxxxx; P00002=xxxxxx; P00003=xxxxxx; P00007=xxxxxx; QC163=xxxxxx; QC175=xxxxxx; QC179=xxxxxx; QC170=xxxxxx; P00010=xxxxxx; P00PRU=xxxxxx; P01010=xxxxxx; QC173=xxxxxx; QC180=xxxxxx; P00004=xxxxxx; QP0030=xxxxxx; QC006=xxxxxx; QC007=xxxxxx; QC008=xxxxxx; QC010=xxxxxx; nu=xxxxxx; __uuid=xxxxxx; QC005=xxxxxx;" 197 | 198 | # 无忧行【APP】 199 | # 无忧行 APP 利用 stream 通过 mitm 抓包,获取 payload 中的 user_id 200 | [[JEGOTRIP]] 201 | user_id = "" 202 | 203 | # 掘金【WEB】 204 | # https://juejin.cn cookie 205 | [[JUEJIN]] 206 | cookie = "ttcid=xxxxxx; MONITOR_WEB_ID=xxxxxx; passport_csrf_token_default=xxxxxx; passport_csrf_token=xxxxxx; s_v_web_id=xxxxxx; MONITOR_DEVICE_ID=xxxxxx; n_mh=xxxxxx; passport_auth_status=xxxxxx; passport_auth_status_ss=xxxxxx; sid_guard=xxxxxx; uid_tt=xxxxxx; uid_tt_ss=xxxxxx; sid_tt=xxxxxx; sessionid=xxxxxx; sessionid_ss=xxxxxx; sid_ucp_v1=xxxxxx; ssid_ucp_v1=xxxxxx; odin_tt=xxxxxx; tt_scid=xxxxxx" 207 | 208 | # 全民K歌【WEB】 209 | # https://kg.qq.com/index-pc.html cookie 210 | [[KGQQ]] 211 | cookie = "muid=xxxxxx; uid=xxxxxx; userlevel=xxxxxx; openid=xxxxxx; openkey=xxxxxx; opentype=xxxxxx; qrsig=xxxxxx; pgv_pvid=xxxxxx;" 212 | 213 | # 联想乐云【WEB】 214 | # https://lecloud.lenovo.com/index cookie 215 | [[LECLOUD]] 216 | cookie = "" 217 | 218 | # 联想商城【APP】 219 | # 联想智选 APP 账户 220 | # 联想智选 APP 抓包 221 | # 联想智选 APP 密码 222 | [[LENOVO]] 223 | account = "" 224 | baseinfo = "" 225 | password = "" 226 | 227 | # MEIZU 社区【WEB】 228 | # https://bbs.meizu.cn cookie 229 | # 抽奖次数 230 | [[MEIZU]] 231 | cookie = "aliyungf_tc=xxxxxx; logined_uid=xxxxxx; acw_tc=xxxxxx; LT=xxxxxx; MZBBS_2132_saltkey=xxxxxx; MZBBS_2132_lastvisit=xxxxxx; MZBBSUC_2132_auth=xxxxxx; MZBBSUC_2132_loginmember=xxxxxx; MZBBSUC_2132_ticket=xxxxxx; MZBBS_2132_sid=xxxxxx; MZBBS_2132_ulastactivity=xxxxxx; MZBBS_2132_auth=xxxxxx; MZBBS_2132_loginmember=xxxxxx; MZBBS_2132_lastcheckfeed=xxxxxx; MZBBS_2132_checkfollow=xxxxxx; MZBBS_2132_lastact=xxxxxx;" 232 | draw_count = "1" 233 | 234 | # 芒果 TV【WEB】 235 | # https://www.mgtv.com 请求参数 236 | [[MGTV]] 237 | params = "uuid=xxxxxx&uid=xxxxxx&ticket=xxxxxx&token=xxxxxx&device=iPhone&did=xxxxxx&deviceId=xxxxxx&appVersion=6.8.2&osType=ios&platform=iphone&abroad=0&aid=xxxxxx&nonce=xxxxxx×tamp=xxxxxx&appid=xxxxxx&type=1&sign=xxxxxx&callback=xxxxxx" 238 | 239 | # 小米运动【APP】 240 | # 最大步数 241 | # 最小步数 242 | # 小米运动 APP 密码 243 | # 小米运动 APP 手机号 244 | [[MIMOTION]] 245 | max_step = "20000" 246 | min_step = "10000" 247 | password = "Sitoi" 248 | phone = "18888xxxxxx" 249 | 250 | # 网易云音乐 251 | [[MUSIC163]] 252 | password = "Sitoi" 253 | phone = "18888xxxxxx" 254 | 255 | # NGA【APP】 256 | # https://ngabbs.com/nuke.php POST 请求主体 access_token 257 | # https://ngabbs.com/nuke.php POST 请求主体 access_uid,纯数字 258 | [[NGA]] 259 | token = "X8xxxxghxxxxxxxxujxxxxxxxv9xxxxxxxxccxxx" 260 | uid = "xxxxx391" 261 | 262 | # 一加手机社区官方论坛【WEB】 263 | # http://www.oneplusbbs.com cookie 264 | [[ONEPLUSBBS]] 265 | cookie = "acw_tc=xxxxxx; qKc3_0e8d_saltkey=xxxxxx; qKc3_0e8d_lastvisit=xxxxxx; bbs_avatar=xxxxxx; qKc3_0e8d_sendmail=xxxxxx; opcid=xxxxxx; opcct=xxxxxx; oppt=xxxxxx; opsid=xxxxxx; opsct=xxxxxx; opbct=xxxxxx; UM_distinctid=xxxxxx; CNZZDATA1277373783=xxxxxx; www_clear=xxxxxx; ONEPLUSID=xxxxxx; qKc3_0e8d_sid=xxxxxx; bbs_uid=xxxxxx; bbs_uname=xxxxxx; bbs_grouptitle=xxxxxx; opuserid=xxxxxx; bbs_sign=xxxxxx; bbs_formhash=xxxxxx; qKc3_0e8d_ulastactivity=xxxxxx; opsertime=xxxxxx; qKc3_0e8d_lastact=xxxxxx; qKc3_0e8d_checkpm=xxxxxx; qKc3_0e8d_noticeTitle=xxxxxx; optime_browser=xxxxxx; opnt=xxxxxx; opstep=xxxxxx; opstep_event=xxxxxx; fp=xxxxxx;" 266 | 267 | # 哔咔漫画【APP】 268 | [[PICACOMIC]] 269 | email = "Sitoi" 270 | password = "xxxxxx" 271 | 272 | # 吾爱破解【WEB】 273 | # https://www.52pojie.cn cookie 274 | [[POJIE]] 275 | cookie = "htVD_2132_client_token=xxxxxx; htVD_2132_connect_is_bind=xxxxxx; htVD_2132_connect_uin=xxxxxx; htVD_2132_nofavfid=xxxxxx; htVD_2132_smile=xxxxxx; Hm_lvt_46d556462595ed05e05f009cdafff31a=xxxxxx; htVD_2132_saltkey=xxxxxx; htVD_2132_lastvisit=xxxxxx; htVD_2132_client_created=xxxxxx; htVD_2132_auth=xxxxxx; htVD_2132_connect_login=xxxxxx; htVD_2132_home_diymode=xxxxxx; htVD_2132_visitedfid=xxxxxx; htVD_2132_viewid=xxxxxx; KF4=xxxxxx; htVD_2132_st_p=xxxxxx; htVD_2132_lastcheckfeed=xxxxxx; htVD_2132_sid=xxxxxx; htVD_2132_ulastactivity=xxxxxx; htVD_2132_noticeTitle=xxxxxx;" 276 | 277 | # SF 轻小说【APP】 278 | [[SFACG]] 279 | authorization = "Basic xxxxxx==" 280 | cookie = ".SFCommunity=xxxxxx; session_APP=xxxxxx" 281 | sfsecurity = "nonce=xxxxxx×tamp=xxxxxx&devicetoken=xxxxxx&sign=xxxxxx" 282 | useragent = "boluobao/xxxxxx" 283 | 284 | # Site【WEB】 285 | # cookie 286 | # 三种类型,pt discuz hifi 287 | # 已测试支持站点:pterclub, btschool, pthome 288 | [[SITE]] 289 | cookie = "" 290 | type = "pt" 291 | url = "https://www.haidan.video" 292 | 293 | # 什么值得买 294 | # https://www.smzdm.com cookie 295 | [[SMZDM]] 296 | cookie = "sess=xxxxxx;" 297 | 298 | # 百度贴吧 299 | # https://tieba.baidu.com/index.html cookie 300 | [[TIEBA]] 301 | cookie = "BIDUPSID=xxxxxx; PSTM=xxxxxx; BAIDUID=xxxxxx; BAIDUID_BFESS=xxxxxx; delPer=xxxxxx; PSINO=xxxxxx; H_PS_PSSID=xxxxxx; BA_HECTOR=xxxxxx; BDORZ=xxxxxx; TIEBA_USERTYPE=xxxxxx; st_key_id=xxxxxx; BDUSS=xxxxxx; BDUSS_BFESS=xxxxxx; STOKEN=xxxxxx; TIEBAUID=xxxxxx; ab_sr=xxxxxx; st_data=xxxxxx; st_sign=xxxxxx;" 302 | 303 | # 在线工具【WEB】 304 | # https://plus.tool.lu cookie 305 | [[TOOLU]] 306 | cookie = "uuid=xxxxxx; _access=xxxxxx; XSRF-TOKEN=xxxxxx;" 307 | 308 | # 联通营业厅【APP】 309 | # 联通营业厅 APP 抓包域名为 https://m.client.10010.com/mobileService/login.htm 请求内容的 appId 310 | # 联通营业厅 APP 手机号 311 | # 联通营业厅 APP 密码 312 | [[UNICOM]] 313 | app_id = "" 314 | mobile = "18888xxxxxx" 315 | password = "" 316 | 317 | # V2EX【WEB】 318 | # https://v2ex.com,注意要抓签到那次的 ck(相当于需要先手动浏览器签到一次),不然可能签到无效 319 | # 使用代理信息,无密码示例:http://127.0.0.1:1080 有密码示例:http://username:password@127.0.0.1:1080 320 | [[V2EX]] 321 | cookie = "_ga=xxxxxx; __cfduid=xxxxxx; PB3_SESSION=xxxxxx; A2=xxxxxx; V2EXSETTINGS=xxxxxx; V2EX_REFERRER=xxxxxx; V2EX_LANG=xxxxxx; _gid=xxxxxx; V2EX_TAB=xxxxxx;" 322 | proxy = "" 323 | 324 | # 腾讯视频【WEB】 325 | # https://v.qq.com 搜索带有 auth_refresh 的 url,填写其完整的 URL 326 | # https://v.qq.com 搜索带有 auth_refresh 的 url,填写其完整的 URL 327 | [[VQQ]] 328 | auth_refresh = "https://access.video.qq.com/user/auth_refresh?vappid=xxxxxx&vsecret=xxxxxx&type=qq&g_tk=&g_vstk=xxxxxx&g_actk=xxxxxx&callback=xxxxxx&_=xxxxxx" 329 | cookie = "pgv_pvid=xxxxxx; pac_uid=xxxxxx; RK=xxxxxx; ptcz=xxxxxx; tvfe_boss_uuid=xxxxxx; video_guid=xxxxxx; video_platform=xxxxxx; pgv_info=xxxxxx; main_login=xxxxxx; vqq_access_token=xxxxxx; vqq_appid=xxxxxx; vqq_openid=xxxxxx; vqq_vuserid=xxxxxx; vqq_refresh_token=xxxxxx; login_time_init=xxxxxx; uid=xxxxxx; vqq_vusession=xxxxxx; vqq_next_refresh_time=xxxxxx; vqq_login_time_init=xxxxxx; login_time_last=xxxxxx;" 330 | 331 | # 微博【APP】 332 | # 微博 APP 抓取开头为 https://api.weibo.cn/2/users/show? 的整个 url 填入即可 333 | [[WEIBO]] 334 | url = "https://api.weibo.cn/2/users/show?wm=xxxxxx&launchid=xxxxxx&b=xxxxxx&from=xxxxxx&c=xxxxxx&networktype=xxxxxx&v_p=xxxxxx&skin=xxxxxx&v_f=xxxxxx&lang=xxxxxx&sflag=xxxxxx&ua=xxxxxx&ft=xxxxxx&aid=xxxxxx&has_extend=xxxxxx&uid=xxxxxx&gsid=xxxxxx&sourcetype=&get_teenager=xxxxxx&s=xxxxxx&has_profile=xxxxxx" 335 | 336 | # 联通沃邮箱【公众号】 337 | # 密码 338 | # true 为开启21天自动暂停,false 为关闭自动暂停、每天都签到,默认开启自动暂停 339 | # 手机号 340 | # 联通沃邮箱公众号 https://nyan.mail.wo.cn/cn/sign/index/index?mobile 开头的 URL 341 | [[WOMAIL]] 342 | password = "Sitoi" 343 | pause21days = true 344 | phone = "18888xxxxxx" 345 | url = "https://nyan.mail.wo.cn/cn/sign/index/index?mobile=xxxxxx&userName=&openId=xxxxxx" 346 | 347 | # WPS【WEB】 348 | # https://www.kdocs.cn cookie 349 | [[WPS]] 350 | cookie = "" 351 | 352 | # 咔叽网单【WEB】 353 | # http://www.2nzz.com cookie 354 | [[WWW2NZZ]] 355 | cookie = "YPx9_2132_saltkey=xxxxxx; YPx9_2132_lastvisit=xxxxxx; YPx9_2132_sendmail=xxxxxx; YPx9_2132_con_request_uri=xxxxxx; YPx9_2132_sid=xxxxxx; YPx9_2132_client_created=xxxxxx; YPx9_2132_client_token=xxxxxx; YPx9_2132_ulastactivity=xxxxxx; YPx9_2132_auth=xxxxxx; YPx9_2132_connect_login=xxxxxx; YPx9_2132_connect_is_bind=xxxxxx; YPx9_2132_connect_uin=xxxxxx; YPx9_2132_stats_qc_login=xxxxxx; YPx9_2132_checkpm=xxxxxx; YPx9_2132_noticeTitle=xxxxxx; YPx9_2132_nofavfid=xxxxxx; YPx9_2132_lastact=xxxxxx;" 356 | 357 | # 王者营地【APP】 358 | # 王者营地 APP 请求体中的 data,抓包域名为 https://ssl.kohsocial.qq.com 请求内容的全部参数 359 | [[WZYD]] 360 | data = "areaId=xxxxxx&roleId=xxxxxx&gameId=xxxxxx&serverId=xxxxxx&gameOpenid=xxxxxx&userId=xxxxxx&appVersion=xxxxxx&cClientVersionName=xxxxxx&platid=xxxxxx&source=xxxxxx&algorithm=xxxxxx&version=xxxxxx×tamp=xxxxxx&appid=xxxxxx&openid=xxxxxx&sig=xxxxxx&encode=2&msdkEncodeParam=xxxxxx&cSystem=xxxxxx&h5Get=xxxxxx&msdkToken=&appOpenid=xxxxxx" 361 | 362 | # 有道云笔记 363 | # https://note.youdao.com cookie 364 | [[YOUDAO]] 365 | cookie = "JSESSIONID=xxxxxx; __yadk_uid=xxxxxx; OUTFOX_SEARCH_USER_ID_NCOO=xxxxxx; YNOTE_SESS=xxxxxx; YNOTE_PERS=xxxxxx; YNOTE_LOGIN=xxxxxx; YNOTE_CSTK=xxxxxx; _ga=xxxxxx; _gid=xxxxxx; _gat=xxxxxx; PUBLIC_SHARE_18a9dde3de846b6a69e24431764270c4=xxxxxx;" 366 | 367 | # 智友邦【WEB】 368 | # http://bbs.zhiyoo.net cookie 369 | [[ZHIYOO]] 370 | cookie = "ikdQ_9242_saltkey=xxxxxx; ikdQ_9242_lastvisit=xxxxxx; ikdQ_9242_onlineusernum=xxxxxx; ikdQ_9242_sendmail=1; ikdQ_9242_seccode=xxxxxx; ikdQ_9242_ulastactivity=xxxxxx; ikdQ_9242_auth=xxxxxx; ikdQ_9242_connect_is_bind=xxxxxx; ikdQ_9242_nofavfid=xxxxxx; ikdQ_9242_checkpm=xxxxxx; ikdQ_9242_noticeTitle=1; ikdQ_9242_sid=xxxxxx; ikdQ_9242_lip=xxxxxx; ikdQ_9242_lastact=xxxxxx" 371 | -------------------------------------------------------------------------------- /dailycheckin_scripts/README.md: -------------------------------------------------------------------------------- 1 | # 配置说明 2 | 3 | ## 参数说明 4 | 5 | ### Web 签到配置 6 | 7 | | Name | 归属 | 属性 | 说明 | 8 | | :------------------------: | :-------------------------------------------------: | :--: | :----------------------------------------------------------- | 9 | | _**IQIYI**_.cookie | [爱奇艺](https://www.iqiyi.com/) | Web | 爱奇艺 帐号的 cookie 信息 | 10 | | _**KGQQ**_.cookie | [全民K歌](https://kg.qq.com/index-pc.html) | Web | 全民K歌 帐号的 cookie 信息 | 11 | | _**VQQ**_.auth_refresh | [腾讯视频](https://v.qq.com/) | Web | 腾讯视频 搜索 带有 `auth_refresh` 的 url,填写其完整的 URL | 12 | | _**VQQ**_.cookie | [腾讯视频](https://v.qq.com/) | Web | 腾讯视频 搜索 带有 `auth_refresh` 的 url,填写其对应的 cookie | 13 | | _**YOUDAO**_.cookie | [有道云笔记](https://note.youdao.com/web/) | Web | 有道云笔记 帐号的 cookie 信息 | 14 | | _**MUSIC163**_.phone | [网易云音乐](https://music.163.com/) | 账号 | 网易云音乐 帐号的手机号 | 15 | | _**MUSIC163**_.password | [网易云音乐](https://music.163.com/) | 账号 | 网易云音乐 帐号的密码 | 16 | | _**ONEPLUSBBS**_.cookie | [一加手机社区官方论坛](https://www.oneplusbbs.com/) | Web | 一加手机社区官方论坛 账户的 cookie | 17 | | _**TIEBA**_.cookie | [百度贴吧](https://tieba.baidu.com/index.html) | Web | 百度贴吧 cookie | 18 | | _**BILIBILI**_.cookie | [Bilibili](https://www.bilibili.com) | Web | Bilibili cookie | 19 | | _**BILIBILI**_.coin_num | [Bilibili](https://www.bilibili.com) | Web | Bilibili 每日投币数量 | 20 | | _**BILIBILI**_.coin_type | [Bilibili](https://www.bilibili.com) | Web | Bilibili 投币方式 默认为 0 ;1: 为关注用户列表视频投币 0: 为随机投币。如果关注用户发布的视频不足配置的投币数,则剩余部分使用随机投币 | 21 | | _**BILIBILI**_.silver2coin | [Bilibili](https://www.bilibili.com) | Web | Bilibili 是否开启银瓜子换硬币,默认为 True 开启 | 22 | | _**V2EX**_.cookie | [V2EX](https://www.v2ex.com/) | Web | V2EX 每日签到 | 23 | | _**V2EX**_.proxy | [V2EX](https://www.v2ex.com/) | Web | V2EX 代理的信息,无密码例子: http://127.0.0.1:1080 有密码例子: http://username:password@127.0.0.1:1080 | 24 | | _**WWW2NZZ**_.cookie | [咔叽网单](https://www.2nzz.com/) | Web | 咔叽网单 每日签到 | 25 | | _**SMZDM**_.cookie | [什么值得买](https://www.smzdm.com) | Web | 什么值得买 每日签到 | 26 | | _**CLOUD189**_.phone | [天翼云盘](https://cloud.189.cn/) | Web | 天翼云盘 手机号 | 27 | | _**CLOUD189**_.password | [天翼云盘](https://cloud.189.cn/) | Web | 天翼云盘 手机号对应的密码 | 28 | | _**POJIE**_.cookie | [吾爱破解](https://www.52pojie.cn/index.php) | Web | 吾爱破解 cookie | 29 | | _**MEIZU**_.cookie | [MEIZU 社区](https://bbs.meizu.cn) | Web | MEIZU 社区 cookie | 30 | | _**MEIZU**_.draw_count | [MEIZU 社区](https://bbs.meizu.cn) | Web | MEIZU 社区 抽奖次数 | 31 | | _**ZHIYOO**_.cookie | [智友邦](http://zhizhiyoo.net/) | Web | 智友邦 WEB Cookie | 32 | | _**CSDN**_.cookie | [CSDN](https://www.csdn.net/) | Web | CSDN Cookie | 33 | | _**EVERPHOTO**_.mobile | [时光相册](https://web.everphoto.cn/) | Web | 时光相册 https://web.everphoto.cn/api/auth URL 表单内的 mobile 数据 | 34 | | _**EVERPHOTO**_.password | [时光相册](https://web.everphoto.cn/) | Web | 时光相册 https://web.everphoto.cn/api/auth URL 表单内的 password 数据 | 35 | 36 | ### 公众号签到配置 37 | 38 | | Name | 归属 | 属性 | 说明 | 39 | | :----------------------: | :--------: | :----: | :----------------------------------------------------------- | 40 | | _**WOMAIL**_.url | 联通沃邮箱 | 公众号 | 联通沃邮箱 公众号 `https://nyan.mail.wo.cn/cn/sign/index/index?mobile` 开头的 URL | 41 | | _**WOMAIL**_.pause21days | 联通沃邮箱 | 公众号 | true: 开启21天自动暂停,false: 关闭自动暂停,每天都签到。默认开启自动暂停 | 42 | | _**WOMAIL**_.phone | 联通沃邮箱 | 公众号 | 手机号 | 43 | | _**WOMAIL**_.password | 联通沃邮箱 | 公众号 | 密码 | 44 | 45 | ### APP 签到配置 46 | 47 | | Name | 归属 | 属性 | 说明 | 48 | | :----------------------: | :-----------------------------------: | :--: | :----------------------------------------------------------- | 49 | | _**FMAPP**_.token | Fa米家 | APP | Fa米家 APP headers 中的 token | 50 | | _**FMAPP**_.cookie | Fa米家 | APP | Fa米家 APP headers 中的 cookie | 51 | | _**FMAPP**_.blackbox | Fa米家 | APP | Fa米家 APP headers 中的 blackBox | 52 | | _**FMAPP**_.device_id | Fa米家 | APP | Fa米家 APP headers 中的 deviceId | 53 | | _**FMAPP**_.fmversion | Fa米家 | APP | Fa米家 APP headers 中的 fmVersion | 54 | | _**FMAPP**_.os | Fa米家 | APP | Fa米家 APP headers 中的 os | 55 | | _**FMAPP**_.useragent | Fa米家 | APP | Fa米家 APP headers 中的 User-Agent | 56 | | _**ACFUN**_.phone | [AcFun](https://www.acfun.cn/) | APP | AcFun 手机账号 | 57 | | _**ACFUN**_.password | [AcFun](https://www.acfun.cn/) | APP | AcFun 账号密码 | 58 | | _**MGTV**_.params | 芒果 TV | APP | 芒果 TV 请求参数 | 59 | | _**PICACOMIC**_.email | [哔咔漫画](https://www.picacomic.com) | APP | 哔咔漫画 账号 | 60 | | _**PICACOMIC**_.password | [哔咔漫画](https://www.picacomic.com) | APP | 哔咔漫画 密码 | 61 | | _**WEIBO**_.url | 微博 | APP | 抓取开头为 `https://api.weibo.cn/2/users/show?` 的整个 url 填入即可 | 62 | | _**DUOKAN**_.cookie | 多看阅读 | APP | 多看阅读 cookie, 抓取开头为 `https://www.duokan.com` 下的 cookie 即可 | 63 | | _**WZYD**_.data | 王者营地 | APP | 王者营地 请求体中的 data, 抓包 APP 中域名为 `https://ssl.kohsocial.qq.com` 请求内容的全部参数 | 64 | | _**HEYTAP**_.cookie | 欢太商城 | APP | 欢太商城 请求体中的 Cookie, 抓包 APP 中域名为 `https://store.oppo.com/` 请求内容的 Cookie | 65 | | _**HEYTAP**_.useragent | 欢太商城 | APP | 欢太商城 请求体中的 User-Agent, 抓包 APP 中域名为 `https://store.oppo.com/` 请求内容的 User-Agent | 66 | | _**HEYTAP**_.draw | 欢太商城 | APP | 是否开启抽奖,默认 false | 67 | | _**UNICOM**_.mobile | 联通营业厅 | APP | 联通营业厅 手机号 | 68 | | _**UNICOM**_.password | 联通营业厅 | APP | 联通营业厅 6位登录密码 | 69 | | _**UNICOM**_.app_id | 联通营业厅 | APP | 联通营业厅 请求体中的 appId, 抓包 APP 中域名为 `https://m.client.10010.com/mobileService/login.htm` 请求内容的 appId | 70 | 71 | ### 其他任务配置 72 | 73 | | Name | 归属 | 属性 | 说明 | 74 | | :---------------------: | :-------------------------------------------------------: | :--: | :-------------------------------------- | 75 | | _**MIMOTION**_.phone | 小米运动 | 其他 | 小米运动刷步数的手机账号 | 76 | | _**MIMOTION**_.password | 小米运动 | 其他 | 小米运动刷步数的手机账号密码 | 77 | | _**MIMOTION**_.min_step | 小米运动 | 其他 | 小米运动刷步数的最小步数 | 78 | | _**MIMOTION**_.max_step | 小米运动 | 其他 | 小米运动刷步数的最大步数 | 79 | | _**BAIDUT**_.data_url | [百度搜索资源平台](https://ziyuan.baidu.com/site/index#/) | 其他 | 提交网站的 URL 链接 | 80 | | _**BAIDUT**_.submit_url | [百度搜索资源平台](https://ziyuan.baidu.com/site/index#/) | 其他 | 百度搜索资源平台 提交百度网站的目标 URL | 81 | | _**BAIDUT**_.times | [百度搜索资源平台](https://ziyuan.baidu.com/site/index#/) | 其他 | 每日对同一个网站提交次数 | 82 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_2nzz.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('咔叽网单'); 4 | """ 5 | import re 6 | 7 | import requests 8 | import urllib3 9 | from requests import utils 10 | 11 | from utils import check 12 | 13 | urllib3.disable_warnings() 14 | 15 | 16 | class WWW2NZZ: 17 | name = "咔叽网单" 18 | 19 | def __init__(self, check_item): 20 | self.check_item = check_item 21 | 22 | @staticmethod 23 | def sign(session): 24 | response = session.get(url="http://www.2nzz.com/index.php", verify=False) 25 | formhash = re.findall(r'(.*?)", response.text, re.S) 45 | check_msg = check_msg[0].strip() if check_msg else "签到失败" 46 | msg = [ 47 | {"name": "账号信息", "value": uid}, 48 | {"name": "签到信息", "value": check_msg}, 49 | ] 50 | return msg 51 | 52 | def main(self): 53 | cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 54 | session = requests.session() 55 | requests.utils.add_dict_to_cookiejar(session.cookies, cookie) 56 | session.headers.update( 57 | { 58 | "Origin": "http://www.2nzz.com", 59 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74", 60 | "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 61 | "Referer": "http://www.2nzz.com/index.php", 62 | "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", 63 | } 64 | ) 65 | msg = self.sign(session=session) 66 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 67 | return msg 68 | 69 | 70 | @check(run_script_name="咔叽网单", run_script_expression="WWW2NZZ") 71 | def main(*args, **kwargs): 72 | return WWW2NZZ(check_item=kwargs.get("value")).main() 73 | 74 | 75 | if __name__ == "__main__": 76 | main() 77 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_AcFun.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('ACFUN'); 4 | """ 5 | 6 | import requests 7 | import urllib3 8 | 9 | from utils import check 10 | 11 | urllib3.disable_warnings() 12 | 13 | 14 | class AcFun(object): 15 | name = "AcFun" 16 | 17 | def __init__(self, check_item: dict): 18 | self.check_item = check_item 19 | self.contentid = "27259341" 20 | 21 | @staticmethod 22 | def get_cookies(session, phone, password): 23 | url = "https://id.app.acfun.cn/rest/app/login/signin" 24 | headers = { 25 | "Host": "id.app.acfun.cn", 26 | "user-agent": "AcFun/6.39.0 (iPhone; iOS 14.3; Scale/2.00)", 27 | "devicetype": "0", 28 | "accept-language": "zh-Hans-CN;q=1, en-CN;q=0.9, ja-CN;q=0.8, zh-Hant-HK;q=0.7, io-Latn-CN;q=0.6", 29 | "accept": "application/json", 30 | "content-type": "application/x-www-form-urlencoded", 31 | } 32 | data = f"password={password}&username={phone}" 33 | response = session.post(url=url, data=data, headers=headers, verify=False) 34 | acpasstoken = response.json().get("acPassToken") 35 | auth_key = str(response.json().get("auth_key")) 36 | if acpasstoken and auth_key: 37 | cookies = {"acPasstoken": acpasstoken, "auth_key": auth_key} 38 | return cookies 39 | else: 40 | return False 41 | 42 | @staticmethod 43 | def get_token(session, cookies): 44 | url = "https://id.app.acfun.cn/rest/web/token/get" 45 | headers = { 46 | "Content-Type": "application/x-www-form-urlencoded", 47 | } 48 | response = session.post(url=url, cookies=cookies, data="sid=acfun.midground.api", headers=headers, verify=False) 49 | return response.json().get("acfun.midground.api_st") 50 | 51 | def get_video(self, session): 52 | url = "https://www.acfun.cn/rest/pc-direct/rank/channel" 53 | data = "channelId=0&rankPeriod=DAY" 54 | headers = { 55 | "Content-Type": "application/x-www-form-urlencoded", 56 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70", 57 | } 58 | response = session.post(url=url, data=data, headers=headers, verify=False) 59 | self.contentid = response.json().get("rankList")[0].get("contentId") 60 | return self.contentid 61 | 62 | @staticmethod 63 | def sign(session, cookies): 64 | headers = { 65 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70" 66 | } 67 | response = session.post( 68 | url="https://www.acfun.cn/rest/pc-direct/user/signIn", headers=headers, cookies=cookies, verify=False 69 | ) 70 | return {"name": "签到信息", "value": response.json().get("msg")} 71 | 72 | @staticmethod 73 | def danmu(session, cookies): 74 | url = "https://www.acfun.cn/rest/pc-direct/new-danmaku/add" 75 | body = "body=sitoi&color=16777215&id=27259341&mode=1&position=5019&size=25&subChannelId=84&subChannelName=%E4%B8%BB%E6%9C%BA%E5%8D%95%E6%9C%BA&type=douga&videoId=22898696" 76 | headers = { 77 | "Content-Type": "application/x-www-form-urlencoded", 78 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70", 79 | } 80 | response = session.post(url=url, headers=headers, cookies=cookies, data=body, verify=False) 81 | if response.json().get("result") == 0: 82 | msg = "弹幕成功" 83 | else: 84 | msg = "弹幕失败" 85 | return {"name": "弹幕任务", "value": msg} 86 | 87 | def throwbanana(self, session, cookies): 88 | url = "https://www.acfun.cn/rest/pc-direct/banana/throwBanana" 89 | body = f"count=1&resourceId={self.contentid}&resourceType=2" 90 | headers = { 91 | "Content-Type": "application/x-www-form-urlencoded", 92 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70", 93 | } 94 | response = session.post(url=url, headers=headers, cookies=cookies, data=body, verify=False) 95 | if response.json().get("result") == 0: 96 | msg = "香蕉成功" 97 | else: 98 | msg = "香蕉失败" 99 | return {"name": "香蕉任务", "value": msg} 100 | 101 | def like(self, session, token): 102 | like_url = "https://api.kuaishouzt.com/rest/zt/interact/add" 103 | unlike_url = "https://api.kuaishouzt.com/rest/zt/interact/delete" 104 | headers = { 105 | "Content-Type": "application/x-www-form-urlencoded", 106 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70", 107 | } 108 | cookies = {"acfun.midground.api_st": token, "kpn": "ACFUN_APP"} 109 | body = f"interactType=1&objectId={self.contentid}&objectType=2&subBiz=mainApp" 110 | response = session.post(url=like_url, headers=headers, cookies=cookies, data=body, verify=False) 111 | session.post(url=unlike_url, headers=headers, cookies=cookies, data=body, verify=False) 112 | if response.json().get("result") == 1: 113 | msg = "点赞成功" 114 | else: 115 | msg = "点赞失败" 116 | return {"name": "点赞任务", "value": msg} 117 | 118 | def share(self, session, cookies): 119 | url = "https://api-ipv6.acfunchina.com/rest/app/task/reportTaskAction?taskType=1&market=tencent&product=ACFUN_APP&appMode=0" 120 | headers = { 121 | "Content-Type": "application/x-www-form-urlencoded", 122 | } 123 | response = session.get(url=url, headers=headers, cookies=cookies, verify=False) 124 | if response.json().get("result") == 0: 125 | msg = "分享成功" 126 | else: 127 | msg = "分享失败" 128 | return {"name": "分享任务", "value": msg} 129 | 130 | def main(self): 131 | phone = self.check_item.get("phone") 132 | password = self.check_item.get("password") 133 | session = requests.session() 134 | self.get_video(session=session) 135 | cookies = self.get_cookies(session=session, phone=phone, password=password) 136 | token = self.get_token(session=session, cookies=cookies) 137 | sign_msg = self.sign(session=session, cookies=cookies) 138 | like_msg = self.like(session=session, token=token) 139 | # share_msg = self.share(session=session, cookies=cookies) 140 | # danmu_msg = self.danmu(session=session, cookies=cookies) 141 | # throwbanana_msg = self.throwbanana(session=session, cookies=cookies) 142 | msg = [{"name": "帐号信息", "value": phone}, sign_msg, like_msg] 143 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 144 | return msg 145 | 146 | 147 | @check(run_script_name="ACFUN",run_script_expression="ACF") 148 | def main(*args, **kwargs): 149 | return AcFun(check_item=kwargs.get("value")).main() 150 | 151 | 152 | if __name__ == "__main__": 153 | main() 154 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_EVERPHOTO.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('时光相册'); 4 | """ 5 | import requests 6 | 7 | from utils import check 8 | 9 | 10 | class EverPhoto: 11 | name = "时光相册" 12 | 13 | def __init__(self, check_item): 14 | self.check_item = check_item 15 | 16 | @staticmethod 17 | def sign(mobile, password): 18 | headers = { 19 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 20 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38", 21 | "accept": "*/*", 22 | "origin": "https://web.everphoto.cn", 23 | "referer": "https://web.everphoto.cn/", 24 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", 25 | } 26 | 27 | data = {"mobile": mobile, "password": password} 28 | try: 29 | response = requests.post(url="https://web.everphoto.cn/api/auth", headers=headers, data=data).json() 30 | if response.get("code") == 0: 31 | data = response.get("data") 32 | token = data.get("token") 33 | mobile = data.get("user_profile", {}).get("mobile") 34 | return token, {"name": "账号信息", "value": mobile} 35 | else: 36 | return False, {"name": "账号信息", "value": "登录失败"} 37 | except Exception as e: 38 | return False, {"name": "账号信息", "value": "登录失败"} 39 | 40 | @staticmethod 41 | def checkin(token): 42 | headers = { 43 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 44 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38", 45 | "accept": "*/*", 46 | "origin": "https://web.everphoto.cn", 47 | "authorization": f"Bearer {token}", 48 | "referer": "https://web.everphoto.cn/", 49 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", 50 | } 51 | try: 52 | response = requests.post(url="https://api.everphoto.cn/users/self/checkin/v2", headers=headers).json() 53 | if response.get("code") == 0: 54 | data = response.get("data") 55 | checkin_result = data.get("checkin_result") 56 | if checkin_result: 57 | return {"name": "签到信息", "value": "签到成功"} 58 | else: 59 | return {"name": "签到信息", "value": "已签到过或签到失败"} 60 | else: 61 | return {"name": "签到信息", "value": "签到失败"} 62 | except Exception as e: 63 | return {"name": "签到信息", "value": "签到失败"} 64 | 65 | def main(self): 66 | mobile = self.check_item.get("mobile") 67 | password = self.check_item.get("password") 68 | token, sign_msg = self.sign(mobile=mobile, password=password) 69 | msg = [sign_msg] 70 | if token: 71 | checkin_msg = self.checkin(token=token) 72 | msg.append(checkin_msg) 73 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 74 | return msg 75 | 76 | 77 | @check(run_script_name="时光相册", run_script_expression="EVERPHOTO|时光") 78 | def main(*args, **kwargs): 79 | return EverPhoto(check_item=kwargs.get("value")).main() 80 | 81 | 82 | if __name__ == "__main__": 83 | main() 84 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_baidu.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('百度站点提交'); 4 | """ 5 | 6 | from urllib import parse 7 | 8 | import requests 9 | 10 | from utils import check 11 | 12 | 13 | class Baidu(object): 14 | name = "百度站点提交" 15 | 16 | def __init__(self, check_item: dict): 17 | self.check_item = check_item 18 | 19 | @staticmethod 20 | def url_submit(data_url: str, submit_url: str, times: int = 100) -> str: 21 | site = parse.parse_qs(parse.urlsplit(submit_url).query).get("site")[0] 22 | urls_data = requests.get(url=data_url) 23 | remian = 100000 24 | success_count = 0 25 | error_count = 0 26 | for one in range(times): 27 | try: 28 | response = requests.post(url=submit_url, data=urls_data) 29 | if response.json().get("success"): 30 | remian = response.json().get("remain") 31 | success_count += response.json().get("success") 32 | else: 33 | error_count += 1 34 | except Exception as e: 35 | print(e) 36 | error_count += 1 37 | msg = [ 38 | {"name": "站点地址", "value": site}, 39 | {"name": "剩余条数", "value": remian}, 40 | {"name": "成功条数", "value": success_count}, 41 | {"name": "成功次数", "value": times - error_count}, 42 | {"name": "失败次数", "value": error_count}, 43 | ] 44 | return msg 45 | 46 | def main(self): 47 | data_url = self.check_item.get("data_url") 48 | submit_url = self.check_item.get("submit_url") 49 | times = int(self.check_item.get("times", 100)) 50 | if data_url and submit_url: 51 | msg = self.url_submit(data_url=data_url, submit_url=submit_url, times=times) 52 | else: 53 | msg = {"name": "站点配置", "value": "配置错误"} 54 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 55 | return msg 56 | 57 | 58 | @check(run_script_name="百度站点提交", run_script_expression="baidu") 59 | def main(*args, **kwargs): 60 | return Baidu(check_item=kwargs.get("value")).main() 61 | 62 | 63 | if __name__ == "__main__": 64 | main() 65 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_bilibili.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | cron: 30 8 * * * 4 | new Env('哔哩哔哩'); 5 | """ 6 | import requests 7 | from requests import utils 8 | 9 | from utils import check 10 | 11 | 12 | class BiliBili(): 13 | name = "Bilibili" 14 | 15 | # TODO 待测试,需要大会员账号测试领取福利 16 | def __init__(self, check_item: dict): 17 | self.check_item = check_item 18 | 19 | @staticmethod 20 | def get_nav(session): 21 | url = "https://api.bilibili.com/x/web-interface/nav" 22 | ret = session.get(url=url).json() 23 | uname = ret.get("data", {}).get("uname") 24 | uid = ret.get("data", {}).get("mid") 25 | is_login = ret.get("data", {}).get("isLogin") 26 | coin = ret.get("data", {}).get("money") 27 | vip_type = ret.get("data", {}).get("vipType") 28 | current_exp = ret.get("data", {}).get("level_info", {}).get("current_exp") 29 | return uname, uid, is_login, coin, vip_type, current_exp 30 | 31 | @staticmethod 32 | def reward(session) -> dict: 33 | """取B站经验信息""" 34 | url = "https://api.bilibili.com/x/member/web/exp/reward" 35 | ret = session.get(url=url).json() 36 | return ret 37 | 38 | @staticmethod 39 | def live_sign(session) -> dict: 40 | """B站直播签到""" 41 | try: 42 | url = "https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign" 43 | ret = session.get(url=url).json() 44 | if ret["code"] == 0: 45 | msg = f'签到成功,{ret["data"]["text"]},特别信息:{ret["data"]["specialText"]},本月已签到{ret["data"]["hadSignDays"]}天' 46 | elif ret["code"] == 1011040: 47 | msg = "今日已签到过,无法重复签到" 48 | else: 49 | msg = f'签到失败,信息为: {ret["message"]}' 50 | except Exception as e: 51 | msg = f"签到异常,原因为{str(e)}" 52 | print(msg) 53 | return msg 54 | 55 | @staticmethod 56 | def manga_sign(session, platform="android") -> dict: 57 | """ 58 | 模拟B站漫画客户端签到 59 | """ 60 | try: 61 | url = "https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn" 62 | post_data = {"platform": platform} 63 | ret = session.post(url=url, data=post_data).json() 64 | if ret["code"] == 0: 65 | msg = "签到成功" 66 | elif ret["msg"] == "clockin clockin is duplicate": 67 | msg = "今天已经签到过了" 68 | else: 69 | msg = f'签到失败,信息为({ret["msg"]})' 70 | print(msg) 71 | except Exception as e: 72 | msg = f"签到异常,原因为: {str(e)}" 73 | print(msg) 74 | return msg 75 | 76 | @staticmethod 77 | def vip_privilege_receive(session, bili_jct, receive_type: int = 1) -> dict: 78 | """ 79 | 领取B站大会员权益 80 | receive_type int 权益类型,1为B币劵,2为优惠券 81 | """ 82 | url = "https://api.bilibili.com/x/vip/privilege/receive" 83 | post_data = {"type": receive_type, "csrf": bili_jct} 84 | ret = session.post(url=url, data=post_data).json() 85 | return ret 86 | 87 | @staticmethod 88 | def vip_manga_reward(session) -> dict: 89 | """获取漫画大会员福利""" 90 | url = "https://manga.bilibili.com/twirp/user.v1.User/GetVipReward" 91 | ret = session.post(url=url, json={"reason_id": 1}).json() 92 | return ret 93 | 94 | @staticmethod 95 | def report_task(session, bili_jct, aid: int, cid: int, progres: int = 300) -> dict: 96 | """ 97 | B站上报视频观看进度 98 | aid int 视频av号 99 | cid int 视频cid号 100 | progres int 观看秒数 101 | """ 102 | url = "http://api.bilibili.com/x/v2/history/report" 103 | post_data = {"aid": aid, "cid": cid, "progres": progres, "csrf": bili_jct} 104 | ret = session.post(url=url, data=post_data).json() 105 | return ret 106 | 107 | @staticmethod 108 | def share_task(session, bili_jct, aid) -> dict: 109 | """ 110 | 分享指定av号视频 111 | aid int 视频av号 112 | """ 113 | url = "https://api.bilibili.com/x/web-interface/share/add" 114 | post_data = {"aid": aid, "csrf": bili_jct} 115 | ret = session.post(url=url, data=post_data).json() 116 | return ret 117 | 118 | @staticmethod 119 | def get_followings( 120 | session, uid: int, pn: int = 1, ps: int = 50, order: str = "desc", order_type: str = "attention" 121 | ) -> dict: 122 | """ 123 | 获取指定用户关注的up主 124 | uid int 账户uid,默认为本账户,非登录账户只能获取20个*5页 125 | pn int 页码,默认第一页 126 | ps int 每页数量,默认50 127 | order str 排序方式,默认desc 128 | order_type 排序类型,默认attention 129 | """ 130 | params = { 131 | "vmid": uid, 132 | "pn": pn, 133 | "ps": ps, 134 | "order": order, 135 | "order_type": order_type, 136 | } 137 | url = f"https://api.bilibili.com/x/relation/followings" 138 | ret = session.get(url=url, params=params).json() 139 | return ret 140 | 141 | @staticmethod 142 | def space_arc_search( 143 | session, uid: int, pn: int = 1, ps: int = 100, tid: int = 0, order: str = "pubdate", keyword: str = "" 144 | ) -> dict: 145 | """ 146 | 获取指定up主空间视频投稿信息 147 | uid int 账户uid,默认为本账户 148 | pn int 页码,默认第一页 149 | ps int 每页数量,默认50 150 | tid int 分区 默认为0(所有分区) 151 | order str 排序方式,默认pubdate 152 | keyword str 关键字,默认为空 153 | """ 154 | params = { 155 | "mid": uid, 156 | "pn": pn, 157 | "ps": ps, 158 | "tid": tid, 159 | "order": order, 160 | "keyword": keyword, 161 | } 162 | url = f"https://api.bilibili.com/x/space/arc/search" 163 | ret = session.get(url=url, params=params).json() 164 | data_list = [ 165 | {"aid": one.get("aid"), "cid": 0, "title": one.get("title"), "owner": one.get("author")} 166 | for one in ret.get("data", {}).get("list", {}).get("vlist", []) 167 | ] 168 | return data_list 169 | 170 | @staticmethod 171 | def elec_pay(session, bili_jct, uid: int, num: int = 50) -> dict: 172 | """ 173 | 用B币给up主充电 174 | uid int up主uid 175 | num int 充电电池数量 176 | """ 177 | url = "https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick" 178 | post_data = {"elec_num": num, "up_mid": uid, "otype": "up", "oid": uid, "csrf": bili_jct} 179 | ret = session.post(url=url, data=post_data).json() 180 | return ret 181 | 182 | @staticmethod 183 | def coin_add(session, bili_jct, aid: int, num: int = 1, select_like: int = 1) -> dict: 184 | """ 185 | 给指定 av 号视频投币 186 | aid int 视频av号 187 | num int 投币数量 188 | select_like int 是否点赞 189 | """ 190 | url = "https://api.bilibili.com/x/web-interface/coin/add" 191 | post_data = { 192 | "aid": aid, 193 | "multiply": num, 194 | "select_like": select_like, 195 | "cross_domain": "true", 196 | "csrf": bili_jct, 197 | } 198 | ret = session.post(url=url, data=post_data).json() 199 | 200 | return ret 201 | 202 | @staticmethod 203 | def live_status(session) -> dict: 204 | """B站直播获取金银瓜子状态""" 205 | url = "https://api.live.bilibili.com/pay/v1/Exchange/getStatus" 206 | ret = session.get(url=url).json() 207 | data = ret.get("data") 208 | silver = data.get("silver", 0) 209 | gold = data.get("gold", 0) 210 | coin = data.get("coin", 0) 211 | msg = [ 212 | {"name": "硬币数量", "value": coin}, 213 | {"name": "金瓜子数", "value": gold}, 214 | {"name": "银瓜子数", "value": silver}, 215 | ] 216 | return msg 217 | 218 | @staticmethod 219 | def get_region(session, rid=1, num=6) -> dict: 220 | """ 221 | 获取 B站分区视频信息 222 | rid int 分区号 223 | num int 获取视频数量 224 | """ 225 | url = "https://api.bilibili.com/x/web-interface/dynamic/region?ps=" + str(num) + "&rid=" + str(rid) 226 | ret = session.get(url=url).json() 227 | data_list = [ 228 | { 229 | "aid": one.get("aid"), 230 | "cid": one.get("cid"), 231 | "title": one.get("title"), 232 | "owner": one.get("owner", {}).get("name"), 233 | } 234 | for one in ret.get("data", {}).get("archives", []) 235 | ] 236 | return data_list 237 | 238 | def main(self): 239 | bilibili_cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 240 | bili_jct = bilibili_cookie.get("bili_jct") 241 | coin_num = self.check_item.get("coin_num", 0) 242 | coin_type = self.check_item.get("coin_type", 1) 243 | session = requests.session() 244 | requests.utils.add_dict_to_cookiejar(session.cookies, bilibili_cookie) 245 | session.headers.update( 246 | { 247 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64", 248 | "Referer": "https://www.bilibili.com/", 249 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", 250 | "Connection": "keep-alive", 251 | } 252 | ) 253 | success_count = 0 254 | uname, uid, is_login, coin, vip_type, current_exp = self.get_nav(session=session) 255 | if is_login: 256 | manhua_msg = self.manga_sign(session=session) 257 | live_msg = self.live_sign(session=session) 258 | aid_list = self.get_region(session=session) 259 | reward_ret = self.reward(session=session) 260 | coins_av_count = reward_ret.get("data", {}).get("coins") // 10 261 | coin_num = coin_num - coins_av_count 262 | coin_num = coin_num if coin_num < coin else coin 263 | if coin_type == 1 and coin_num: 264 | following_list = self.get_followings(session=session, uid=uid) 265 | for following in following_list.get("data", {}).get("list"): 266 | mid = following.get("mid") 267 | if mid: 268 | aid_list += self.space_arc_search(session=session, uid=mid) 269 | if coin_num > 0: 270 | for aid in aid_list[::-1]: 271 | ret = self.coin_add(session=session, aid=aid.get("aid"), bili_jct=bili_jct) 272 | if ret["code"] == 0: 273 | coin_num -= 1 274 | print(f'成功给{aid.get("title")}投一个币') 275 | success_count += 1 276 | elif ret["code"] == 34005: 277 | print(f'投币{aid.get("title")}失败,原因为{ret["message"]}') 278 | continue 279 | # -104 硬币不够了 -111 csrf 失败 34005 投币达到上限 280 | else: 281 | print(f'投币{aid.get("title")}失败,原因为{ret["message"]},跳过投币') 282 | break 283 | if coin_num <= 0: 284 | break 285 | coin_msg = f"今日成功投币{success_count + coins_av_count}/{self.check_item.get('coin_num', 5)}个" 286 | else: 287 | coin_msg = f"今日成功投币{coins_av_count}/{self.check_item.get('coin_num', 5)}个" 288 | aid = aid_list[0].get("aid") 289 | cid = aid_list[0].get("cid") 290 | title = aid_list[0].get("title") 291 | report_ret = self.report_task(session=session, bili_jct=bili_jct, aid=aid, cid=cid) 292 | if report_ret.get("code") == 0: 293 | report_msg = f"观看《{title}》300秒" 294 | else: 295 | report_msg = f"任务失败" 296 | print(report_msg) 297 | share_ret = self.share_task(session=session, bili_jct=bili_jct, aid=aid) 298 | if share_ret.get("code") == 0: 299 | share_msg = f"分享《{title}》成功" 300 | else: 301 | share_msg = f"分享失败" 302 | print(share_msg) 303 | live_stats = self.live_status(session=session) 304 | uname, uid, is_login, new_coin, vip_type, new_current_exp = self.get_nav(session=session) 305 | reward_ret = self.reward(session=session) 306 | login = 1 if reward_ret.get("data", {}).get("login") else 0 307 | watch_av = 1 if reward_ret.get("data", {}).get("watch") else 0 308 | coins_av = 1 if reward_ret.get("data", {}).get("coins", 0) else 0 309 | share_av = 1 if reward_ret.get("data", {}).get("share") else 0 310 | today_exp = len([one for one in [login, watch_av, share_av] if one]) * 5 311 | today_exp += coins_av 312 | update_data = (28800 - new_current_exp) // (today_exp if today_exp else 1) 313 | msg = [ 314 | {"name": "帐号信息", "value": uname}, 315 | {"name": "漫画签到", "value": manhua_msg}, 316 | {"name": "直播签到", "value": live_msg}, 317 | {"name": "登陆任务", "value": "今日已登陆"}, 318 | {"name": "观看视频", "value": report_msg}, 319 | {"name": "分享任务", "value": share_msg}, 320 | {"name": "投币任务", "value": coin_msg}, 321 | {"name": "今日经验", "value": today_exp}, 322 | {"name": "当前经验", "value": new_current_exp}, 323 | {"name": "升级还需", "value": f"{update_data}天"}, 324 | ] + live_stats 325 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 326 | return msg 327 | 328 | 329 | @check(run_script_name="哔哩哔哩",run_script_expression="bili|哔哩哔哩") 330 | def main(*args, **kwargs): 331 | return BiliBili(check_item=kwargs.get("value")).main() 332 | 333 | 334 | if __name__ == "__main__": 335 | main() 336 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_cloud189.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('天翼云盘'); 4 | """ 5 | import base64 6 | import re 7 | import time 8 | 9 | import requests 10 | import rsa 11 | 12 | 13 | from utils import check 14 | 15 | 16 | class Cloud189: 17 | name = "天翼云盘" 18 | 19 | def __init__(self, check_item: dict): 20 | self.check_item = check_item 21 | self.b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 22 | 23 | @staticmethod 24 | def int2char(a): 25 | return list("0123456789abcdefghijklmnopqrstuvwxyz")[a] 26 | 27 | def b64tohex(self, a): 28 | d = "" 29 | e = 0 30 | c = 0 31 | for i in range(len(a)): 32 | if list(a)[i] != "=": 33 | v = self.b64map.index(list(a)[i]) 34 | if 0 == e: 35 | e = 1 36 | d += self.int2char(v >> 2) 37 | c = 3 & v 38 | elif 1 == e: 39 | e = 2 40 | d += self.int2char(c << 2 | v >> 4) 41 | c = 15 & v 42 | elif 2 == e: 43 | e = 3 44 | d += self.int2char(c) 45 | d += self.int2char(v >> 2) 46 | c = 3 & v 47 | else: 48 | e = 0 49 | d += self.int2char(c << 2 | v >> 4) 50 | d += self.int2char(15 & v) 51 | if e == 1: 52 | d += self.int2char(c << 2) 53 | return d 54 | 55 | def rsa_encode(self, j_rsakey, string): 56 | rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----" 57 | pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode()) 58 | result = self.b64tohex((base64.b64encode(rsa.encrypt(f"{string}".encode(), pubkey))).decode()) 59 | return result 60 | 61 | def login(self, session, username, password): 62 | url = "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https://cloud.189.cn/web/redirect.html" 63 | r = session.get(url=url) 64 | captchatoken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0] 65 | lt = re.findall(r'lt = "(.+?)"', r.text)[0] 66 | returnurl = re.findall(r"returnUrl = '(.+?)'", r.text)[0] 67 | paramid = re.findall(r'paramId = "(.+?)"', r.text)[0] 68 | j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0] 69 | session.headers.update({"lt": lt}) 70 | 71 | username = self.rsa_encode(j_rsakey, username) 72 | password = self.rsa_encode(j_rsakey, password) 73 | url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do" 74 | headers = { 75 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0", 76 | "Referer": "https://open.e.189.cn/", 77 | } 78 | data = { 79 | "appKey": "cloud", 80 | "accountType": "01", 81 | "userName": f"{{RSA}}{username}", 82 | "password": f"{{RSA}}{password}", 83 | "validateCode": "", 84 | "captchaToken": captchatoken, 85 | "returnUrl": returnurl, 86 | "mailSuffix": "@189.cn", 87 | "paramId": paramid, 88 | } 89 | r = session.post(url, data=data, headers=headers, timeout=5) 90 | if r.json()["result"] == 0: 91 | redirect_url = r.json()["toUrl"] 92 | session.get(url=redirect_url) 93 | return True 94 | else: 95 | return {"name": "登陆信息", "value": r.json()["msg"]} 96 | 97 | @staticmethod 98 | def sign(session): 99 | rand = str(round(time.time() * 1000)) 100 | surl = f"https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K" 101 | url = "https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN" 102 | url2 = "https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN" 103 | headers = { 104 | "User-Agent": "Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6", 105 | "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1", 106 | "Host": "m.cloud.189.cn", 107 | "Accept-Encoding": "gzip, deflate", 108 | } 109 | response = session.get(url=surl, headers=headers) 110 | netdiskbonus = response.json().get("netdiskBonus") 111 | msg = [] 112 | if response.json().get("isSign") == "false": 113 | msg.append({"name": "签到结果", "value": f"未签到,签到获得 {netdiskbonus}M 空间"}) 114 | else: 115 | msg.append({"name": "签到结果", "value": f"已经签到过了,签到获得 {netdiskbonus}M 空间"}) 116 | response = session.get(url=url, headers=headers) 117 | if "errorCode" in response.text: 118 | if response.json().get("errorCode") == "User_Not_Chance": 119 | description = "没有抽奖机会了" 120 | else: 121 | description = response.json().get("errorCode") 122 | msg.append({"name": "第一次抽", "value": description}) 123 | else: 124 | description = response.json().get("description", "") 125 | if description in ["1", 1]: 126 | description = "50M空间" 127 | msg.append({"name": "第一次抽", "value": f"获得{description}"}) 128 | response = session.get(url=url2, headers=headers) 129 | if "errorCode" in response.text: 130 | if response.json().get("errorCode") == "User_Not_Chance": 131 | description = "没有抽奖机会了" 132 | else: 133 | description = response.json().get("errorCode") 134 | msg.append({"name": "第二次抽", "value": description}) 135 | else: 136 | description = response.json().get("description", "") 137 | if description in ["1", 1]: 138 | description = "50M空间" 139 | msg.append({"name": "第二次抽", "value": f"获得{description}"}) 140 | return msg 141 | 142 | def main(self): 143 | cloud189_phone = self.check_item.get("phone") 144 | cloud189_password = self.check_item.get("password") 145 | session = requests.Session() 146 | flag = self.login(session=session, username=cloud189_phone, password=cloud189_password) 147 | print(flag) 148 | if flag is True: 149 | sign_msg = self.sign(session=session) 150 | else: 151 | sign_msg = flag 152 | msg = [{"name": "帐号信息", "value": cloud189_phone}] + sign_msg 153 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 154 | return msg 155 | 156 | 157 | @check(run_script_name="天翼云盘",run_script_expression="CLOUD189|天翼") 158 | def main(*args, **kwargs): 159 | return Cloud189(check_item=kwargs.get("value")).main() 160 | 161 | 162 | if __name__ == "__main__": 163 | # main() 164 | print(Cloud189(check_item={'cloud189_phone': '17735745982', 'cloud189_password': 'Zl159753123'}).main()) 165 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_csdn.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('CSDN'); 4 | """ 5 | import requests 6 | 7 | from utils import check 8 | 9 | 10 | class CSDN: 11 | name = "CSDN" 12 | 13 | def __init__(self, check_item): 14 | self.check_item = check_item 15 | self.headers = { 16 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74", 17 | } 18 | 19 | def sign(self, cookies): 20 | response = requests.get( 21 | url="https://me.csdn.net/api/LuckyDraw_v2/signIn", headers=self.headers, cookies=cookies 22 | ).json() 23 | if response.get("code") == 200: 24 | msg = response.get("data").get("msg") 25 | else: 26 | msg = "签到失败" 27 | print(response) 28 | return msg 29 | 30 | def draw(self, cookies): 31 | response = requests.get( 32 | url="https://me.csdn.net/api/LuckyDraw_v2/goodluck", headers=self.headers, cookies=cookies 33 | ).json() 34 | if response.get("code") == 200: 35 | msg = response.get("data").get("msg") 36 | else: 37 | msg = "抽奖失败" 38 | return msg 39 | 40 | def main(self): 41 | csdn_cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 42 | try: 43 | user_name = csdn_cookie.get("UserName", "") 44 | except Exception as e: 45 | print(f"获取账号信息失败: {e}") 46 | user_name = "未获取到账号信息" 47 | sign_msg = self.sign(cookies=csdn_cookie) 48 | draw_msg = self.draw(cookies=csdn_cookie) 49 | msg = [ 50 | {"name": "帐号信息", "value": user_name}, 51 | {"name": "签到信息", "value": sign_msg}, 52 | {"name": "抽奖结果", "value": draw_msg}, 53 | ] 54 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 55 | return msg 56 | 57 | 58 | @check(run_script_name="CSDN", run_script_expression="csdn") 59 | def main(*args, **kwargs): 60 | return CSDN(check_item=kwargs.get("value")).main() 61 | 62 | 63 | if __name__ == "__main__": 64 | main() 65 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_duokan.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('多看阅读'); 4 | """ 5 | 6 | import time 7 | 8 | import requests 9 | 10 | from utils import check 11 | 12 | 13 | class DuoKan: 14 | name = "多看阅读" 15 | 16 | def __init__(self, check_item): 17 | self.check_item = check_item 18 | self.gift_code_list = [ 19 | "d16ad58199c69518a4afd87b5cf0fe67", 20 | "828672d6bc39ccd25e1f6ad34e00b86c", 21 | "f0ccc1bb1cecea673c197b928fb8dbd9", 22 | "6b86c490d92a138de9a0ae6847781caa", 23 | "c707047e8b820ba441d29cf87dff341e", 24 | "82b2c012a956b18cff2388d24f2574a6", 25 | "87d6b5183a361ee1f6ea8cece1ee83c3", 26 | "9d42576f7e99c94bb752fde06e6770a5", 27 | "e58d1f67a82a539d9331baaa3785a943", 28 | "52c95192ebcb1d0113a748df58a72055", 29 | "511f33e481fe4504d2637aaf6cbbbaff", 30 | "6e986f36f4a45cadf61d2f246b27cdc6", 31 | "f27797a6a1d7fe495b0f4de05f799327", 32 | "4bd335e899fa665f15eea2f215156321", 33 | "9355df762183f084473432b5c6900c44", 34 | "4fb21fb04cbbae9d65556c3958603674", 35 | "2d02ceb4f1bc916510c7407ce4eca5a5", 36 | "ef314bf665af0b51294e624244acd7d6", 37 | "1b441a2ab8e9e7dcf11a55b85931132f", 38 | "005d2345782ab456e5af167336b70623", 39 | "51ac508a4d494654035f17f1d646779b", 40 | "0f6579670f1081f1bcba89dd64645b48", 41 | "0cd858abe26f0d3db561185fe26bbb75", 42 | "b5f5fd5b47fd587cb003807e97bed783", 43 | "6ac9509a5cb799efeb1bb877c505f7e3", 44 | "b5dd986ffc84762429901ffe633d82a0", 45 | "f98a436cc2c85943d23d986a8d84c3bd", 46 | "6fc387f2a17b8564ca212e2b16544cc3", 47 | "12ead6a62411402378c6311199a0b2ef", 48 | "7d8dcf31e2e69fcf6bd8af4f48831e92", 49 | "446c3d0303b0dbd6bc2157844f1222ad", 50 | "439890227d823ff57bed8ad351fa1b75", 51 | "645acf3107722ab26b9d3194ecd156ff", 52 | "afcb41dd9bc54d752c26ace985b49960", 53 | "1100ab94ccd2e8373af70326c194d8ea", 54 | "373d73c0c0975cf959eb4c40dc82b27c", 55 | "2167ac28833149e9ad4ca217bcfa1a62", 56 | "80547afccc42f34e4c8c4083e00a41a6", 57 | "b604dda473644bd8157bafdf4ae518dc", 58 | "15eaa8f727b595d512b82f55364b53b9", 59 | "8fb656937fd613ccbbcacdc384595b03", 60 | "dd8410da0b5144ba4aba5a618723b72e", 61 | "204208386b056a2288e541110bfeeec3", 62 | "c5b2e7344efd4128bcab5840fa427103", 63 | "0168601e4335095c502e2e550ca53114", 64 | "dfa12fe056a8deee35da18613173560f", 65 | "ed945efdef9c7b2de41249a4fed3945e", 66 | "b9ece5964ab62d51f8b70ffd35191e9d", 67 | "f0e0ca4ca0b8afd766821a4922a2873c", 68 | "5c687b8c6bd641f3f2c0d6aaeceafff6", 69 | "c983be6420027231d77b748f9d02c1f2", 70 | "7c53358df8156d979cb6cbb74e15877b", 71 | "a58058035f73628a7c0847c66c350e88", 72 | "79dd039ca5cf401993801710f9900d6b", 73 | "5aff116c2cec01fcc69b389034f456a2", 74 | "d006927cd9bfd620a6af4f76ee3c4100", 75 | "410fe62830eeb91ca48be24ffe596364", 76 | "9d18226ff144a72812d0104ce59fb34e", 77 | "de439c7f75ca80b1d5b8aba619ee200d", 78 | "00d1a0479590793294bfdd5c427643aa", 79 | "d57176b1ce88135243bd501e448b8559", 80 | "7c500eff681637b97dd526bb11737abb", 81 | "3e197e47aaac926ccd50c37eb2828311", 82 | "7db084ea5987f841ad77240bcbb8ce54", 83 | "cce74f0facc50d47c0dd0e3e2f7435fb", 84 | "f8bb53fbeb9b2d45db8aca1401817599", 85 | "5baf7f0f355db11eeb0e936b675cdb82", 86 | "4478a3354de6bcd7e91b49e28a2b2b3f", 87 | "66a0338d93af82e956122288b08d2b4b", 88 | "9f598b2b1c9cd0f2b20e335831cce366", 89 | "9f4a45fec88b2820653abba179759eb6", 90 | "41086649c9a39ec977ba42f9ce81f828", 91 | "06ccca6fd73a6e38f65638ab8abbab76", 92 | "0cfa0a034a203bb3a22be499e74906f4", 93 | "c0d1da35a8878b7e4dcdf44bf3cd6b96", 94 | "f34921e16f6518c1149cc083bd8e1ad7", 95 | "ed0be3c70075d1d8f1a412f9e59a12e7", 96 | "eb4d6324bae7db952bd220cb4d57a3de", 97 | "5ba65d9f8ad735681b594f5092f6ab37", 98 | "2fa6e0b612962937edb37ed7043923fd", 99 | "baa8268c7d85d793011c5f5b977f8d4b", 100 | "f4842a465e4583646abf7df67d8e2915", 101 | "12c6332c8c9ded3d58d45f2dae7de8da", 102 | "f56609232205692acf6b6a5d337b0965", 103 | "3e4eed15387843c668fba53641599d07", 104 | "d1b9d9ede145b5d426130986245cb66e", 105 | "2979e43f6ab786f5d68cc262105f3c45", 106 | "118a18ed578c78f4855b416f8271b29a", 107 | "9122e158d034f094627c70ed6c3d0c33", 108 | "dd5413c17253e86cc4247984f3bb77e5", 109 | "b36bb0124b962efccbb601486665ce9e", 110 | "6afb3a719f8b0a0b2f744b3dad8b15ab", 111 | "faf18d64268402ed2975a3f60bc9e651", 112 | "9f4081944d4ca3fa7b831d7c3b6c289d", 113 | "367d7a3d77a9f96cbd7903b33c30b61f", 114 | "605276cf621ff9ba34a99e3675a006f6", 115 | "a50a734c1a3a749918e20205505ef91d", 116 | "271ff14ba5edfe89a80a3430227bc11b", 117 | "3bae338062b4bb3a5087eb13cbcc6efe", 118 | "9b443d60178a9bcb08bae62c41970abf", 119 | "a4f6e97741054f3567ab6a7257c63ab1", 120 | "e06a82cc1f05eda4947e5fa0927d89c5", 121 | "4fa3b4fc274c283efb02c0a1ddd133e7", 122 | "4aa59e16a3961ed1ebd12b7f15d79547", 123 | "f75fe88eaa24fc28ac57d963d8b90f2d", 124 | "42cbe52b6f74761a5a7a79bf370c30ef", 125 | "7d4571b5c9710e3b5481330bc7123ecc", 126 | "fcf2f7ec42086809991de5aed5e7ef0d", 127 | "bb7de9aaf68a83ac1ddbe75ba913b8af", 128 | "a9bd964b97e785fffb641edb9b402d3f", 129 | "6a815be6f537b2351e947ed66f74e209", 130 | "27ae4e4d71395c6255bf7ea57c496507", 131 | "2b07f369e90f4fc34ef419d891a2906f", 132 | "7a2dc8a5b3fc0c7ecddb97ed1ce2c833", 133 | "e7ad152ef27beb80c5d343f41f885b21", 134 | "ba21758aed15a3a20a27f63bc0d84626", 135 | "3820f7b8e1ece2614a11264501b5c93e", 136 | "c3c41c87e6bf752f5237b4fffa33f08b", 137 | "ed21086ff6682ab8495ecbfbb697af4a", 138 | "5a2585ff3524f319dfd1f6b735c9a18d", 139 | "0e61444507f0a780a1c83b612eb5fb9b", 140 | "b105aa5c696648c0f7aae9e3933f8fe0", 141 | "fec8f729e9e1d02248b949ce17674e0c", 142 | "d3323d5560d15d4bc03575dcd0f53ae9", 143 | "15fbf9d24dd05d9d64a18a8fd28f4dcc", 144 | "ac0f3bda53081eee547882b2cdc8b04f", 145 | "5dd3fadcd4ea6b922e1462431966c2bf", 146 | "4acb71816dad0ce9a53d8fee301d857c", 147 | "4c7e173f3a046919587db5b2640896e7", 148 | "8407dc0459d0b367eaced7e5dfdef8ed", 149 | "17e02409659223ff4e32cabd9ad352d9", 150 | "c49edc07086b27769eddb981359f56b2", 151 | "344822f5d8d53fe9aa7a1c7328cd2c59", 152 | "92259343c65ac0feab5cb56b2e851783", 153 | "e1e537b0bd37091c0ba4d5f614af9160", 154 | "dff1116c175ddaaa20f3985a3d88abc6", 155 | "3b1131a7c7273aa61cbd71b044e9beca", 156 | "431aab37ef168c383f078b9244008cee", 157 | "96c3bb8355d7e3ed7265095374f1c090", 158 | "c3a7d304cdb307f073bef5003d1b8b78", 159 | "627d884fc905cc353d0028076e39846b", 160 | "36ce0d88a6bb2d10e0dc0a697f64df4e", 161 | "dc8dbd035d42a5d8170976d5f532dab0", 162 | "01c2665e7ea15bc56cca6d955c2e8ae1", 163 | "c54ae7eeedc87ac52249684f012d3805", 164 | "2df9b3b8f21a682b20d9d77669087a7a", 165 | "fded473150a783586c12692fd57d0825", 166 | "580499e69f42c0ccba0d1f87a83e41e9", 167 | "99433cb83f1cd7176b7cdeaa7be49cd8", 168 | "fbd76e8265547376905b3b6004150064", 169 | "362768496052ae0dfbe909a9b5c6f54e", 170 | "4f33581089c90944e5ad950646b17712", 171 | "bffe93cdfe4b8833190e0a59c779e027", 172 | "78e042b792c3af7faf7a6ebfedf6af9e", 173 | "51a59c881726c2887efe9752bd9db715", 174 | "a46ecf03d3f4038ba3de4ae4ac28170f", 175 | "48d025f7cc34ac29c21d03b2c1f36449", 176 | "8c9ceb77d61c20cb96ee652eb7b838c9", 177 | "47a5882c89671429ae532339b7f333ce", 178 | "a0b735557416ff3d08d3d8440393061a", 179 | "976d3b3a8fbdf33d525075a9288455ab", 180 | "636ca4c1db1c4450431ecd7e10a5e671", 181 | "8c5cd12180027ee6535a837bd4f0259a", 182 | "b82315333974c76793b3c7f517fe977c", 183 | "6143d1f3472cd7cf08e3780918019158", 184 | "20d032426fd66d49bec4f99579252cfa", 185 | "398ee715d1dfd058a912bc7768d35f82", 186 | "1f678678966444fb53d118b8134ceb94", 187 | "d6641f3ed9444eae2b77ba68d3552f6a", 188 | "ab2babaa19539895a5285c1ded6de8c6", 189 | "5bc61d3cd53582b859db9cf04fc7e250", 190 | "5deb619ed27c2754df4f9c7e3ce16b82", 191 | "b81a322830fee59c75985626f7e0a8b5", 192 | "e2313ad53d58e181c5fbaef29e5772c3", 193 | "70d2aa99ef48b6cf1c0e8c107c0e121d", 194 | "0633cdb06253a2b11e9a9ca234a3e9c3", 195 | "bd1cbb9764fba94e8f1c0d1c024487af", 196 | "301cbdbf26210596f9b22123abff0ca8", 197 | "1fc2448ee192a1d0806ae1eb6fcc81fe", 198 | "306247030d0b6442c3ded42e9ca99872", 199 | "1c8f9a0786a01db1d06989345887967e", 200 | "256ec3a54aaae719aae88d8f9c7f9b5f", 201 | "45645896cccec48191916fec482979d9", 202 | "c3a19c728d6fd39925bd63abe15aa446", 203 | "15f45c4cd8fd4a6c0a3fae14ccafff47", 204 | "a082c46b09772739af41f01676e1d0d1", 205 | "14928418f94f5d35b182001ae0160455", 206 | "dfbc5bc946c72650adaaf570f11a1e80", 207 | "8a312e3e30d2e8fd1cf8873c3abe1d8c", 208 | "ef425403acaabfb2a5b3f6ab0aafce8c", 209 | "c78d471822dd961a53afe23e6c2dfa61", 210 | "a40f670d8de3784b54784daf63095d88", 211 | "49a72ace7fd54d8d0833bb2590db58aa", 212 | "38e3808d28de73af3578f6d64020e1fc", 213 | "a8be6ab39263d2edf61acafc60949921", 214 | "d9c16bf0032800916e948ea26624a253", 215 | "dbf3a62ff403c3ba94d5ab1e6219f5bc", 216 | "3a6415de684e2978ce17543d66d523f6", 217 | "2f69a681ee1ff927df1bdbd5431ced1d", 218 | "e55c0390872735ec285dad8ebdd939e0", 219 | ] 220 | self.code_list = [ 221 | "K7S36GFSZC", 222 | "A2AMBFHP6C", 223 | "K5HHKUU14D", 224 | "J18UK6YYAY", 225 | "1BJGW140U5", 226 | ] 227 | self.headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"} 228 | 229 | @staticmethod 230 | def get_data(cookies): 231 | device_id = cookies.get("device_id") 232 | t = int(time.time()) 233 | t_device_id = f"{device_id}&{t}" 234 | c = 0 235 | for index, one in enumerate(t_device_id): 236 | c = (c * 131 + ord(one)) % 65536 237 | data = f"_t={t}&_c={c}" 238 | return data 239 | 240 | def sign(self, cookies): 241 | url = "https://www.duokan.com/checkin/v0/checkin" 242 | data = self.get_data(cookies=cookies) 243 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 244 | result = response.json() 245 | msg = {"name": "每日签到", "value": result.get("msg")} 246 | return msg 247 | 248 | def delay(self, cookies, date): 249 | url = "https://www.duokan.com/store/v0/award/coin/delay" 250 | data = f"date={date}&{self.get_data(cookies=cookies)}&withid=1" 251 | ret = requests.post(url=url, data=data, cookies=cookies, headers=self.headers).json() 252 | return ret 253 | 254 | def info(self, cookies): 255 | url = "https://www.duokan.com/store/v0/award/coin/list" 256 | data = f"sandbox=0&{self.get_data(cookies=cookies)}&withid=1" 257 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 258 | result = response.json() 259 | msg = [] 260 | if "尚未登录" not in result.get("msg"): 261 | coin = sum([one.get("coin") for one in result.get("data", {}).get("award")]) 262 | msg.append({"name": "当前书豆", "value": coin}) 263 | for one in result.get("data", {}).get("award"): 264 | if one.get("delay") == 1: 265 | ret = self.delay(cookies, one.get("expire")) 266 | msg.append( 267 | {"name": f"{one.get('expire')} 到期", "value": f"{one.get('coin')} 书豆 | 延期:{ret.get('msg')}"} 268 | ) 269 | else: 270 | msg.append({"name": f"{one.get('expire')} 到期", "value": f"{one.get('coin')} 书豆"}) 271 | return msg 272 | else: 273 | return [{"name": "账号异常", "value": "Cookie 失效"}] 274 | 275 | def free(self, cookies): 276 | url = "https://www.duokan.com/hs/v4/channel/query/2027" 277 | response = requests.get(url=url, cookies=cookies, headers=self.headers) 278 | bid = response.json().get("items")[0].get("data").get("book_id") 279 | data = f"payment_name=BC&ch=VSZUVB&book_id={bid}&price=0&allow_discount=1" 280 | free_url = "https://www.duokan.com/store/v0/payment/book/create" 281 | response = requests.post(url=free_url, data=data, cookies=cookies, headers=self.headers) 282 | result = response.json() 283 | if "尚未登录" not in result.get("msg"): 284 | book_title = result.get("book").get("title") 285 | book_msg = result.get("msg") 286 | msg = {"name": "今日限免", "value": f"{book_title} · {book_msg}"} 287 | else: 288 | msg = {"name": "今日限免", "value": f"Cookie 失效"} 289 | return msg 290 | 291 | def gift(self, cookies): 292 | url = "https://www.duokan.com/events/common_task_gift_check" 293 | data = f"code=KYKJF7LL0G&{self.get_data(cookies=cookies)}&withid=1" 294 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 295 | result = response.json() 296 | if result.get("chances") == 0: 297 | msg = {"name": "体验任务", "value": "已经做完啦"} 298 | elif result.get("chances"): 299 | num = 0 300 | for gift_code in self.gift_code_list: 301 | url = "https://www.duokan.com/events/common_task_gift" 302 | data = f"code=KYKJF7LL0G&chances=1&sign={gift_code}&{self.get_data(cookies=cookies)}&withid=1" 303 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 304 | result = response.json() 305 | if result.get("msg") == "成功": 306 | num += 30 307 | print("体验任务完成啦!豆子 +30") 308 | else: 309 | continue 310 | msg = {"name": "体验任务", "value": f"获得 {num} 豆子"} 311 | else: 312 | msg = {"name": "体验任务", "value": f"{response.text}"} 313 | return msg 314 | 315 | def add_draw(self, cookies): 316 | success_count = 0 317 | for one in range(6): 318 | url = "https://www.duokan.com/store/v0/event/chances/add" 319 | data = f"code=8ulcky4bknbe_f&count=1&{self.get_data(cookies=cookies)}&withid=1" 320 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 321 | result = response.json() 322 | if result.get("result") == 0: 323 | success_count += 1 324 | msg = {"name": "添加抽奖", "value": f"{success_count} 次"} 325 | return msg 326 | 327 | def draw(self, cookies): 328 | success_count = 0 329 | for one in range(6): 330 | url = "https://www.duokan.com/store/v0/event/drawing" 331 | data = f"code=8ulcky4bknbe_f&{self.get_data(cookies=cookies)}&withid=1" 332 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 333 | result = response.json() 334 | if result.get("result") == 0: 335 | success_count += 1 336 | msg = {"name": "成功抽奖", "value": f"{success_count} 次"} 337 | return msg 338 | 339 | def download(self, cookies): 340 | url = "https://www.duokan.com/events/common_task_gift" 341 | data = f"code=J18UK6YYAY&chances=17&{self.get_data(cookies=cookies)}&withid=1" 342 | count = 0 343 | while True: 344 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 345 | result = response.json() 346 | if result.get("result") == 130014: 347 | break 348 | count += 1 349 | msg = {"name": "下载任务", "value": f"完成 {count} 次"} 350 | return msg 351 | 352 | def task(self, cookies): 353 | success_count = 0 354 | url = "https://www.duokan.com/events/tasks_gift" 355 | for i in range(3): 356 | for code in self.code_list: 357 | data = f"code={code}&chances=3&{self.get_data(cookies=cookies)}&withid=1" 358 | response = requests.post(url=url, data=data, cookies=cookies, headers=self.headers) 359 | result = response.json() 360 | if result.get("result") == 0: 361 | success_count += 1 362 | msg = {"name": "其他任务", "value": f"完成 {success_count} 个"} 363 | return msg 364 | 365 | def main(self): 366 | duokan_cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 367 | sign_msg = self.sign(cookies=duokan_cookie) 368 | free_msg = self.free(cookies=duokan_cookie) 369 | gift_msg = self.gift(cookies=duokan_cookie) 370 | add_draw_msg = self.add_draw(cookies=duokan_cookie) 371 | draw_msg = self.draw(cookies=duokan_cookie) 372 | download_msg = self.download(cookies=duokan_cookie) 373 | task_msg = self.task(cookies=duokan_cookie) 374 | info_msg = self.info(cookies=duokan_cookie) 375 | msg = [sign_msg, free_msg, gift_msg, add_draw_msg, draw_msg, download_msg, task_msg] + info_msg 376 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 377 | return msg 378 | 379 | 380 | @check(run_script_name="多看阅读",run_script_expression="duokan|多看") 381 | def main(*args, **kwargs): 382 | return DuoKan(check_item=kwargs.get("value")).main() 383 | 384 | 385 | if __name__ == "__main__": 386 | main() 387 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_fmapp.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('米家'); 4 | """ 5 | import json 6 | 7 | import requests 8 | 9 | from utils import check 10 | 11 | 12 | class FMAPP: 13 | name = "Fa米家" 14 | 15 | def __init__(self, check_item): 16 | self.check_item = check_item 17 | 18 | @staticmethod 19 | def sign(headers): 20 | try: 21 | url = "https://fmapp.chinafamilymart.com.cn/api/app/market/member/signin/sign" 22 | response = requests.post(url=url, headers=headers).json() 23 | code = response.get("code") 24 | if code == "200": 25 | data = response.get("data", {}) 26 | msg = ( 27 | f"在坚持{data.get('nextDay')}天即可获得{data.get('nextNumber')}个发米粒, " 28 | f"签到{data.get('lastDay')}天可获得{data.get('lastNumber')}个发米粒" 29 | ) 30 | else: 31 | msg = response.get("message") 32 | except Exception as e: 33 | print("错误信息", str(e)) 34 | msg = "未知错误,检查日志" 35 | msg = {"name": "签到信息", "value": msg} 36 | return msg 37 | 38 | @staticmethod 39 | def user_info(headers): 40 | try: 41 | url = "https://fmapp.chinafamilymart.com.cn/api/app/member/info" 42 | response = requests.post(url=url, headers=headers).json() 43 | code = response.get("code") 44 | if code == "200": 45 | data = response.get("data", {}) 46 | msg = data.get("nickName") 47 | else: 48 | msg = response.get("message") 49 | except Exception as e: 50 | print("错误信息", str(e)) 51 | msg = "未知错误,检查日志" 52 | msg = {"name": "帐号信息", "value": msg} 53 | return msg 54 | 55 | @staticmethod 56 | def mili_count(headers): 57 | try: 58 | url = "https://fmapp.chinafamilymart.com.cn/api/app/member/v1/mili/service/detail" 59 | response = requests.post(url=url, headers=headers, data=json.dumps({"pageSize": 10, "pageNo": 1})).json() 60 | code = response.get("code") 61 | if code == "200": 62 | data = response.get("data", {}) 63 | msg = data.get("miliNum") 64 | else: 65 | msg = response.get("message") 66 | except Exception as e: 67 | print("错误信息", str(e)) 68 | msg = "未知错误,检查日志" 69 | msg = {"name": "米粒数量", "value": msg} 70 | return msg 71 | 72 | def main(self): 73 | token = self.check_item.get("token") 74 | cookie = self.check_item.get("cookie") 75 | blackbox = self.check_item.get("blackbox") 76 | device_id = self.check_item.get("device_id") 77 | fmversion = self.check_item.get("fmversion", "2.2.3") 78 | fm_os = self.check_item.get("os", "ios") 79 | useragent = self.check_item.get("useragent", "Fa") 80 | headers = { 81 | "Accept": "*/*", 82 | "Accept-Language": "zh-Hans;q=1.0", 83 | "Accept-Encoding": "br;q=1.0, gzip;q=0.9, deflate;q=0.8", 84 | "Host": "fmapp.chinafamilymart.com.cn", 85 | "Content-Type": "application/json", 86 | "loginChannel": "app", 87 | "token": token, 88 | "fmVersion": fmversion, 89 | "deviceId": device_id, 90 | "User-Agent": useragent, 91 | "os": fm_os, 92 | "cookie": cookie, 93 | "blackBox": blackbox, 94 | } 95 | sign_msg = self.sign(headers=headers) 96 | name_msg = self.user_info(headers=headers) 97 | mili_msg = self.mili_count(headers=headers) 98 | msg = [name_msg, sign_msg, mili_msg] 99 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 100 | return msg 101 | 102 | 103 | @check(run_script_name="米家", run_script_expression="fmapp|米家") 104 | def main(*args, **kwargs): 105 | return FMAPP(check_item=kwargs.get("value")).main() 106 | 107 | 108 | if __name__ == "__main__": 109 | main() 110 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_iqiyi.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('爱奇艺'); 4 | """ 5 | import hashlib 6 | import json 7 | import os 8 | import random 9 | import re 10 | import string 11 | import time 12 | from urllib.parse import unquote 13 | 14 | import requests 15 | 16 | from utils import check 17 | 18 | 19 | class IQIYI: 20 | name = "爱奇艺" 21 | 22 | def __init__(self, check_item): 23 | self.check_item = check_item 24 | 25 | @staticmethod 26 | def parse_cookie(cookie): 27 | p00001 = re.findall(r"P00001=(.*?);", cookie)[0] if re.findall(r"P00001=(.*?);", cookie) else "" 28 | p00002 = re.findall(r"P00002=(.*?);", cookie)[0] if re.findall(r"P00002=(.*?);", cookie) else "" 29 | p00003 = re.findall(r"P00003=(.*?);", cookie)[0] if re.findall(r"P00003=(.*?);", cookie) else "" 30 | dfp = re.findall(r"dfp=(.*?);", cookie)[0] if re.findall(r"dfp=(.*?);", cookie) else "" 31 | return p00001, p00002, p00003, dfp 32 | 33 | @staticmethod 34 | def md5(data): 35 | return hashlib.md5(bytes(data, encoding="utf-8")).hexdigest() 36 | 37 | def get_sign(self, c, t, e=None): 38 | buf = [] 39 | for key, value in t.items(): 40 | buf.append("=".join([key, str(value)])) 41 | if e is not None: 42 | buf.append(e) 43 | return self.md5(c.join(buf)) 44 | return c.join(buf) 45 | 46 | @staticmethod 47 | def user_information(p00001): 48 | """ 49 | 账号信息查询 50 | """ 51 | time.sleep(3) 52 | url = "http://serv.vip.iqiyi.com/vipgrowth/query.action" 53 | params = {"P00001": p00001} 54 | res = requests.get(url=url, params=params).json() 55 | if res["code"] == "A00000": 56 | try: 57 | res_data = res.get("data", {}) 58 | level = res_data.get("level", 0) # VIP 等级 59 | growthvalue = res_data.get("growthvalue", 0) # 当前 VIP 成长值 60 | distance = res_data.get("distance", 0) # 升级需要成长值 61 | deadline = res_data.get("deadline", "非 VIP 用户") # VIP 到期时间 62 | today_growth_value = res_data.get("todayGrowthValue", 0) # 今日成长值 63 | msg = [ 64 | {"name": "VIP 等级", "value": level}, 65 | {"name": "当前成长", "value": growthvalue}, 66 | {"name": "今日成长", "value": today_growth_value}, 67 | {"name": "升级还需", "value": distance}, 68 | {"name": "VIP 到期", "value": deadline}, 69 | ] 70 | except Exception as e: 71 | msg = [ 72 | {"name": "账号信息", "value": str(e)}, 73 | ] 74 | print(msg) 75 | else: 76 | msg = [ 77 | {"name": "账号信息", "value": res.get("msg")}, 78 | ] 79 | return msg 80 | 81 | @staticmethod 82 | def sign(p00001): 83 | """ 84 | VIP 签到 85 | """ 86 | url = "https://tc.vip.iqiyi.com/taskCenter/task/queryUserTask" 87 | params = {"P00001": p00001, "autoSign": "yes"} 88 | res = requests.get(url=url, params=params).json() 89 | if res["code"] == "A00000": 90 | try: 91 | cumulate_sign_days_sum = res["data"]["monthlyGrowthReward"] 92 | msg = [ 93 | {"name": "当月成长", "value": f"{cumulate_sign_days_sum}成长值"}, 94 | ] 95 | except Exception as e: 96 | print(e) 97 | msg = [{"name": "当月成长", "value": str(e)}] 98 | else: 99 | msg = [{"name": "当月成长", "value": res.get("msg")}] 100 | return msg 101 | 102 | def sign2(self, p00001, p00003): 103 | sign_date = { 104 | "agentType": "1", 105 | "agentversion": "1.0", 106 | "appKey": "basic_pcw", 107 | "authCookie": p00001, 108 | "qyid": self.md5("".join(random.sample(string.ascii_letters + string.digits, 16))), 109 | "task_code": "natural_month_sign", 110 | "timestamp": round(time.time() * 1000), 111 | "typeCode": "point", 112 | "userId": p00003, 113 | } 114 | post_date = { 115 | "natural_month_sign": { 116 | "agentType": "1", 117 | "agentversion": "1", 118 | "authCookie": p00001, 119 | "qyid": self.md5("".join(random.sample(string.ascii_letters + string.digits, 16))), 120 | "taskCode": "iQIYI_mofhr", 121 | "verticalCode": "iQIYI", 122 | } 123 | } 124 | sign = self.get_sign("|", sign_date, "UKobMjDMsDoScuWOfp6F") 125 | url = f"https://community.iqiyi.com/openApi/task/execute?{self.get_sign('&', sign_date)}&sign={sign}" 126 | header = {"Content-Type": "application/json"} 127 | res = requests.post(url, headers=header, data=json.dumps(post_date)).json() 128 | if res["code"] == "A00000": 129 | if res["data"]["code"] == "A0000": 130 | # quantity = res["data"]["data"]["rewards"][0]["rewardCount"] # 积分 131 | # addgrowthvalue = res["data"]["data"]["rewards"][0]["rewardCount"] # 新增成长值 132 | # continued = res["data"]["data"]["signDays"] # 签到天数 133 | msg = [{"name": "APP 签到", "value": "签到成功"}] 134 | else: 135 | msg = [{"name": "APP 签到", "value": f"签到失败:{res['data']['msg']}"}] 136 | else: 137 | msg = [{"name": "APP 签到", "value": f"签到失败:{res['message']}"}] 138 | return msg 139 | 140 | def web_sign(self, p00001, p00003, dfp): 141 | dfp = dfp.split("@")[0] 142 | web_sign_date = { 143 | "agenttype": "1", 144 | "agentversion": "0", 145 | "appKey": "basic_pca", 146 | "appver": "0", 147 | "authCookie": p00001, 148 | "channelCode": "sign_pcw", 149 | "dfp": dfp, 150 | "scoreType": "1", 151 | "srcplatform": "1", 152 | "typeCode": "point", 153 | "userId": p00003, 154 | "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36", 155 | "verticalCode": "iQIYI", 156 | } 157 | 158 | sign = self.get_sign("|", web_sign_date, "DO58SzN6ip9nbJ4QkM8H") 159 | url = f"https://community.iqiyi.com/openApi/score/add?{self.get_sign('&', web_sign_date)}&sign={sign}" 160 | res = requests.get(url).json() 161 | if res["code"] == "A00000": 162 | if res["data"][0]["code"] == "A0000": 163 | quantity = res["data"][0]["score"] 164 | continued = res["data"][0]["continuousValue"] 165 | msg = [{"name": "WEB 签到", "value": f"积分+{quantity} 累计签到{continued}天"}] 166 | 167 | else: 168 | msg = [{"name": "WEB 签到", "value": f"网页端签到失败:{res['data'][0]['message']}"}] 169 | else: 170 | msg = [{"name": "WEB 签到", "value": f"网页端签到失败:{res['message']}"}] 171 | return msg 172 | 173 | @staticmethod 174 | def query_user_task(p00001): 175 | """ 176 | 获取 VIP 日常任务 和 taskCode(任务状态) 177 | """ 178 | url = "https://tc.vip.iqiyi.com/taskCenter/task/queryUserTask" 179 | params = {"P00001": p00001} 180 | task_list = [] 181 | res = requests.get(url=url, params=params).json() 182 | if res["code"] == "A00000": 183 | for item in res["data"]["tasks"]["daily"]: 184 | task_list.append( 185 | { 186 | "name": item["name"], 187 | "taskCode": item["taskCode"], 188 | "status": item["status"], 189 | "taskReward": item["taskReward"]["task_reward_growth"], 190 | } 191 | ) 192 | return task_list 193 | 194 | @staticmethod 195 | def join_task(p00001, task_list): 196 | """ 197 | 遍历完成任务 198 | """ 199 | url = "https://tc.vip.iqiyi.com/taskCenter/task/joinTask" 200 | params = {"P00001": p00001, "taskCode": "", "platform": "bb136ff4276771f3", "lang": "zh_CN"} 201 | for item in task_list: 202 | if item["status"] == 2: 203 | params["taskCode"] = item["taskCode"] 204 | requests.get(url=url, params=params) 205 | 206 | @staticmethod 207 | def get_task_rewards(p00001, task_list): 208 | """ 209 | 获取任务奖励 210 | :return: 返回信息 211 | """ 212 | url = "https://tc.vip.iqiyi.com/taskCenter/task/getTaskRewards" 213 | params = {"P00001": p00001, "taskCode": "", "platform": "bb136ff4276771f3", "lang": "zh_CN"} 214 | growth_task = 0 215 | for item in task_list: 216 | if item["status"] == 0: 217 | params["taskCode"] = item.get("taskCode") 218 | requests.get(url=url, params=params) 219 | elif item["status"] == 4: 220 | requests.get(url="https://tc.vip.iqiyi.com/taskCenter/task/notify", params=params) 221 | params["taskCode"] = item.get("taskCode") 222 | requests.get(url=url, params=params) 223 | elif item["status"] == 1: 224 | growth_task += item["taskReward"] 225 | msg = {"name": "任务奖励", "value": f"+{growth_task}成长值"} 226 | return msg 227 | 228 | @staticmethod 229 | def draw(draw_type, p00001, p00003): 230 | """ 231 | 查询抽奖次数(必),抽奖 232 | :param draw_type: 类型。0 查询次数;1 抽奖 233 | :param p00001: 关键参数 234 | :param p00003: 关键参数 235 | :return: {status, msg, chance} 236 | """ 237 | url = "https://iface2.iqiyi.com/aggregate/3.0/lottery_activity" 238 | params = { 239 | "lottery_chance": 1, 240 | "app_k": "b398b8ccbaeacca840073a7ee9b7e7e6", 241 | "app_v": "11.6.5", 242 | "platform_id": 10, 243 | "dev_os": "8.0.0", 244 | "dev_ua": "FRD-AL10", 245 | "net_sts": 1, 246 | "qyid": "2655b332a116d2247fac3dd66a5285011102", 247 | "psp_uid": p00003, 248 | "psp_cki": p00001, 249 | "psp_status": 3, 250 | "secure_v": 1, 251 | "secure_p": "GPhone", 252 | "req_sn": round(time.time() * 1000), 253 | } 254 | if draw_type == 1: 255 | del params["lottery_chance"] 256 | res = requests.get(url=url, params=params).json() 257 | if not res.get("code"): 258 | chance = int(res.get("daysurpluschance")) 259 | msg = res.get("awardName") 260 | return {"status": True, "msg": msg, "chance": chance} 261 | else: 262 | try: 263 | msg = res.get("kv", {}).get("msg") 264 | except Exception as e: 265 | print(e) 266 | msg = res["errorReason"] 267 | return {"status": False, "msg": msg, "chance": 0} 268 | 269 | def main(self): 270 | p00001, p00002, p00003, dfp = self.parse_cookie(self.check_item.get("cookie")) 271 | sign_msg = self.sign(p00001=p00001) 272 | web_sign_msg = self.web_sign(p00001=p00001, p00003=p00003, dfp=dfp) 273 | sign2_msg = self.sign2(p00001=p00001, p00003=p00003) 274 | chance = self.draw(0, p00001=p00001, p00003=p00003)["chance"] 275 | if chance: 276 | draw_msg = "" 277 | for i in range(chance): 278 | ret = self.draw(1, p00001=p00001, p00003=p00003) 279 | draw_msg += ret["msg"] + ";" if ret["status"] else "" 280 | else: 281 | draw_msg = "抽奖机会不足" 282 | task_msg = "" 283 | for one in range(6): 284 | task_list = self.query_user_task(p00001=p00001) 285 | self.join_task(p00001=p00001, task_list=task_list) 286 | time.sleep(10) 287 | task_msg = self.get_task_rewards(p00001=p00001, task_list=task_list) 288 | try: 289 | user_info = json.loads(unquote(p00002, encoding="utf-8")) 290 | user_name = user_info.get("user_name") 291 | user_name = user_name.replace(user_name[3:7], "****") 292 | nickname = user_info.get("nickname") 293 | except Exception as e: 294 | print(f"获取账号信息失败,错误信息: {e}") 295 | nickname = "未获取到,请检查 Cookie 中 P00002 字段" 296 | user_name = "未获取到,请检查 Cookie 中 P00002 字段" 297 | user_msg = self.user_information(p00001=p00001) 298 | 299 | msg = ( 300 | [ 301 | {"name": "用户账号", "value": user_name}, 302 | {"name": "用户昵称", "value": nickname}, 303 | ] 304 | + user_msg 305 | + sign_msg 306 | + web_sign_msg 307 | + sign2_msg 308 | + [ 309 | task_msg, 310 | {"name": "抽奖奖励", "value": draw_msg}, 311 | ] 312 | ) 313 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 314 | return msg 315 | 316 | 317 | @check(run_script_name="爱奇艺",run_script_expression="IQIYI|爱奇艺") 318 | def main(*args, **kwargs): 319 | return IQIYI(check_item=kwargs.get("value")).main() 320 | 321 | 322 | if __name__ == "__main__": 323 | main() 324 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_kgqq.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('全民k歌'); 4 | """ 5 | import requests 6 | 7 | from utils import check 8 | 9 | 10 | class KGQQ: 11 | name = "全民K歌" 12 | 13 | def __init__(self, check_item): 14 | self.check_item = check_item 15 | 16 | @staticmethod 17 | def sign(kgqq_cookie): 18 | headers = {"Cookie": kgqq_cookie} 19 | uid = kgqq_cookie.split("; ") 20 | t_uuid = "" 21 | for i in uid: 22 | if i.find("uid=") >= 0: 23 | t_uuid = i.split("=")[1] 24 | proto_profile_url = "https://node.kg.qq.com/webapp/proxy?ns=proto_profile&cmd=profile.getProfile&mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnByb2ZpbGVfd2ViYXBwSmNlJTIyJTJDJTIyY21kTmFtZSUyMiUzQSUyMlByb2ZpbGVHZXQlMjIlMkMlMjJhcHBpZCUyMiUzQTEwMDA2MjYlMkMlMjJkY2FwaSUyMiUzQSU3QiUyMmludGVyZmFjZUlkJTIyJTNBMjA1MzU5NTk3JTdEJTJDJTIybDVhcGklMjIlM0ElN0IlMjJtb2RpZCUyMiUzQTI5NDAxNyUyQyUyMmNtZCUyMiUzQTI2MjE0NCU3RCUyQyUyMmlwJTIyJTNBJTIyMTAwLjExMy4xNjIuMTc4JTIyJTJDJTIycG9ydCUyMiUzQSUyMjEyNDA2JTIyJTdE&t_uUid={0}".format( 25 | t_uuid 26 | ) 27 | 28 | url_list = ( 29 | [ 30 | "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.getLottery&ns_inbuf=&mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIyJTNBJTIyTG90dGVyeVJlcSUyMiUyQyUyMnduc0NvbmZpZyUyMiUzQSU3QiUyMmFwcGlkJTIyJTNBMTAwMDU1NyU3RCUyQyUyMmw1YXBpJTIyJTNBJTdCJTIybW9kaWQlMjIlM0E1MDM5MzclMkMlMjJjbWQlMjIlM0E1ODk4MjQlN0QlN0Q%3D&t_uid={0}&t_iShowEntry=1&t_type={1}".format( 31 | t_uuid, one 32 | ) 33 | for one in ["1", "2"] 34 | ] 35 | + [ 36 | "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.signinGetAward&mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIyJTNBJTIyR2V0U2lnbkluQXdhcmRSZXElMjIlMkMlMjJ3bnNDb25maWclMjIlM0ElN0IlMjJhcHBpZCUyMiUzQTEwMDA2MjYlN0QlMkMlMjJsNWFwaSUyMiUzQSU3QiUyMm1vZGlkJTIyJTNBNTAzOTM3JTJDJTIyY21kJTIyJTNBNTg5ODI0JTdEJTdE&t_uid={0}&t_iShowEntry={1}".format( 37 | t_uuid, one 38 | ) 39 | for one in ["1", "2", "4", "16", "128", "512"] 40 | ] 41 | + [ 42 | "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.getLottery&mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIyJTNBJTIyTG90dGVyeVJlcSUyMiUyQyUyMnduc0NvbmZpZyUyMiUzQSU3QiUyMmFwcGlkJTIyJTNBMTAwMDU1NyU3RCUyQyUyMmw1YXBpJTIyJTNBJTdCJTIybW9kaWQlMjIlM0E1MDM5MzclMkMlMjJjbWQlMjIlM0E1ODk4MjQlN0QlN0Q&t_uid={0}&t_iShowEntry=4&t_type=104".format( 43 | t_uuid 44 | ), 45 | "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.getLottery&mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIyJTNBJTIyTG90dGVyeVJlcSUyMiUyQyUyMmw1YXBpJTIyJTNBJTdCJTIybW9kaWQlMjIlM0E1MDM5MzclMkMlMjJjbWQlMjIlM0E1ODk4MjQlN0QlMkMlMjJsNWFwaV9leHAxJTIyJTNBJTdCJTIybW9kaWQlMjIlM0E4MTcwODklMkMlMjJjbWQlMjIlM0EzODAxMDg4JTdEJTdE&t_uid={0}&t_type=103".format( 46 | t_uuid 47 | ), 48 | ] 49 | ) 50 | 51 | proto_music_station_url = "https://node.kg.qq.com/webapp/proxy?ns=proto_music_station&cmd=message.batch_get_music_cards&mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldEJhdGNoTXVzaWNDYXJkc1JlcSUyMiUyQyUyMmZpbGUlMjIlM0ElMjJwcm90b19tdXNpY19zdGF0aW9uSmNlJTIyJTJDJTIyd25zRGlzcGF0Y2hlciUyMiUzQXRydWUlN0Q&t_uUid={0}&g_tk_openkey=".format( 52 | t_uuid 53 | ) 54 | 55 | url_10 = "https://node.kg.qq.com/webapp/proxy?t_stReward%3Aobject=%7B%22uInteractiveType%22%3A1%2C%22uRewardType%22%3A0%2C%22uFlowerNum%22%3A15%7D&ns=proto_music_station&cmd=message.get_reward&mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldFJld2FyZFJlcSUyMiUyQyUyMmZpbGUlMjIlM0ElMjJwcm90b19tdXNpY19zdGF0aW9uSmNlJTIyJTJDJTIyd25zRGlzcGF0Y2hlciUyMiUzQXRydWUlN0Q&t_uUid={0}&t_strUgcId=".format( 56 | t_uuid 57 | ) 58 | 59 | url_15 = "https://node.kg.qq.com/webapp/proxy?t_stReward%3Aobject=%7B%22uInteractiveType%22%3A0%2C%22uRewardType%22%3A0%2C%22uFlowerNum%22%3A10%7D&ns=proto_music_station&cmd=message.get_reward&mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldFJld2FyZFJlcSUyMiUyQyUyMmZpbGUlMjIlM0ElMjJwcm90b19tdXNpY19zdGF0aW9uSmNlJTIyJTJDJTIyd25zRGlzcGF0Y2hlciUyMiUzQXRydWUlN0Q&t_uUid={0}&t_strUgcId=".format( 60 | t_uuid 61 | ) 62 | try: 63 | old_proto_profile_response = requests.get(url=proto_profile_url, headers=headers) 64 | old_num = old_proto_profile_response.json()["data"]["profile.getProfile"]["uFlowerNum"] 65 | nickname = old_proto_profile_response.json()["data"]["profile.getProfile"]["stPersonInfo"]["sKgNick"] 66 | for url in url_list: 67 | try: 68 | requests.get(url=url, headers=headers) 69 | except Exception as e: 70 | print(e) 71 | for g_tk_openkey in range(16): 72 | try: 73 | proto_music_station_resp = requests.get( 74 | url=proto_music_station_url + str(g_tk_openkey), headers=headers 75 | ) 76 | if proto_music_station_resp.json().get("code") in [1000]: 77 | return proto_music_station_resp.json().get("msg") 78 | vct_music_cards = proto_music_station_resp.json()["data"]["message.batch_get_music_cards"][ 79 | "vctMusicCards" 80 | ] 81 | vct_music_cards_list = sorted( 82 | vct_music_cards, key=lambda x: x["stReward"]["uFlowerNum"], reverse=True 83 | )[0] 84 | str_ugc_id = vct_music_cards_list["strUgcId"] 85 | str_key = vct_music_cards_list["strKey"] 86 | url = str_ugc_id + "&t_strKey=" + str_key 87 | u_flower_num = vct_music_cards_list["stReward"]["uFlowerNum"] 88 | if u_flower_num > 10: 89 | requests.get(url=url_10 + url, headers=headers) 90 | elif 1 < u_flower_num < 10: 91 | requests.get(url=url_15 + url, headers=headers) 92 | except Exception as e: 93 | print(e) 94 | # VIP 签到 95 | try: 96 | getinfourl = ( 97 | "https://node.kg.qq.com/webapp/proxy?ns=proto_vip_webapp&cmd=vip.get_vip_info&t_uUid=" 98 | + t_uuid 99 | + "&t_uWebReq=1&t_uGetDataFromC4B=1" 100 | ) 101 | inforequest = requests.get(url=getinfourl, headers=headers) 102 | vip_status = inforequest.json()["data"]["vip.get_vip_info"]["stVipCoreInfo"]["uStatus"] 103 | if vip_status == 1: 104 | vipurl = ( 105 | "https://node.kg.qq.com/webapp/proxy?t_uUid=" 106 | + t_uuid 107 | + "&ns=proto_vip_webapp&cmd=vip.get_vip_day_reward&ns_inbuf=&nocache=1613719349184&mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldFZpcERheVJld2FyZCUyMiU3RA%3D%3D&g_tk_openkey=642424811" 108 | ) 109 | viprequest = requests.get(url=vipurl, headers=headers) 110 | str_tips = viprequest.json()["data"]["vip.get_vip_day_reward"]["strTips"] 111 | u_cur_reward_num = viprequest.json()["data"]["vip.get_vip_day_reward"]["uCurRewardNum"] 112 | vip_message = f"{str_tips} 获取VIP福利道具:{u_cur_reward_num}个" 113 | else: 114 | vip_message = "非 VIP 用户" 115 | except Exception as e: 116 | print(e) 117 | vip_message = "VIP 签到失败" 118 | new_proto_profile_response = requests.get(url=proto_profile_url, headers=headers) 119 | new_num = new_proto_profile_response.json()["data"]["profile.getProfile"]["uFlowerNum"] 120 | get_num = int(new_num) - int(old_num) 121 | msg = [ 122 | {"name": "帐号信息", "value": nickname}, 123 | {"name": "获取鲜花", "value": get_num}, 124 | {"name": "当前鲜花", "value": new_num}, 125 | {"name": "VIP 签到", "value": vip_message}, 126 | ] 127 | except Exception as e: 128 | msg = [ 129 | {"name": "帐号信息", "value": str(e)}, 130 | ] 131 | return msg 132 | 133 | def main(self): 134 | kgqq_cookie = self.check_item.get("cookie") 135 | msg = self.sign(kgqq_cookie=kgqq_cookie) 136 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 137 | return msg 138 | 139 | 140 | @check(run_script_name="全民K歌",run_script_expression="KGQQ|全民K歌") 141 | def main(*args, **kwargs): 142 | return KGQQ(check_item=kwargs.get("value")).main() 143 | 144 | 145 | if __name__ == "__main__": 146 | main() 147 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_meizu.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('MEIZU社区'); 4 | """ 5 | import time 6 | 7 | import requests 8 | 9 | from utils import check 10 | 11 | 12 | class Meizu: 13 | name = "MEIZU社区" 14 | 15 | def __init__(self, check_item): 16 | self.check_item = check_item 17 | 18 | @staticmethod 19 | def sign(cookie): 20 | headers = { 21 | "authority": "bbs-act.meizu.cn", 22 | "pragma": "no-cache", 23 | "cache-control": "no-cache", 24 | "accept": "application/json, text/javascript, */*; q=0.01", 25 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74", 26 | "origin": "https://bbs.meizu.cn", 27 | "referer": "https://bbs.meizu.cn/", 28 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", 29 | "cookie": cookie, 30 | } 31 | params = ( 32 | ("mod", "signin"), 33 | ("action", "sign"), 34 | ) 35 | response = requests.get(url="https://bbs-act.meizu.cn/index.php", headers=headers, params=params).json() 36 | msg = response.get("message") 37 | return msg 38 | 39 | @staticmethod 40 | def draw(cookie, count: int = 0): 41 | headers = { 42 | "authority": "bbs-act.meizu.cn", 43 | "accept": "application/json, text/javascript, */*; q=0.01", 44 | "x-requested-with": "XMLHttpRequest", 45 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74", 46 | "content-type": "application/x-www-form-urlencoded", 47 | "origin": "https://bbs-act.meizu.cn", 48 | "referer": "https://bbs-act.meizu.cn/2/index.html", 49 | "accept-language": "zh-CN,zh;q=0.9", 50 | "cookie": cookie, 51 | } 52 | data = {"mod": "index", "action": "draw", "id": "2"} 53 | award_list = [] 54 | success_count = 0 55 | error_count = 0 56 | if count: 57 | for i in range(count): 58 | try: 59 | data = requests.post(url="https://bbs-act.meizu.cn/index.php", headers=headers, data=data).json() 60 | if data["code"] == 200: 61 | one_msg = data.get("data", {}).get("award_name") 62 | award_list.append(one_msg) 63 | success_count += 1 64 | else: 65 | error_count += 1 66 | print(data.get("code"), data.get("message")) 67 | one_msg = "抽奖失败" 68 | except Exception as e: 69 | one_msg = f"抽奖失败: {e}" 70 | error_count += 1 71 | print(f"第{i + 1}次抽奖结果:" + str(one_msg)) 72 | time.sleep(5) 73 | msg = f"成功抽奖 {success_count} 次" 74 | draw_msg = [ 75 | {"name": "抽奖信息", "value": str(msg)}, 76 | {"name": "抽奖结果", "value": ";".join(award_list)}, 77 | ] 78 | else: 79 | draw_msg = [ 80 | {"name": "抽奖信息", "value": "未开启抽奖"}, 81 | ] 82 | data = {"mod": "index", "action": "get_user_count", "id": "2"} 83 | user_info = requests.post("https://bbs-act.meizu.cn/index.php", headers=headers, data=data).json() 84 | uid = user_info.get("data", {}).get("uid") 85 | return draw_msg, uid 86 | 87 | def main(self): 88 | meizu_cookie = self.check_item.get("cookie") 89 | try: 90 | draw_count = int(self.check_item.get("draw_count", 0)) 91 | except Exception as e: 92 | print("初始化抽奖次数失败: 重置为 0 ", str(e)) 93 | draw_count = 0 94 | sign_msg = self.sign(cookie=meizu_cookie) 95 | draw_msg, uid = self.draw(cookie=meizu_cookie, count=draw_count) 96 | msg = [ 97 | {"name": "帐号信息", "value": uid}, 98 | {"name": "签到信息", "value": sign_msg}, 99 | ] + draw_msg 100 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 101 | return msg 102 | 103 | 104 | @check(run_script_name="MEIZU社区", run_script_expression="meizu") 105 | def main(*args, **kwargs): 106 | return Meizu(check_item=kwargs.get("value")).main() 107 | 108 | 109 | if __name__ == "__main__": 110 | main() 111 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_mgtv.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('芒果TV'); 4 | """ 5 | import json 6 | import time 7 | from urllib import parse 8 | 9 | import requests 10 | 11 | from utils import check 12 | 13 | 14 | class Mgtv: 15 | name = "芒果TV" 16 | 17 | def __init__(self, check_item): 18 | self.check_item = check_item 19 | 20 | @staticmethod 21 | def sign(params): 22 | url = "https://credits.bz.mgtv.com/user/creditsTake" 23 | user_params = { 24 | "abroad": params.get("abroad"), 25 | "ageMode": "0", 26 | "appVersion": params.get("appVersion"), 27 | "artistId": params.get("uuid"), 28 | "device": params.get("device"), 29 | "did": params.get("did"), 30 | "mac": params.get("did"), 31 | "osType": params.get("osType"), 32 | "src": "mgtv", 33 | "testversion": "", 34 | "ticket": params.get("ticket"), 35 | "uuid": params.get("uuid"), 36 | } 37 | try: 38 | user_info = requests.get(url="https://homepage.bz.mgtv.com/v2/user/userInfo", params=user_params).json() 39 | username = user_info.get("data", {}).get("nickName") 40 | except Exception as e: 41 | print("获取账号信息失败", e) 42 | username = params.get("uuid") 43 | res = requests.get(url=url, params=params) 44 | res_json = json.loads(res.text.replace(f"{params.get('callback')}(", "").replace(");", "")) 45 | if res_json["code"] == 200: 46 | cur_day = res_json["data"]["curDay"] 47 | _credits = res_json["data"]["credits"] 48 | msg = [ 49 | {"name": "帐号信息", "value": username}, 50 | {"name": "签到积分", "value": f"{_credits}积分"}, 51 | {"name": "已经签到", "value": f"{cur_day}天/21天"}, 52 | ] 53 | else: 54 | msg = [ 55 | {"name": "帐号信息", "value": username}, 56 | {"name": "签到信息", "value": f"已完成签到 or 签到失败"}, 57 | ] 58 | return msg 59 | 60 | def main(self): 61 | mgtv_params = self.check_item.get("params") 62 | params = parse.parse_qs(mgtv_params) 63 | params["timestamp"] = [round(time.time())] 64 | params = {key: value[0] for key, value in params.items()} 65 | msg = self.sign(params=params) 66 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 67 | return msg 68 | 69 | 70 | @check(run_script_name="芒果TV",run_script_expression="MGTV") 71 | def main(*args, **kwargs): 72 | return Mgtv(check_item=kwargs.get("value")).main() 73 | 74 | 75 | if __name__ == "__main__": 76 | main() 77 | 78 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_mimotion.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf8 -*- 2 | """ 3 | new Env('小米运动'); 4 | """ 5 | from utils import check 6 | import random 7 | import re 8 | import time 9 | 10 | import requests 11 | 12 | 13 | class MiMotion: 14 | name = "小米运动" 15 | 16 | def __init__(self, check_item): 17 | self.check_item = check_item 18 | self.headers = {"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 9; MI 6 MIUI/20.6.18)"} 19 | 20 | def get_time(self): 21 | url = "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp" 22 | response = requests.get(url, headers=self.headers).json() 23 | t = response["data"]["t"] 24 | return t 25 | 26 | def get_app_token(self, login_token): 27 | 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}" 28 | response = requests.get(url=url, headers=self.headers).json() 29 | app_token = response["token_info"]["app_token"] 30 | return app_token 31 | 32 | @staticmethod 33 | def login(phone, password): 34 | url1 = f"https://api-user.huami.com/registrations/+86{phone}/tokens" 35 | headers = { 36 | "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", 37 | "User-Agent": "MiFit/4.6.0 (iPhone; iOS 14.0.1; Scale/2.00)", 38 | } 39 | data1 = { 40 | "client_id": "HuaMi", 41 | "password": f"{password}", 42 | "redirect_uri": "https://s3-us-west-2.amazonaws.com/hm-registration/successsignin.html", 43 | "token": "access", 44 | } 45 | r1 = requests.post(url=url1, data=data1, headers=headers, allow_redirects=False) 46 | location = r1.headers["Location"] 47 | try: 48 | code_pattern = re.compile("(?<=access=).*?(?=&)") 49 | code = code_pattern.findall(location)[0] 50 | except Exception as e: 51 | print(e) 52 | return 0, 0 53 | url2 = "https://account.huami.com/v2/client/login" 54 | data2 = { 55 | "app_name": "com.xiaomi.hm.health", 56 | "app_version": "5.0.2", 57 | "code": f"{code}", 58 | "country_code": "CN", 59 | "device_id": "10E2A98F-D36F-4DF1-A7B9-3FBD8FBEB800", 60 | "device_model": "phone", 61 | "grant_type": "access_token", 62 | "third_name": "huami_phone", 63 | } 64 | r2 = requests.post(url=url2, data=data2, headers=headers).json() 65 | login_token = r2["token_info"]["login_token"] 66 | userid = r2["token_info"]["user_id"] 67 | return login_token, userid 68 | 69 | def main(self): 70 | phone = str(self.check_item.get("phone")) 71 | password = str(self.check_item.get("password")) 72 | try: 73 | min_step = int(self.check_item.get("min_step", 10000)) 74 | except Exception as e: 75 | print("初始化步数失败: 已将最小值设置为 19999", e) 76 | min_step = 10000 77 | try: 78 | max_step = int(self.check_item.get("max_step", 19999)) 79 | except Exception as e: 80 | print("初始化步数失败: 已将最大值设置为 19999", e) 81 | max_step = 19999 82 | step = str(random.randint(min_step, max_step)) 83 | login_token, userid = self.login(phone, password) 84 | if login_token == 0: 85 | msg = [ 86 | {"name": "帐号信息", "value": f"{phone[:4]}****{phone[-4:]}"}, 87 | {"name": "修改信息", "value": f"登陆失败"}, 88 | ] 89 | else: 90 | t = self.get_time() 91 | app_token = self.get_app_token(login_token) 92 | today = time.strftime("%F") 93 | 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" 94 | finddate = re.compile(r".*?date%22%3A%22(.*?)%22%2C%22data.*?") 95 | findstep = re.compile(r".*?ttl%5C%22%3A(.*?)%2C%5C%22dis.*?") 96 | data_json = re.sub(finddate.findall(data_json)[0], today, str(data_json)) 97 | data_json = re.sub(findstep.findall(data_json)[0], step, str(data_json)) 98 | url = f"https://api-mifit-cn.huami.com/v1/data/band_data.json?&t={t}" 99 | headers = {"apptoken": app_token, "Content-Type": "application/x-www-form-urlencoded"} 100 | data = f"userid={userid}&last_sync_data_time=1628256960&device_type=0&last_deviceid=C4BDB6FFFE2BCA4C&data_json={data_json}" 101 | response = requests.post(url=url, data=data, headers=headers).json() 102 | msg = [ 103 | {"name": "帐号信息", "value": f"{phone[:4]}****{phone[-4:]}"}, 104 | {"name": "修改信息", "value": f"{response['message']}"}, 105 | {"name": "修改步数", "value": f"{step}"}, 106 | ] 107 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 108 | return msg 109 | 110 | 111 | @check(run_script_name="小米运动",run_script_expression="MIMOTION") 112 | def main(*args, **kwargs): 113 | return MiMotion(check_item=kwargs.get("value")).main() 114 | 115 | 116 | if __name__ == "__main__": 117 | main() 118 | 119 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_oneplusBBS.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('一加手机社区官方论坛'); 4 | """ 5 | from utils import check 6 | import re 7 | import time 8 | from urllib import parse 9 | 10 | import requests 11 | 12 | 13 | class OnePlusBBS: 14 | name = "一加手机社区官方论坛" 15 | 16 | def __init__(self, check_item): 17 | self.check_item = check_item 18 | 19 | @staticmethod 20 | def sign(cookie): 21 | headers = { 22 | "Origin": "https://www.oneplusbbs.com", 23 | "Content-Type": "application/x-www-form-urlencoded", 24 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.57", 25 | "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 26 | "Referer": "https://www.oneplusbbs.com/plugin-dsu_paulsign:sign.html", 27 | "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,fr;q=0.5,pl;q=0.4", 28 | "cookie": cookie, 29 | } 30 | params = ( 31 | ("id", "dsu_paulsign:sign"), 32 | ("operation", "qiandao"), 33 | ("infloat", "1"), 34 | ("inajax", "1"), 35 | ) 36 | formhash = re.findall(r"bbs_formhash=(.*?);", cookie)[0] 37 | data = {"formhash": formhash, "qdxq": "kx", "qdmode": "1", "todaysay": "努力奋斗"} 38 | response = requests.post( 39 | url="https://www.oneplusbbs.com/plugin.php", headers=headers, params=params, data=data 40 | ).text 41 | msg = re.findall(r'
(.*?)
', response, re.S) 42 | msg = msg[0].strip() if msg else "Cookie 可能过期" 43 | return msg 44 | 45 | @staticmethod 46 | def draw(cookie): 47 | headers = { 48 | "Accept": "application/json, text/javascript, */*; q=0.01", 49 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.57", 50 | "X-Requested-With": "XMLHttpRequest", 51 | "Origin": "https://www.oneplusbbs.com", 52 | "Referer": "https://www.oneplusbbs.com/plugin-choujiang.html", 53 | "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,fr;q=0.5,pl;q=0.4", 54 | "cookie": cookie, 55 | } 56 | params = ( 57 | ("id", "choujiang"), 58 | ("do", "draw"), 59 | ) 60 | sum_list = [] 61 | success_count = 0 62 | error_count = 0 63 | for i in range(10): 64 | try: 65 | data = requests.post(url="https://www.oneplusbbs.com/plugin.php", headers=headers, params=params).json() 66 | if data["ret"] != "": 67 | ret_map = { 68 | "2": 18, 69 | "4": 188, 70 | "5": 88, 71 | "7": 8, 72 | } 73 | ret = data["ret"] 74 | sum_list.append(ret_map.get(ret, 0)) 75 | one_msg = data["msg"] 76 | if str(ret) in ["-1", "-6", "-7"]: 77 | break 78 | else: 79 | success_count += 1 80 | else: 81 | error_count += 1 82 | one_msg = "抽奖失败" 83 | except Exception as e: 84 | one_msg = f"抽奖失败: {e}" 85 | error_count += 1 86 | print(f"第{i + 1}次抽奖结果:" + str(one_msg)) 87 | time.sleep(5) 88 | msg = f"成功抽奖 {success_count} 次" 89 | draw_msg = [ 90 | {"name": "抽奖信息", "value": str(msg)}, 91 | {"name": "抽奖结果", "value": f"获得 {sum(sum_list) - success_count * 10} 加油"}, 92 | ] 93 | return draw_msg 94 | 95 | def main(self): 96 | cookie = self.check_item.get("cookie") 97 | bbs_uname = re.findall(r"bbs_uname=(.*?);", cookie) 98 | bbs_uname = bbs_uname[0].split("%7C")[0] if bbs_uname else "未获取到账号信息" 99 | try: 100 | bbs_uname = parse.unquote(bbs_uname) 101 | except Exception as e: 102 | print(f"bbs_uname 转换失败: {e}") 103 | bbs_uname = bbs_uname 104 | sign_msg = self.sign(cookie=cookie) 105 | draw_msg = self.draw(cookie=cookie) 106 | msg = [ 107 | {"name": "帐号信息", "value": f"{bbs_uname}"}, 108 | {"name": "签到信息", "value": f"{sign_msg}"}, 109 | ] + draw_msg 110 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 111 | return msg 112 | 113 | 114 | @check(run_script_name="一加手机社区官方论坛", run_script_expression="ONEPLUSBBS") 115 | def main(*args, **kwargs): 116 | return OnePlusBBS(check_item=kwargs.get("value")).main() 117 | 118 | 119 | if __name__ == "__main__": 120 | main() 121 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_picacomic.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('哔咔漫画'); 4 | """ 5 | from utils import check 6 | import hashlib 7 | import hmac 8 | import json 9 | import os 10 | import random 11 | import string 12 | import time 13 | 14 | import requests 15 | 16 | 17 | class Picacomic: 18 | name = "哔咔漫画" 19 | 20 | def __init__(self, check_item): 21 | self.check_item = check_item 22 | 23 | @staticmethod 24 | def generate_headers(path: str, data: dict = None, token: str = None): 25 | api_key = "C69BAF41DA5ABD1FFEDC6D2FEA56B" 26 | api_secret = "~d}$Q7$eIni=V)9\\RK/P.RM4;9[7|@/CA}b~OW!3?EV`:<>M7pddUBL5n|0/*Cn" 27 | headers = { 28 | "api-key": api_key, 29 | "accept": "application/vnd.picacomic.com.v1+json", 30 | "app-channel": "2", 31 | "app-version": "2.2.1.2.3.3", 32 | "app-uuid": "defaultUuid", 33 | "app-platform": "android", 34 | "app-build-version": "44", 35 | "User-Agent": "okhttp/3.8.1", 36 | "image-quality": "original", 37 | } 38 | current_time = str(int(time.time())) 39 | nonce = "".join(random.choices(string.ascii_lowercase + string.digits, k=32)) 40 | raw = path + current_time + nonce + "POST" + api_key 41 | raw = raw.lower() 42 | h = hmac.new(api_secret.encode(), digestmod=hashlib.sha256) 43 | h.update(raw.encode()) 44 | signature = h.hexdigest() 45 | headers["time"] = current_time 46 | headers["nonce"] = nonce 47 | headers["signature"] = signature 48 | if data is not None: 49 | headers["Content-Type"] = "application/json; charset=UTF-8" 50 | if token is not None: 51 | headers["authorization"] = token 52 | return headers 53 | 54 | def sign(self, email, password): 55 | try: 56 | data = {"email": email, "password": password} 57 | sign_headers = self.generate_headers(path="auth/sign-in", data=data) 58 | sign_response = requests.post( 59 | url="https://picaapi.picacomic.com/auth/sign-in", 60 | data=json.dumps({"email": "sitoi", "password": "123456st"}), 61 | headers=sign_headers, 62 | timeout=60, 63 | ).json() 64 | token = sign_response.get("data", {}).get("token") 65 | punch_headers = self.generate_headers(path="users/punch-in", token=token) 66 | response = requests.post( 67 | url="https://picaapi.picacomic.com/users/punch-in", headers=punch_headers, timeout=60 68 | ).json() 69 | if response.get("data", {}).get("res", {}).get("status", {}) == "ok": 70 | msg = "打卡成功" 71 | else: 72 | msg = "重复签到" 73 | except Exception as e: 74 | msg = str(e) 75 | return msg 76 | 77 | def main(self): 78 | email = self.check_item.get("email") 79 | password = self.check_item.get("password") 80 | sign_msg = self.sign(email=email, password=password) 81 | msg = [ 82 | {"name": "帐号信息", "value": f"{email}"}, 83 | {"name": "签到信息", "value": f"{sign_msg}"}, 84 | ] 85 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 86 | return msg 87 | 88 | 89 | @check(run_script_name="哔咔漫画", run_script_expression="PICACOMIC") 90 | def main(*args, **kwargs): 91 | return Picacomic(check_item=kwargs.get("value")).main() 92 | 93 | 94 | if __name__ == "__main__": 95 | main() 96 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_smzdm.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | cron: 30 8 * * * 4 | new Env('什么值得买'); 5 | """ 6 | import requests 7 | from requests import utils 8 | 9 | from utils import check 10 | 11 | 12 | class Smzdm(object): 13 | def __init__(self, check_item): 14 | self.check_item = check_item 15 | 16 | @staticmethod 17 | def sign(session): 18 | try: 19 | current = session.get(url="https://zhiyou.smzdm.com/user/info/jsonp_get_current").json() 20 | if current["checkin"]["has_checkin"]: 21 | msg = [ 22 | {"name": "账号信息", "value": current.get("nickname", "")}, 23 | {"name": "目前积分", "value": current.get("point", "")}, 24 | {"name": "当前经验", "value": current.get("exp", "")}, 25 | {"name": "当前金币", "value": current.get("gold", "")}, 26 | {"name": "碎银子数", "value": current.get("silver", "")}, 27 | {"name": "当前威望", "value": current.get("prestige", "")}, 28 | {"name": "当前等级", "value": current.get("level", "")}, 29 | {"name": "已经签到", "value": f"{current.get('checkin', {}).get('daily_checkin_num', '')} 天"}, 30 | ] 31 | else: 32 | response = session.get(url="https://zhiyou.smzdm.com/user/checkin/jsonp_checkin").json().get("data", {}) 33 | msg = [ 34 | {"name": "账号信息", "value": current.get("nickname", "")}, 35 | {"name": "目前积分", "value": current.get("point", "")}, 36 | {"name": "增加积分", "value": current.get("add_point", "")}, 37 | {"name": "当前经验", "value": current.get("exp", "")}, 38 | {"name": "当前金币", "value": current.get("gold", "")}, 39 | {"name": "当前威望", "value": current.get("prestige", "")}, 40 | {"name": "当前等级", "value": current.get("rank", "")}, 41 | {"name": "已经签到", "value": f"{response.get('checkin_num', {})} 天"}, 42 | ] 43 | except Exception as e: 44 | msg = [ 45 | {"name": "签到信息", "value": "签到失败"}, 46 | {"name": "错误信息", "value": str(e)}, 47 | ] 48 | return msg 49 | 50 | def main(self): 51 | smzdm_cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 52 | session = requests.session() 53 | requests.utils.add_dict_to_cookiejar(session.cookies, smzdm_cookie) 54 | session.headers.update( 55 | { 56 | "Accept": "*/*", 57 | "Accept-Encoding": "gzip, deflate, br", 58 | "Accept-Language": "zh-CN,zh;q=0.9", 59 | "Connection": "keep-alive", 60 | "Host": "zhiyou.smzdm.com", 61 | "Referer": "https://www.smzdm.com/", 62 | "Sec-Fetch-Dest": "script", 63 | "Sec-Fetch-Mode": "no-cors", 64 | "Sec-Fetch-Site": "same-site", 65 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36", 66 | } 67 | ) 68 | msg = self.sign(session=session) 69 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 70 | return msg 71 | 72 | 73 | @check(run_script_name="什么值得买",run_script_expression="smzdm|什么值得买") 74 | def main(*args, **kwargs): 75 | return Smzdm(check_item=kwargs.get("value")).main() 76 | 77 | 78 | if __name__ == "__main__": 79 | main() -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_tieba.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('百度贴吧'); 4 | """ 5 | import hashlib 6 | import json 7 | import re 8 | 9 | import requests 10 | from requests import utils 11 | 12 | from utils import check 13 | 14 | 15 | class Tieba(): 16 | name = "百度贴吧" 17 | 18 | def __init__(self, check_item): 19 | self.check_item = check_item 20 | 21 | @staticmethod 22 | def login_info(session): 23 | return session.get(url="https://zhidao.baidu.com/api/loginInfo").json() 24 | 25 | def valid(self, session): 26 | try: 27 | content = session.get(url="https://tieba.baidu.com/dc/common/tbs") 28 | except Exception as e: 29 | return False, f"登录验证异常,错误信息: {e}" 30 | data = json.loads(content.text) 31 | if data["is_login"] == 0: 32 | return False, "登录失败,cookie 异常" 33 | tbs = data["tbs"] 34 | user_name = self.login_info(session=session)["userName"] 35 | return tbs, user_name 36 | 37 | @staticmethod 38 | def tieba_list_more(session): 39 | content = session.get(url="https://tieba.baidu.com/f/like/mylike?&pn=1", timeout=(5, 20), allow_redirects=False) 40 | try: 41 | pn = int(re.match(r".*/f/like/mylike\?&pn=(.*?)\">尾页.*", content.text, re.S | re.I).group(1)) 42 | except Exception as e: 43 | pn = 1 44 | next_page = 1 45 | pattern = re.compile(r".*?") 46 | while next_page <= pn: 47 | tbname = pattern.findall(content.text) 48 | for x in tbname: 49 | yield x 50 | next_page += 1 51 | content = session.get( 52 | url=f"https://tieba.baidu.com/f/like/mylike?&pn={next_page}", timeout=(5, 20), allow_redirects=False 53 | ) 54 | 55 | def get_tieba_list(self, session): 56 | tieba_list = list(self.tieba_list_more(session=session)) 57 | return tieba_list 58 | 59 | @staticmethod 60 | def sign(session, tb_name_list, tbs): 61 | success_count, error_count, exist_count, shield_count = 0, 0, 0, 0 62 | for tb_name in tb_name_list: 63 | md5 = hashlib.md5(f"kw={tb_name}tbs={tbs}tiebaclient!!!".encode("utf-8")).hexdigest() 64 | data = {"kw": tb_name, "tbs": tbs, "sign": md5} 65 | try: 66 | response = session.post(url="https://c.tieba.baidu.com/c/c/forum/sign", data=data,verify=False).json() 67 | if response["error_code"] == "0": 68 | success_count += 1 69 | elif response["error_code"] == "160002": 70 | exist_count += 1 71 | elif response["error_code"] == "340006": 72 | shield_count += 1 73 | else: 74 | error_count += 1 75 | except Exception as e: 76 | print(f"贴吧 {tb_name} 签到异常,原因{str(e)}") 77 | msg = [ 78 | {"name": "贴吧总数", "value": len(tb_name_list)}, 79 | {"name": "签到成功", "value": success_count}, 80 | {"name": "已经签到", "value": exist_count}, 81 | {"name": "被屏蔽的", "value": shield_count}, 82 | {"name": "签到失败", "value": error_count}, 83 | ] 84 | return msg 85 | 86 | def main(self): 87 | tieba_cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 88 | session = requests.session() 89 | requests.utils.add_dict_to_cookiejar(session.cookies, tieba_cookie) 90 | session.headers.update({"Referer": "https://www.baidu.com/"}) 91 | tbs, user_name = self.valid(session=session) 92 | if tbs: 93 | tb_name_list = self.get_tieba_list(session=session) 94 | msg = self.sign(session=session, tb_name_list=tb_name_list, tbs=tbs) 95 | msg = [{"name": "帐号信息", "value": user_name}] + msg 96 | else: 97 | msg = [ 98 | {"name": "帐号信息", "value": user_name}, 99 | {"name": "签到信息", "value": "Cookie 可能过期"}, 100 | ] 101 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 102 | return msg 103 | 104 | 105 | @check(run_script_name="百度贴吧", run_script_expression="tieba") 106 | def main(*args, **kwargs): 107 | return Tieba(check_item=kwargs.get("value")).main() 108 | 109 | 110 | if __name__ == "__main__": 111 | main() 112 | 113 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_unicom.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('联通营业厅'); 4 | """ 5 | import base64 6 | import random 7 | import re 8 | import time 9 | 10 | import requests 11 | import rsa 12 | 13 | from utils import check 14 | 15 | 16 | class UniCom: 17 | name = "联通营业厅" 18 | 19 | def __init__(self, check_item): 20 | self.check_item = check_item 21 | 22 | @staticmethod 23 | def str2key(s): 24 | b_str = base64.b64decode(s) 25 | if len(b_str) < 162: 26 | return False 27 | hex_str = "" 28 | for x in b_str: 29 | h = hex(x)[2:] 30 | h = h.rjust(2, "0") 31 | hex_str += h 32 | m_start = 29 * 2 33 | e_start = 159 * 2 34 | m_len = 128 * 2 35 | e_len = 3 * 2 36 | modulus = hex_str[m_start: m_start + m_len] 37 | exponent = hex_str[e_start: e_start + e_len] 38 | return modulus, exponent 39 | 40 | @staticmethod 41 | def encryption(message, key): 42 | modulus = int(key[0], 16) 43 | exponent = int(key[1], 16) 44 | rsa_pubkey = rsa.PublicKey(modulus, exponent) 45 | crypto = rsa.encrypt(message, rsa_pubkey) 46 | b64str = base64.b64encode(crypto) 47 | return b64str 48 | 49 | def login(self, mobile, password, app_id): 50 | session = requests.Session() 51 | pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc+CZK9bBA9IU+gZUOc6FUGu7yO9WpTNB0PzmgFBh96Mg1WrovD1oqZ+eIF4LjvxKXGOdI79JRdve9NPhQo07+uqGQgE4imwNnRx7PFtCRryiIEcUoavuNtuRVoBAm6qdB0SrctgaqGfLgKvZHOnwTjyNqjBUxzMeQlEC2czEMSwIDAQAB" 52 | key = self.str2key(pubkey) 53 | mobile = self.encryption(str.encode(mobile), key) 54 | password = self.encryption(str.encode(password), key) 55 | flag = False 56 | cookies = { 57 | "c_sfbm": "234g_00", 58 | "logHostIP": "null", 59 | "route": "cc3839c658dd60cb7c25f6c2fe6eb964", 60 | "channel": "GGPD", 61 | "city": "076|776", 62 | "devicedId": "B97CDE2A-D435-437D-9FEC-5D821A012972", 63 | "mobileService1": "ProEsSI6SM4DbWhaeVsPtve9pu7VWz0m94giTHkPBl40Gx8nebgV!-1027473388", 64 | "mobileServiceAll": "a92d76b26705a45a087027f893c70618", 65 | } 66 | 67 | headers = { 68 | "Host": "m.client.10010.com", 69 | "Accept": "/", 70 | "Content-Type": "application/x-www-form-urlencoded", 71 | "Connection": "keep-alive", 72 | "User-Agent": "ChinaUnicom4.x/3.0 CFNetwork/1197 Darwin/20.0.0", 73 | "Accept-Language": "zh-cn", 74 | "Accept-Encoding": "deflate, br", 75 | "Content-Length": "891", 76 | } 77 | 78 | data = { 79 | "reqtime": round(time.time() * 1000), 80 | "simCount": "1", 81 | "version": "iphone_c@8.0004", 82 | "mobile": mobile, 83 | "netWay": "wifi", 84 | "isRemberPwd": "false", 85 | "appId": app_id, 86 | "deviceId": "b61f7efcba733583170df52d8f2f9f87521b3844d01ccbc774bbfa379eaeb3fa", 87 | "pip": "192.168.1.4", 88 | "password": password, 89 | "deviceOS": "14.0.1", 90 | "deviceBrand": "iphone", 91 | "deviceModel": "iPad", 92 | "remark4": "", 93 | "keyVersion": "", 94 | "deviceCode": "B97CDE2A-D435-437D-9FEC-5D821A012972", 95 | } 96 | 97 | response = session.post( 98 | url="https://m.client.10010.com/mobileService/login.htm", headers=headers, cookies=cookies, data=data 99 | ) 100 | response.encoding = "utf-8" 101 | try: 102 | result = response.json() 103 | if result["code"] == "0": 104 | login_msg = {"name": "账号信息", "value": result["default"][:4] + "xxxx" + result["default"][-4:]} 105 | session.headers.update( 106 | { 107 | "User-Agent": "Mozilla/5.0 (Linux; Android 10; RMX1901 Build/QKQ1.190918.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.186 Mobile Safari/537.36; unicom{version:android@8.0100,desmobile:" 108 | + str(mobile) 109 | + "};devicetype{deviceBrand:Realme,deviceModel:RMX1901};{yw_code:}" 110 | } 111 | ) 112 | flag = True 113 | else: 114 | login_msg = {"name": "账号信息", "value": result["dsc"]} 115 | except Exception as e: 116 | login_msg = {"name": "账号信息", "value": str(e)} 117 | if flag: 118 | return session, login_msg 119 | else: 120 | return False, login_msg 121 | 122 | @staticmethod 123 | def get_encryptmobile(session): 124 | page = session.post(url="https://m.client.10010.com/dailylottery/static/textdl/userLogin") 125 | page.encoding = "utf-8" 126 | match = re.search(r"encryptmobile=\w+", page.text, flags=0) 127 | user_number = match.group(0)[14:] 128 | return user_number 129 | 130 | # 每日签到 131 | @staticmethod 132 | def daily_daysign(session, mobile): 133 | try: 134 | session.headers.update({"referer": "https://img.client.10010.com/activitys/member/index.html"}) 135 | param = f"yw_code=&desmobile={mobile}&version=android@$8.0100" 136 | session.get(url="https://act.10010.com/SigninApp/signin/querySigninActivity.htm?" + param) 137 | session.headers.update( 138 | {"referer": "https://act.10010.com/SigninApp/signin/querySigninActivity.htm?" + param} 139 | ) 140 | day_sign = session.post(url="https://act.10010.com/SigninApp/signin/daySign") 141 | day_sign.encoding = "utf-8" 142 | session.post(url="https://act.10010.com/SigninApp/signin/todaySign") 143 | session.post(url="https://act.10010.com/SigninApp/signin/addIntegralDA") 144 | session.post(url="https://act.10010.com/SigninApp/signin/getContinuous") 145 | session.post(url="https://act.10010.com/SigninApp/signin/getIntegral") 146 | session.post(url="https://act.10010.com/SigninApp/signin/getGoldTotal") 147 | session.headers.pop("referer") 148 | res = day_sign.json() 149 | if res["status"] == "0000": 150 | return {"name": "每日签到", "value": f"打卡成功!"} 151 | elif res["status"] == "0002": 152 | return {"name": "每日签到", "value": res["msg"]} 153 | except Exception as e: 154 | return {"name": "每日签到", "value": f"错误,原因为: {e}"} 155 | 156 | def daily_lottery(self, session): 157 | daily_lottery_msg = [] 158 | try: 159 | numjsp = self.get_encryptmobile(session=session) 160 | session.post(url="https://m.client.10010.com/mobileservicequery/customerService/share/defaultShare.htm") 161 | session.get( 162 | url="https://m.client.10010.com/dailylottery/static/doubleball/firstpage?encryptmobile=" + numjsp 163 | ) 164 | session.get( 165 | url="https://m.client.10010.com/dailylottery/static/outdailylottery/getRandomGoodsAndInfo?areaCode=076" 166 | ) 167 | session.get( 168 | url="https://m.client.10010.com/dailylottery/static/active/findActivityInfo?areaCode=076&groupByType=&mobile=" 169 | + numjsp 170 | ) 171 | for i in range(3): 172 | luck = session.post( 173 | url="https://m.client.10010.com/dailylottery/static/doubleball/choujiang?usernumberofjsp=" + numjsp 174 | ) 175 | luck.encoding = "utf-8" 176 | res = luck.json() 177 | daily_lottery_msg.append(res["RspMsg"]) 178 | except Exception as e: 179 | daily_lottery_msg.append(str(e)) 180 | return {"name": "天天抽奖", "value": ";".join(daily_lottery_msg)} 181 | 182 | def points_lottery(self, session): 183 | try: 184 | numjsp = self.get_encryptmobile(session=session) 185 | one_free = session.post( 186 | url="https://m.client.10010.com/dailylottery/static/integral/choujiang?usernumberofjsp=" + numjsp 187 | ) 188 | one_free.encoding = "utf-8" 189 | res = one_free.json() 190 | jifeng_msg = res["RspMsg"] 191 | except Exception as e: 192 | jifeng_msg = str(e) 193 | return {"name": "积分抽奖", "value": jifeng_msg} 194 | 195 | @staticmethod 196 | def game_signin(session, mobile): 197 | data = {"methodType": "iOSIntegralGet", "gameLevel": "1", "deviceType": "iOS"} 198 | try: 199 | session.get( 200 | url=f"https://img.client.10010.com/gametask/index.html?yw_code=&desmobile={mobile}&version=android@8.0100" 201 | ) 202 | time.sleep(2) 203 | headers = { 204 | "origin": "https://img.client.10010.com", 205 | "referer": f"https://img.client.10010.com/gametask/index.html?yw_code=&desmobile={mobile}&version=android@8.0100", 206 | } 207 | session.headers.update(headers) 208 | game_center_exp = session.post(url="https://m.client.10010.com/producGameApp", data=data) 209 | game_center_exp.encoding = "utf-8" 210 | res = game_center_exp.json() 211 | session.headers.pop("referer") 212 | session.headers.pop("origin") 213 | time.sleep(1) 214 | if res["code"] == "0000": 215 | return {"name": "游戏频道打卡", "value": f"获得{res['integralNum']}积分"} 216 | else: 217 | return {"name": "游戏频道打卡", "value": res["msg"]} 218 | except Exception as e: 219 | return {"name": "游戏频道打卡", "value": f"错误,原因为: {e}"} 220 | 221 | @staticmethod 222 | def daily_integral_100(session): 223 | data = {"from": random.choice("123456789") + "".join(random.choice("0123456789") for i in range(10))} 224 | try: 225 | integral = session.post( 226 | url="https://m.client.10010.com/welfare-mall-front/mobile/integral/gettheintegral/v1", data=data 227 | ) 228 | integral.encoding = "utf-8" 229 | res = integral.json() 230 | return {"name": "100定向积分", "value": res["msg"]} 231 | except Exception as e: 232 | return {"name": "100定向积分", "value": str(e)} 233 | 234 | @staticmethod 235 | def game_dongao(session): 236 | data = {"from": random.choice("123456789") + "".join(random.choice("0123456789") for i in range(10))} 237 | trance = [600, 300, 300, 300, 300, 300, 300] 238 | try: 239 | dongao_point = session.post( 240 | url="https://m.client.10010.com/welfare-mall-front/mobile/winterTwo/getIntegral/v1", data=data 241 | ) 242 | dongao_point.encoding = "utf-8" 243 | res1 = dongao_point.json() 244 | dongao_num = session.post( 245 | url="https://m.client.10010.com/welfare-mall-front/mobile/winterTwo/winterTwoShop/v1", data=data 246 | ) 247 | dongao_num.encoding = "utf-8" 248 | res2 = dongao_num.json() 249 | if res1["resdata"]["code"] == "0000": 250 | return { 251 | "name": "冬奥积分活动", 252 | "value": res1["resdata"]["desc"] + "," + str(trance[int(res2["resdata"]["signDays"])]) + "积分", 253 | } 254 | 255 | else: 256 | return {"name": "冬奥积分活动", "value": res1["resdata"]["desc"] + "," + res2["resdata"]["desc"]} 257 | except Exception as e: 258 | return {"name": "冬奥积分活动", "value": str(e)} 259 | 260 | @staticmethod 261 | def get_wotree_glowlist(session): 262 | response = session.post(url="https://m.client.10010.com/mactivity/arbordayJson/index.htm") 263 | res = response.json() 264 | return res["data"]["flowChangeList"] 265 | 266 | def wo_tree(self, session): 267 | try: 268 | flow_list = self.get_wotree_glowlist(session) 269 | num = 1 270 | for flow in flow_list: 271 | # 这里会请求很长时间,发送即请求成功 272 | flag = False 273 | try: 274 | take_flow = session.get( 275 | url="https://m.client.10010.com/mactivity/flowData/takeFlow.htm?flowId=" + flow["id"], timeout=1 276 | ) 277 | take_flow.encoding = "utf-8" 278 | except Exception as e: 279 | flag = True 280 | print("【沃之树-领流量】: 4M流量 x" + str(num)) 281 | time.sleep(1) 282 | num = num + 1 283 | if flag: 284 | continue 285 | res1 = take_flow.json() 286 | if res1["code"] == "0000": 287 | print("【沃之树-领流量】: 4M流量 x" + str(num)) 288 | else: 289 | print("【沃之树-领流量】: 已领取过 x" + str(num)) 290 | time.sleep(1) 291 | num = num + 1 292 | session.post(url="https://m.client.10010.com/mactivity/arbordayJson/getChanceByIndex.htm?index=0") 293 | grow = session.post(url="https://m.client.10010.com/mactivity/arbordayJson/arbor/3/0/3/grow.htm") 294 | grow.encoding = "utf-8" 295 | res2 = grow.json() 296 | time.sleep(1) 297 | return {"name": "沃之树-浇水", "value": str(res2["data"]["addedValue"]) + "培养值"} 298 | except Exception as e: 299 | return {"name": "沃之树-浇水", "value": str(e)} 300 | 301 | @staticmethod 302 | def user_info(session): 303 | resp = session.get(url="https://m.client.10010.com/mobileService/home/queryUserInfoSeven.htm?showType=3") 304 | user_info_msg = [] 305 | try: 306 | for one in resp.json().get("data", {}).get("dataList", []): 307 | user_info_msg.append({"name": one.get("remainTitle"), "value": one.get("number") + one.get("unit")}) 308 | except Exception as e: 309 | print(e) 310 | return user_info_msg 311 | 312 | def main(self): 313 | mobile = self.check_item.get("mobile") 314 | password = self.check_item.get("password") 315 | app_id = self.check_item.get("app_id") 316 | session, login_msg = self.login(mobile=mobile, password=password, app_id=app_id) 317 | if session: 318 | daily_daysign_msg = self.daily_daysign(session=session, mobile=mobile) 319 | daily_integral_100_msg = self.daily_integral_100(session=session) 320 | daily_lottery_msg = self.daily_lottery(session=session) 321 | game_dongao_msg = self.game_dongao(session=session) 322 | game_signin_msg = self.game_signin(session=session, mobile=mobile) 323 | points_lottery_msg = self.points_lottery(session=session) 324 | wo_tree_msg = self.wo_tree(session=session) 325 | user_info_msg = self.user_info(session=session) 326 | msg = [ 327 | login_msg, 328 | daily_daysign_msg, 329 | daily_integral_100_msg, 330 | daily_lottery_msg, 331 | game_dongao_msg, 332 | game_signin_msg, 333 | points_lottery_msg, 334 | wo_tree_msg, 335 | ] + user_info_msg 336 | else: 337 | msg = [login_msg] 338 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 339 | return msg 340 | 341 | 342 | @check(run_script_name="联通营业厅", run_script_expression="UNICOM") 343 | def main(*args, **kwargs): 344 | return UniCom(check_item=kwargs.get("value")).main() 345 | 346 | 347 | if __name__ == "__main__": 348 | main() 349 | 350 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_v2ex.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('V2EX 论坛'); 4 | """ 5 | import re 6 | 7 | import requests 8 | import urllib3 9 | from requests import utils 10 | 11 | from utils import check 12 | 13 | urllib3.disable_warnings() 14 | 15 | 16 | class V2ex: 17 | name = "V2EX 论坛" 18 | 19 | def __init__(self, check_item): 20 | self.check_item = check_item 21 | 22 | @staticmethod 23 | def sign(session): 24 | msg = [] 25 | response = session.get(url="https://www.v2ex.com/mission/daily", verify=False) 26 | pattern = ( 27 | r"" 29 | ) 30 | urls = re.findall(pattern=pattern, string=response.text) 31 | url = urls[0] if urls else None 32 | if url is None: 33 | return "cookie 可能过期" 34 | elif url != "/balance": 35 | headers = {"Referer": "https://www.v2ex.com/mission/daily"} 36 | data = {"once": url.split("=")[-1]} 37 | _ = session.get(url="https://www.v2ex.com" + url, verify=False, headers=headers, params=data) 38 | response = session.get(url="https://www.v2ex.com/balance", verify=False) 39 | total = re.findall( 40 | pattern=r"(\d+\.\d+)", string=response.text 41 | ) 42 | total = total[0] if total else "签到失败" 43 | today = re.findall(pattern=r'(.*?)', string=response.text) 44 | today = today[0] if today else "签到失败" 45 | username = re.findall(pattern=r"(.*?)", string=response.text) 46 | username = username[0] if username else "用户名获取失败" 47 | msg += [ 48 | {"name": "帐号信息", "value": username}, 49 | {"name": "今日签到", "value": today}, 50 | {"name": "帐号余额", "value": total}, 51 | ] 52 | response = session.get(url="https://www.v2ex.com/mission/daily", verify=False) 53 | data = re.findall(pattern=r"
(.*?)天
", string=response.text) 54 | data = data[0] + "天" if data else "获取连续签到天数失败" 55 | msg += [ 56 | {"name": "签到天数", "value": data}, 57 | ] 58 | return msg 59 | 60 | def main(self): 61 | cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 62 | session = requests.session() 63 | if self.check_item.get("proxy", ""): 64 | proxies = { 65 | "http": self.check_item.get("proxy", ""), 66 | "https": self.check_item.get("proxy", ""), 67 | } 68 | session.proxies.update(proxies) 69 | requests.utils.add_dict_to_cookiejar(session.cookies, cookie) 70 | session.headers.update( 71 | { 72 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66", 73 | "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 74 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", 75 | } 76 | ) 77 | msg = self.sign(session=session) 78 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 79 | return msg 80 | 81 | 82 | @check(run_script_name="V2EX 论坛", run_script_expression="V2EX") 83 | def main(*args, **kwargs): 84 | return V2ex(check_item=kwargs.get("value")).main() 85 | 86 | 87 | if __name__ == "__main__": 88 | main() 89 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_vqq.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('腾讯视频'); 4 | """ 5 | import re 6 | import time 7 | from urllib import parse 8 | 9 | import requests 10 | from requests import utils 11 | 12 | from utils import check 13 | 14 | 15 | class VQQ: 16 | name = "腾讯视频" 17 | 18 | def __init__(self, check_item): 19 | self.check_item = check_item 20 | 21 | @staticmethod 22 | def refresh_cookie(url, headers, cookies): 23 | login = requests.get(url=url, headers=headers, cookies=cookies) 24 | nick = re.findall(r'nick":"(.*?)"', login.text) 25 | if nick: 26 | nick = nick[0] 27 | try: 28 | nick = parse.unquote(nick) 29 | except Exception as e: 30 | print(f"nick 转换失败: {e}") 31 | else: 32 | nick = "未获取到用户" 33 | cookie = requests.utils.dict_from_cookiejar(login.cookies) 34 | return cookie, nick 35 | 36 | @staticmethod 37 | def sign_once(headers, cookies): 38 | url = "http://v.qq.com/x/bu/mobile_checkin?isDarkMode=0&uiType=REGULAR" 39 | res = requests.get(url=url, headers=headers, cookies=cookies) 40 | res.encoding = "utf8" 41 | match = re.search(r'isMultiple" />\s+(.*?)\s+<', res.text) 42 | if "isMultiple" in res.text: 43 | try: 44 | value = match.group(1) 45 | except Exception as e: 46 | print(res.text) 47 | value = "数据获取失败" 48 | msg = f"成长值x{value}" 49 | elif "Unauthorized" in res.text: 50 | msg = "cookie 失效" 51 | else: 52 | msg = "签到失败(可能已签到)\n签到失败: 自行在腾讯视频APP内登录网址签到 http://v.qq.com/x/bu/mobile_checkin (基本每周都需要手动签到一次才可以)" 53 | return msg 54 | 55 | @staticmethod 56 | def sign_twice(headers, cookies): 57 | this_time = int(round(time.time() * 1000)) 58 | url = "https://vip.video.qq.com/fcgi-bin/comm_cgi?name=hierarchical_task_system&cmd=2&_=" + str(this_time) 59 | res = requests.get(url=url, headers=headers, cookies=cookies) 60 | res.encoding = "utf8" 61 | if "Account Verify Error" in res.text: 62 | msg = "签到失败-Cookie失效" 63 | elif "Not VIP" in res.text: 64 | msg = "非会员无法签到" 65 | else: 66 | try: 67 | value = re.search('checkin_score": (.*?),', res.text).group(1) 68 | except Exception as e: 69 | print("获取成长值失败", e) 70 | value = res.text 71 | msg = f"成长值x{value}" 72 | return msg 73 | 74 | @staticmethod 75 | def tasks(headers, cookies): 76 | task_map = { 77 | "1": "观看视频60min", 78 | "3": "使用弹幕特权", 79 | "6": "使用赠片特权", 80 | "7": "使用下载特权", 81 | } 82 | task_msg_list = [] 83 | for task_id, task_name in task_map.items(): 84 | this_time = int(round(time.time() * 1000)) 85 | url = f"https://vip.video.qq.com/fcgi-bin/comm_cgi?name=spp_MissionFaHuo&cmd=4&task_id={task_id}&_=${this_time}" 86 | res = requests.get(url=url, headers=headers, cookies=cookies) 87 | res.encoding = "utf8" 88 | if "score" in res.text: 89 | msg = f"获得+10成长值" 90 | elif "已发过货" in res.text: 91 | msg = "任务已完成" 92 | elif "任务未完成" in res.text: 93 | msg = "任务未完成,需手动完成任务" 94 | else: 95 | msg = res.text 96 | task_msg_list.append({"name": task_name, "value": msg}) 97 | time.sleep(1) 98 | return task_msg_list 99 | 100 | def main(self): 101 | auth_refresh = self.check_item.get("auth_refresh") 102 | if not auth_refresh: 103 | return "参数错误: 缺少 auth_refresh 参数,请查看配置文档" 104 | cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 105 | headers = { 106 | "Referer": "https://v.qq.com", 107 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36", 108 | } 109 | login_cookie, nick = self.refresh_cookie(url=auth_refresh, headers=headers, cookies=cookie) 110 | if login_cookie.get("main_login") == "qq": 111 | cookie["vqq_vusession"] = login_cookie.get("vqq_vusession") 112 | else: 113 | cookie["vusession"] = login_cookie.get("vusession") 114 | cookie["access_token"] = login_cookie.get("access_token") 115 | sign_once_msg = self.sign_once(headers=headers, cookies=cookie) 116 | sign_twice_msg = self.sign_twice(headers=headers, cookies=cookie) 117 | task_msg = self.tasks(headers=headers, cookies=cookie) 118 | msg = [ 119 | {"name": "账号信息", "value": nick}, 120 | {"name": "签到奖励1", "value": sign_once_msg}, 121 | {"name": "签到奖励2", "value": sign_twice_msg}, 122 | ] + task_msg 123 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 124 | return msg 125 | 126 | 127 | @check(run_script_name="腾讯视频",run_script_expression="VQQ") 128 | def main(*args, **kwargs): 129 | return VQQ(check_item=kwargs.get("value")).main() 130 | 131 | 132 | if __name__ == "__main__": 133 | main() 134 | 135 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_weibo.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('微博'); 4 | """ 5 | from urllib import parse 6 | 7 | import requests 8 | import urllib3 9 | 10 | from utils import check 11 | 12 | urllib3.disable_warnings() 13 | 14 | 15 | class WeiBo: 16 | name = "微博" 17 | 18 | def __init__(self, check_item): 19 | self.check_item = check_item 20 | 21 | @staticmethod 22 | def sign(token): 23 | headers = {"User-Agent": "Weibo/52588 (iPhone; iOS 14.5; Scale/3.00)"} 24 | response = requests.get( 25 | url=f"https://api.weibo.cn/2/checkin/add?c=iphone&{token}", headers=headers, verify=False 26 | ) 27 | result = response.json() 28 | if result.get("status") == 10000: 29 | msg = [ 30 | {"name": "连续签到", "value": f'{result.get("data").get("continuous")}天'}, 31 | {"name": "本次收益", "value": result.get("data").get("desc")}, 32 | ] 33 | elif result.get("errno") == 30000: 34 | msg = [ 35 | {"name": "每日签到", "value": "已签到"}, 36 | ] 37 | elif result.get("status") == 90005: 38 | msg = [ 39 | {"name": "每日签到", "value": result.get("msg")}, 40 | ] 41 | else: 42 | msg = [ 43 | {"name": "每日签到", "value": "签到失败"}, 44 | ] 45 | return msg 46 | 47 | @staticmethod 48 | def card(token): 49 | headers = {"User-Agent": "Weibo/52588 (iPhone; iOS 14.5; Scale/3.00)"} 50 | response = requests.get( 51 | url=f"https://api.weibo.cn/2/!/ug/king_act_home?c=iphone&{token}", headers=headers, verify=False 52 | ) 53 | result = response.json() 54 | if result.get("status") == 10000: 55 | nickname = result.get("data").get("user").get("nickname") 56 | msg = [ 57 | {"name": "用户昵称", "value": nickname}, 58 | {"name": "每日打卡", "value": f'{result.get("data").get("signin").get("title").split("<")[0]}天'}, 59 | {"name": "积分总计", "value": result.get("data").get("user").get("energy")}, 60 | ] 61 | else: 62 | msg = [ 63 | {"name": "每日打卡", "value": "活动过期或失效"}, 64 | ] 65 | return msg 66 | 67 | @staticmethod 68 | def pay(token): 69 | headers = { 70 | "Accept-Encoding": "gzip, deflate", 71 | "Connection": "keep-alive", 72 | "Content-Type": "application/x-www-form-urlencoded", 73 | "Host": "pay.sc.weibo.com", 74 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Weibo (iPhone10,1__weibo__11.2.1__iphone__os14.5)", 75 | } 76 | data = token + "&lang=zh_CN&wm=3333_2001" 77 | response = requests.post( 78 | url=f"https://pay.sc.weibo.com/aj/mobile/home/welfare/signin/do", headers=headers, data=data, verify=False 79 | ) 80 | try: 81 | result = response.json() 82 | if result.get("status") == 1: 83 | msg = [ 84 | {"name": "微博钱包", "value": f'{result.get("score")} 积分'}, 85 | ] 86 | elif result.get("status") == 2: 87 | msg = [ 88 | {"name": "微博钱包", "value": f"已签到"}, 89 | ] 90 | info_response = requests.post( 91 | url="https://pay.sc.weibo.com/api/client/sdk/app/balance", headers=headers, data=data 92 | ) 93 | info_result = info_response.json() 94 | msg += [ 95 | {"name": "当前现金", "value": f"{info_result.get('data').get('balance')} 元"}, 96 | ] 97 | else: 98 | msg = [ 99 | {"name": "微博钱包", "value": f"Cookie失效"}, 100 | ] 101 | return msg 102 | except Exception as e: 103 | msg = [ 104 | {"name": "微博钱包", "value": f"Cookie失效"}, 105 | ] 106 | return msg 107 | 108 | def main(self): 109 | url = self.check_item.get("url") 110 | query_dict = dict(parse.parse_qsl(parse.urlsplit(url).query)) 111 | token = "&".join([f"{key}={value}" for key, value in query_dict.items() if key in ["from", "uid", "s", "gsid"]]) 112 | sign_msg = self.sign(token=token) 113 | card_msg = self.card(token=token) 114 | pay_msg = self.pay(token=token) 115 | msg = sign_msg + card_msg + pay_msg 116 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 117 | return msg 118 | 119 | 120 | @check(run_script_name="微博", run_script_expression="WEIBO") 121 | def main(*args, **kwargs): 122 | return WeiBo(check_item=kwargs.get("value")).main() 123 | 124 | 125 | if __name__ == "__main__": 126 | main() 127 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_wzyd.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('王者营地'); 4 | """ 5 | from urllib import parse 6 | 7 | import requests 8 | 9 | from utils import check 10 | 11 | 12 | class WZYD: 13 | name = "王者营地" 14 | 15 | def __init__(self, check_item): 16 | self.check_item = check_item 17 | 18 | @staticmethod 19 | def sign(data): 20 | response = requests.post(url="https://ssl.kohsocialapp.qq.com:10001/play/h5sign", data=data).json() 21 | try: 22 | if response["result"] == 0: 23 | msg = "签到成功" 24 | else: 25 | msg = response["returnMsg"] 26 | except: 27 | msg = "请求失败,请检查接口" 28 | return msg 29 | 30 | def main(self): 31 | wzyd_data = self.check_item.get("data") 32 | data = {k: v[0] for k, v in parse.parse_qs(wzyd_data).items()} 33 | try: 34 | user_id = data.get("userId", "") 35 | except Exception as e: 36 | print(f"获取账号信息失败: {e}") 37 | user_id = "未获取到账号信息" 38 | sign_msg = self.sign(data=data) 39 | msg = [ 40 | {"name": "帐号信息", "value": user_id}, 41 | {"name": "签到信息", "value": sign_msg}, 42 | ] 43 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 44 | return msg 45 | 46 | 47 | @check(run_script_name="王者营地",run_script_expression="WZYD") 48 | def main(*args, **kwargs): 49 | return WZYD(check_item=kwargs.get("value")).main() 50 | 51 | 52 | if __name__ == "__main__": 53 | main() 54 | 55 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_youdao.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('有道云笔记'); 4 | """ 5 | from utils import check 6 | import json 7 | import os 8 | 9 | import requests 10 | 11 | 12 | class YouDao: 13 | name = "有道云笔记" 14 | 15 | def __init__(self, check_item): 16 | self.check_item = check_item 17 | 18 | @staticmethod 19 | def sign(cookies): 20 | ad_space = 0 21 | refresh_cookies_res = requests.get("http://note.youdao.com/login/acc/pe/getsess?product=YNOTE", cookies=cookies) 22 | cookies = dict(refresh_cookies_res.cookies) 23 | url = "https://note.youdao.com/yws/api/daupromotion?method=sync" 24 | res = requests.post(url=url, cookies=cookies) 25 | if "error" not in res.text: 26 | checkin_response = requests.post( 27 | url="https://note.youdao.com/yws/mapi/user?method=checkin", cookies=cookies 28 | ) 29 | for i in range(3): 30 | ad_response = requests.post( 31 | url="https://note.youdao.com/yws/mapi/user?method=adRandomPrompt", cookies=cookies 32 | ) 33 | ad_space += ad_response.json().get("space", 0) // 1048576 34 | if "reward" in res.text: 35 | sync_space = res.json().get("rewardSpace", 0) // 1048576 36 | checkin_space = checkin_response.json().get("space", 0) // 1048576 37 | space = sync_space + checkin_space + ad_space 38 | youdao_message = "+{0}M".format(space) 39 | else: 40 | youdao_message = "获取失败" 41 | else: 42 | youdao_message = "Cookie 可能过期" 43 | return youdao_message 44 | 45 | def main(self): 46 | youdao_cookie = {item.split("=")[0]: item.split("=")[1] for item in self.check_item.get("cookie").split("; ")} 47 | try: 48 | ynote_pers = youdao_cookie.get("YNOTE_PERS", "") 49 | uid = ynote_pers.split("||")[-2] 50 | except Exception as e: 51 | print(f"获取账号信息失败: {e}") 52 | uid = "未获取到账号信息" 53 | msg = self.sign(cookies=youdao_cookie) 54 | msg = [ 55 | {"name": "帐号信息", "value": uid}, 56 | {"name": "获取空间", "value": msg}, 57 | ] 58 | msg = "\n".join([f"{one.get('name')}: {one.get('value')}" for one in msg]) 59 | return msg 60 | 61 | 62 | @check(run_script_name="有道云笔记", run_script_expression="YOUDAO") 63 | def main(*args, **kwargs): 64 | return YouDao(check_item=kwargs.get("value")).main() 65 | 66 | 67 | if __name__ == "__main__": 68 | main() 69 | -------------------------------------------------------------------------------- /dailycheckin_scripts/ck_zhiyoo.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | new Env('智友邦'); 4 | """ 5 | from utils import check 6 | import json 7 | import os 8 | import re 9 | 10 | import requests 11 | import urllib3 12 | from requests import utils 13 | 14 | urllib3.disable_warnings() 15 | 16 | 17 | class ZhiYoo: 18 | name = "智友邦" 19 | 20 | def __init__(self, check_item): 21 | self.check_item = check_item 22 | 23 | @staticmethod 24 | def sign(session): 25 | response = session.get(url="http://bbs.zhiyoo.net/plugin.php?id=dsu_paulsign:sign", verify=False) 26 | formhash = re.findall(r'") 208 | print(f"获取到的账号信息为:{value}\n") 209 | num += 1 210 | try: 211 | result = func(value=value) + '\n\n' 212 | print(f"执行结果:\n{result}") 213 | push_message += result 214 | except IndexError: 215 | print("可能是示例格式被运行\n错误信息:") 216 | print(f"{traceback.format_exc()}") 217 | push_message += '' 218 | except AttributeError: 219 | print("可能是配置文件的键名出现问题\n" 220 | "例如:在此次更新中什么值得买的键名从smzdm_cookie变成了cookie\n") 221 | print(f"{traceback.format_exc()}") 222 | push_message += '' 223 | except TypeError: 224 | print(f"{traceback.format_exc()}") 225 | push_message += '' 226 | send(self.run_script_name, push_message) 227 | else: 228 | config = config_get() 229 | flag = config.get_value(self.run_script_expression) 230 | if flag is not None and flag: 231 | print(f"开始执行{self.run_script_name}") 232 | func() 233 | else: 234 | print(f"设置为不执行{self.run_script_name}") 235 | 236 | return wrapper 237 | 238 | 239 | def change_cron_new(cron_file_path="/ql/data/db/database.sqlite", repositories="yuxian158_check"): 240 | print("尝试修改定时时间") 241 | os.system(f"cp {cron_file_path} {cron_file_path}.back") 242 | con = sqlite3.connect(cron_file_path) 243 | cur = con.cursor() 244 | 245 | def change_time(time_str: str): 246 | words = re.sub("\\s+", " ", time_str).split() 247 | words[0] = str(random.randrange(60)) 248 | words[1] = str(random.randrange(22)) 249 | return " ".join(words) 250 | 251 | cur.execute("select id,name,command,schedule from Crontabs") 252 | res = cur.fetchall() 253 | for line in res: 254 | if line[2].find(repositories) != -1: 255 | sql = f" UPDATE Crontabs SET schedule = \"{change_time(line[3])}\" WHERE id = {line[0]}" 256 | print(f"任务名称 {line[1]} 修改为{sql}") 257 | cur.execute(sql) 258 | 259 | con.commit() 260 | con.close() 261 | 262 | 263 | def change_cron_old(cron_file_path="/ql/db/crontab.db", repositories="yuxian158_check"): 264 | print("尝试修改定时时间") 265 | 266 | def change_time(time_str: str): 267 | words = re.sub("\\s+", " ", time_str).split() 268 | words[0] = str(random.randrange(60)) 269 | words[1] = str(random.randrange(22)) 270 | return " ".join(words) 271 | 272 | time_str = time.strftime("%Y-%m-%d", time.localtime()) 273 | os.system(f"cp /ql/db/crontab.db /ql/db/crontab.db.{time_str}.back") 274 | lines = [] 275 | with open(cron_file_path, "r", encoding="UTF-8") as f: 276 | for i in f.readlines(): 277 | # print(record.get("command")) 278 | if i.find(repositories) != -1: 279 | record = json.loads(i) 280 | record["schedule"] = change_time(record["schedule"]) 281 | lines.append(json.dumps(record, ensure_ascii=False) + "\n") 282 | else: 283 | lines.append(i) 284 | 285 | with open(cron_file_path, "w", encoding="UTF-8") as f: 286 | f.writelines(lines) 287 | 288 | 289 | if __name__ == "__main__": 290 | pip_install() 291 | config = config_get() 292 | if config.config_path == "/ql/config/": 293 | if os.path.isfile("/ql/db/database.sqlite"): 294 | change_cron_new(cron_file_path="/ql/db/database.sqlite") 295 | else: 296 | change_cron_old() 297 | else: 298 | change_cron_new() 299 | print("修改完成请重启容器") 300 | --------------------------------------------------------------------------------