{"id":20771870,"url":"https://github.com/reajason/17wanxiaocheckin","last_synced_at":"2025-07-16T20:31:17.512Z","repository":{"id":38474792,"uuid":"275968062","full_name":"ReaJason/17wanxiaoCheckin","owner":"ReaJason","description":"完美校园健康打卡，校内打卡，理论上支持所有学校（大概...）","archived":true,"fork":false,"pushed_at":"2024-01-05T17:33:58.000Z","size":5777,"stargazers_count":403,"open_issues_count":13,"forks_count":594,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-24T13:44:03.053Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ReaJason.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-30T01:42:26.000Z","updated_at":"2025-03-12T09:57:30.000Z","dependencies_parsed_at":"2023-01-31T07:45:30.042Z","dependency_job_id":"c02bea70-db20-4c5d-a394-acee66545750","html_url":"https://github.com/ReaJason/17wanxiaoCheckin","commit_stats":{"total_commits":58,"total_committers":8,"mean_commits":7.25,"dds":"0.22413793103448276","last_synced_commit":"5b5c236487a39b6a08940a7ed3b2395b099e25a1"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ReaJason/17wanxiaoCheckin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReaJason%2F17wanxiaoCheckin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReaJason%2F17wanxiaoCheckin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReaJason%2F17wanxiaoCheckin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReaJason%2F17wanxiaoCheckin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ReaJason","download_url":"https://codeload.github.com/ReaJason/17wanxiaoCheckin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReaJason%2F17wanxiaoCheckin/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265538190,"owners_count":23784552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T12:17:32.030Z","updated_at":"2025-07-16T20:31:16.950Z","avatar_url":"https://github.com/ReaJason.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e \n\u003ch1 align=\"center\"\u003e\n🌈17wanxiaoCheckin\n\u003c/h1\u003e\n\n![](https://img.shields.io/github/stars/ReaJason/17wanxiaoCheckin-Actions?style=social \"Star数量\")\n![](https://img.shields.io/github/forks/ReaJason/17wanxiaoCheckin-Actions?style=social \"Fork数量\")\n\u003cbr\u003e\n[![](https://img.shields.io/github/license/ReaJason/17wanxiaoCheckin-Actions \"协议\")](https://github.com/ReaJason/17wanxiaoCheckin/blob/master/LICENSE)\n[![](https://img.shields.io/github/v/release/ReaJason/17wanxiaoCheckin-Actions \"release版本\")](https://github.com/ReaJason/17wanxiaoCheckin/releases)\n[![](https://github.com/ReaJason/17wanxiaoCheckin/actions/workflows/main.yml/badge.svg)](https://github.com/ReaJason/17wanxiaoCheckin/actions/workflows/main.yml)\n[![](https://github.com/ReaJason/17wanxiaoCheckin/actions/workflows/dev.yml/badge.svg)](https://github.com/ReaJason/17wanxiaoCheckin/actions/workflows/dev.yml)\n\u003c/div\u003e\n\n## ✨项目介绍\n\n\u0026emsp;\u0026emsp;伴随着疫情的到来，学校为了解在校师生的健康状况，全校师生都规定在特定的时间进行健康打卡 or 校内打卡，本项目旨在帮助使用完美校园打卡的在校师生提供帮助，每天指定时间进行自动打卡，从每天指定时间打卡的压力中解放出来，全身心地投入到社会主义建设之中去。\n\n\u0026emsp;\u0026emsp;本项目使用了 `requests`、`json5`、`pycryptodome` 第三方库，2.0 版本迎来项目重构，打卡数据错误修改方法，不再是以前的修改代码（不懂代码容易改错或无法下手），而是通过直接修改配置文件即可，**本脚本使用虚拟 id 来登录，如果使用了本脚本就不要再用手机登录 app 了，如果一定要用 app 请不要使用当前脚本**。\n\n\u0026emsp;\u0026emsp;由于完美校园就设备做了验证，只允许一个设备登录，获取本机的 device_id 可参考 [此处](https://github.com/ReaJason/17wanxiaoCheckin/wiki/%E8%8E%B7%E5%8F%96%E6%9C%AC%E6%9C%BA-device_id)\n\n\n\n## 🔰项目功能\n\n* [x] 完美校园模拟登录获取 token\n* [x] 自动获取上次提交的打卡数据，也可通过配置文件修改\n* [x] 支持健康打卡（学生打卡、教师打卡）和校内打卡\n* [x] 支持多人打卡配置，可单人自定义推送，也可统一推送\n* [x] 支持粮票签到收集，自动完成查看课表和校园头条任务\n* [x] 支持 qq 邮箱、Qmsg、Server 酱、PipeHub 推送打卡消息\n\n\n## 🎨配置文件\n\n### 💃用户配置\n\n- 打卡用户配置文件位于：`conf/user.json`\n- 整个 json 文件使用一个 `[]` 列表用来存储打卡用户数据，每一个用户占据了一个 `{}`键值对，初次修改务必填写的数据为：**phone**、**password**、**device_id**（获取方法：[蓝奏云](https://lingsiki.lanzoui.com/iQamDmt165i)，下载解压使用）、**健康打卡的开关**（根据截图判断自己属于哪一类（不一定和我截图一模一样，好看就选 1）[【1】](https://cdn.jsdelivr.net/gh/ReaJason/17wanxiaoCheckin/Pictures/one.png)、[【2】](https://cdn.jsdelivr.net/gh/ReaJason/17wanxiaoCheckin/Pictures/two.png)），校内打卡开关（有则开），推送设置 **push**（推荐使用 qq 邮箱推送）。\n- 关于 `post_json`，如若打卡推送数据中无错误，则不用管，若有 null，或其他获取不到的情况，则酌情修改即可，和推送是一一对应的。\n- 如果多人打卡，则复制单个用户完整的 `{}`，紧接在上个用户其后即可。\n\n```js\n//  萌新不建议精简配置，出现报错还需要加上必要的配置，以下为个人最简配置示例，请确定自己的打卡方式，删掉不需要的即可\n{\n    \"welcome\": \"用户一，这是一条欢迎语，每次打卡前会打印这句话，用来标记当前打卡用户，如：正在为 *** 打卡......\",\n    \"phone\": \"123\",  // 完美校园登录账号，必填\n    \"password\": \"456\",  // 完美校园登录密码，必填\n    \"device_id\": \"789\",  // 已验证完美校园登录设备ID，获取方式为下载蓝奏云链接中的 RegisterDeviceID.zip，必填\n    \"healthy_checkin\": { // 必选一个打卡方式\n        \"one_check\": {  // 第一类健康打卡\n            \"enable\": true  // true 为打开，false 为关闭\n        }\n    },\n    \"campus_checkin\": {  // 校内打卡，没有就不用管\n        \"enable\": true  // true 为打开，false 为关闭\n    },\n    \"push\": {  // 必选一个，单人推送设置，若全部关闭，则使用 push.json 文件的配置，进行统一推送\n        \"email\": {  //  自定义邮箱推送，使用 qq 邮箱推送，就用 qq 邮箱的 smtp 服务地址和端口\n            \"enable\": true,  // true 为打开，false 为关闭\n            \"smtp_address\": \"smtp.qq.com\",  // stmp服务地址\n            \"smtp_port\": 465,  // stmp服务端口\n            \"send_email\": \"***@qq.com\",  // 发送邮箱的邮箱地址\n            \"send_pwd\": \"****\",  // 发送邮箱的邮箱授权码\n            \"receive_email\": \"**@qq.com\"  // 接收信息的邮箱地址，可自己给自己发\n        }\n    }\n}\n```\n\n### 🤝统一推送配置\n\n- 统一推送配置文件位于：`conf/push.json`\n- 若多用户打卡使用统一推送而不是个别单独推送则在此文件下进行推送的配置\n\n\n\n## 💦使用方法（云函数）\n\n\u003e 详细图文教程请前往：[博客](https://reajason.github.io/2021/03/19/17wanxiaoCheckInSCF/)，请所有步骤及常见问题通读一遍再动手\n\n- 云函数 — 函数服务 — 新建云函数\n\n- 自定义创建 — 本地上传 zip 包（17wanxiaoCheckin-SCF v*.*.zip：[蓝奏云](https://lingsiki.lanzoui.com/b0ekhmcxe)，密码：2333）\n\n- 上传之后往下滑 — 触发器配置 — 自定义创建 — 触发周期：自定义触发 — Cron 表达式：0 0 6,14 * * * * — 完成 — 立即跳转\n\n- 函数管理 — 函数配置 — 编辑 — 执行超时时间：900 — 保存\n\n- 函数代码 — `src/conf/user.json` — 根据上方的用户配置文件介绍以及里面的注释进行设置【第一次使用推荐 QQ 邮箱推送，数据推送全面】\n\n- 测试 — 若弹框【检测到您的函数未部署......】选是 — 查看执行日志以及推送信息（执行失败请带上执行日志完整截图反馈）\n\n- 第一类健康打卡成功结果：`{'msg': '成功', 'code': '10000', 'data': 1}`，显示打卡频繁也算\n\n- 第二类健康打卡成功结果：`{'code': 0, 'msg': '成功'}`\n\n- 校内打卡成功结果：`{'msg': '成功', 'code': '10000', 'data': 1}`\n\n- 出现成功，如果邮箱推送表格没有 None 值或支付宝小程序的健康助手有信息则是真正的打卡成功\n\n- 如果你们学校会记录打卡成功与否可直接在 **支付宝小程序** 查看是否记录上去（手机 app 登录的话之前获取的 device_id 就失效了）\n\n- 最后检查推送数据，如果表格中有 None，请根据第二行的信息，搭配第一行推送信息的格式，修改配置文件\n\n  - 打开第一行，找到 updatainfo 这个东西，下面的有 null 的对应就是表格中的 None，记住它的 propertyname\n\n  - 打开第二行，找到对应 perpertyname 的部分，根据 checkValue 的 text 选择你需要的选项，温度自己填个值就可\n\n  - 打开配置文件，找到 post_json 下的 updatainfo，在里面加入你需要修改的值，格式和第一行里面的打卡数据一样\n\n  - ```\n    \"updatainfo\":[\n    \t{\n        \t\"propertyname\": \"temperature\",  // 这个为第一行中找到值为 null 的那一项\n            \"value\": \"35.7\"  // 这个值为你想改的值，第二行中获取，如果是温度，自己填自己想的即可\n        },\n        {\n        \t\"propertyname\": \"wengdu\",\n        \t\"value\": \"36.4\"\n        }\n    ]\n    ```\n\n     \n\n- 由于前面使用软件获取了 device_id，所以请使用 **支付宝小程序** 查看打卡结果是否记录上去，以免手机登录 device_id 失效\n\n- 由于前面使用软件获取了 device_id，所以请使用 **支付宝小程序** 查看打卡结果是否记录上去，以免手机登录 device_id 失效\n\n- 由于前面使用软件获取了 device_id，所以请使用 **支付宝小程序** 查看打卡结果是否记录上去，以免手机登录 device_id 失效\n\n\n\n\n## 🙋‍脚本有问题\n* 有问题可提 [issue](https://github.com/ReaJason/17wanxiaoCheckin-Actions/issues)\n\n\n\n## 🎯ToDo\n\u003e 2022-12-29 项目停止维护，期待在其他地方和大家见面\n\n\u003e ~~本人希望自己代码能越写越好，因此在功能完善的情况下不断重构代码到满意的结果，希望能和想要技术交流的小伙伴一起学习（ https://reajason.github.io ）~~\n\n- [ ] ~~面向对象方式重构代码~~\n- [ ] ~~更优雅地处理错误和抛出异常~~\n- [ ] ~~精简配置文件~~\n\n\n\n## 📜FQA\n\n- 若第一类健康打卡或校内打卡推送显示，需要修改对应位置下的 areaStr，修改格式为：`\"areaStr\": \"{\\\"address\\\":\\\"天心区青园路251号中南林业科技大学\\\",\\\"text\\\":\\\"湖南省-长沙市-天心区\\\",\\\"code\\\":\\\"\\\"}\"` ，`address`：对应手机打卡界面的下面一行，`text`：对应手机打卡界面的上面一行，根据自己的来，上面填什么就是什么，若是校内打卡的地址获取不到，可查看健康打卡的打卡数据推送里面的 areaStr 复制即可。\n- 若打卡结果为 `{'msg': '参数不合法', 'code': '10002', 'data': ;'deptid can not be null'}`，初步认为你们学校打卡数据无法自动获取，每次需要自己填写数据，解决办法为手机登录打卡抓签到包，然后在配置文件的 `post_json` 中填下你的打卡数据。\n- ~~若腾讯云函数测试失败，执行日志中出现 `......\\nKeyError: 'whereabouts'\",\"statusCode\":430}`，这种情况就是选错健康打卡方式了，请选第一种健康打卡。~~（已在代码中给出相应提示）\n- 腾讯云函数测试失败返回结果中有 `Invoking task timed out after 3 seconds` ，请在函数设置中设置超时时间 900s。\n- 选择了第二类打卡也提示成功了，但是却没有打上，请尝试添加经纬度参数或者 **选择第一类健康打卡**。\n- 打卡失败显示 `无法找到该机构的投票模板数据`，则是选错了打卡方式或是第一类打卡 templateid 不对，可通过配置文件对应位置修改\n- 打卡失败显示 `您正在新设备上使用完美校园 | 获取 token 失败`，请重新获取 device_id 并确保不要再使用手机 app 登录完美校园\n- 打卡失败显示 `您当前打卡内容与现有模板不符，请重新打卡~`，请使用最新的打卡 scf 压缩包重新部署\n- 等待反馈......\n\n## 🌟Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ReaJason/17wanxiaoCheckin\u0026type=Date)](https://star-history.com/#ReaJason/17wanxiaoCheckin\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freajason%2F17wanxiaocheckin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freajason%2F17wanxiaocheckin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freajason%2F17wanxiaocheckin/lists"}