/shuasr

Shanghai University Auto Selfreport Reminders - 上海某大学健康之路每日一报自动提醒系统 - 支持自动补报 - 可使用GitHub Actions - 可刷排名 - 自动阅读所有消息

Primary LanguagePythonGNU General Public License v2.0GPL-2.0

shuasr

本项目可每天自动检测您是否已填报某校的每日一报,如果未填报,则可根据上次信息自动填报,并提醒您下次不要忘记填报 : )

reminder

项目仅供学习交流之用,请勿用于其它用途。请遵守当地防疫守则。

项目地址:https://github.com/panghaibin/shuasr

查看更新日志

特色

  • 支持在 GitHub Actions 或自建服务器上使用

    • 在 GitHub Actions 上使用时将模拟随机IP,以此暂时绕过IP屏蔽

    • 连接学校 VPN 再提醒功能依然保留,作为备用方案。若模拟IP方法失效或提醒失败,将自动进行连接后再次进行提醒

    • 连接 VPN 时,支持失败自动重连,若失败次数超过3次,将自动退出

    • 在 GitHub Actions 上使用时,建议安装 Pull App 实现自动更新

  • 多用户功能,可为多人提醒

  • 支持多种消息推送接口,可将上报结果仅发送给一人

  • 实现了自动补报功能,提醒时自动检测是否需要补报

  • 提醒时可根据实际情况,自动生成一些原本需要截屏的图片

  • 自动获取最新一次填报信息进行提醒,如需修改地址等信息,当天手动重新填报一次,程序下次提醒将自动采用

  • 自动阅读所有消息,可通过消息推送接口推送必读消息

  • 支持 卷王 抢排名模式(需使用自建服务器,不支持在 GitHub Actions 上使用):

    抢排名

使用

方法一 使用 GitHub Actions 提醒

i. 开始

点击本项目右上角的StarFork

ii. 添加 USERS Secret

Fork 项目后,在自己 Fork 后的项目的页面依次点击 Settings-Secrets-Actions-New repository secret

如图所示, Name 处输入 USERSValue 处输入学号和密码,格式为 学号1,密码1;学号2,密码2... ,即学号与密码用英文逗号分隔开,多个用户之间用英文分号分隔开,最后结尾不用加分号,只有一个用户也不用加

输入完毕后,点击Add secret添加

iii. 添加 SEND Secret (可选)

需要在第三方消息推送接口申请 key 后,采用同样的方法配置该 Secret。配置后可在每次 GitHub Actions 执行提醒后,将提醒结果发送给自己。

Secret 的 Name 设置为 SENDValue 格式为 send_api,send_keysend_api 代表消息推送接口代号, send_key 代表消息推送接口密钥。例如: 2,5e58d2264821c69ebcd46c448e7f5fe63,123456789:mbpSwrgRCr1iLt4MZRYqq0mlko-MGXMcg@987456321 等。

对于支持的消息推送接口及其代号查询,可参考 提醒结果消息推送介绍

iv. 开启 Actions

如下图所示

此时 Actions 开启成功,为确保能够提醒成功,程序将会在 北京时间 (UTC+8) 每天 6:30 及 12:30 各执行一次,如需修改提醒时间,可在 .github/workflows/report.yml 下修改

可以点击 Run workflow 测试提醒一下,确认可以成功提醒。

开启后,刷新页面,可以看到出现一个新的 Workflow ,左侧黄色转圈表示正在执行,点击可查看运行详情。

此时进入到该 Workflow 的日志输出页面,它分为几个步骤依次执行,正常情况下各个步骤都应该是执行无误的。各步骤的功能如其名称所示,其中名称带有 Report 的步骤即为本程序开始执行的步骤,可以关注该步骤的执行情况,其执行进度可实时输出查看

v. 如何更新本项目

自动更新

安装 GitHub Apps 中的 Pull App ,保持你的 Fork 始终最新

Pull App

点击打开后进入到 Pull App 的主页,点击右侧的 Install 按钮进入安装页面。如下所示,安装时默认会应用到所有项目,可改为仅应用到本项目的 Fork

注意该 App 会强制覆盖你对 Fork 项目的操作,如果你有改动(例如修改了 .github/workflows/report.yml ),请注意备份

手动更新

若不安装 Pull App ,当本项目更新后,你 Fork 的项目并不会自动更新。每次本程序更新后,如下图所示,在你 Fork 后的项目页,需要手动点击 Fetch and merge 一下,才能更新

你可以 Watch 本项目以确保项目更新时能收到消息。如果更新不及时,旧的程序很有可能无法继续使用

方法二 在自己的服务器上提醒

此方法适用于自己有服务器,或者在自己电脑上运行的用户,已经配置好 GitHub Actions 的用户可跳过此部分

展开全文

i. 下载/更新

git clone https://github.com/panghaibin/shuasr.git
cd shuasr
# 更新
git pull

ii.安装依赖

pip3 install -r requirements.txt

iii. 添加用户,设置消息推送API

方法一:命令行下添加
# 添加用户
# 如需修改已添加用户的密码,再次执行并输入相同学号即可
python3 main.py add
# 设置消息推送API
python3 main.py send

推送API设置可参考 提醒结果消息推送介绍

方法二:手动修改配置文件

修改目录下config.bak.yaml文件名为config.yaml,按照文件所写格式修改填写。

iv. 启动

添加设置完毕用户及消息发送API后,建议先执行以下命令测试

python3 -u main.py test

该命令会将所有用户立即测试一次,请关注控制台输出。如控制台无异常输出且能收到消息推送,说明设置无误。若出现异常报错有可能是健康之路已改版,等待更新或向我提PR。

运行以下命令,程序将自行检查是否在上报时间内,并自动进行上报

python3 -u main.py

v. 进程守护

启动程序后若关闭控制台程序会自动退出,因此需要进程守护。进程守护的方式有多种,如使用nohup命令:

nohup /usr/bin/python3 -u /root/shuasr/main.py > /root/shuasr/output.log 2>&1 &

另外也可以用screen,下面以screen为例介绍用法。

安装screen(部分系统已安装)

# CentOS
yum install screen
# Debian/Ubuntu
apt-get install screen

然后创建一个名为shu的screen会话

screen -L -S shu

默认情况下会生成一screenlog.0文件,控制台输出将会保存到该文件中,如有错误信息方便查看。

执行python3 main.py,按下Ctrl+a,然后按d,离开当前screen会话。

如需恢复,执行

screen -r shu

即可

提醒结果消息推送介绍

目前支持以下消息推送服务:

接口代号 名称 官网
1 Server酱 https://sct.ftqq.com/
2 推送加(hxtrip域名下) https://pushplus.hxtrip.com/ 该接口已停用
3 Telegram Bot 需自行创建Bot查看创建方法
4 PushDeer(开发中,未完善) https://github.com/easychen/pushdeer
5 推送加PushPlus https://www.pushplus.plus/

请前往任意官网注册得到key后即可在本项目中使用,在 GitHub Actions 中使用时注意接口代号正确设置。

注意 Telegram Bot 的 Key 的格式为 BOT_TOKEN@CHAT_ID ,例如 123456789:mbpSwrgRCr1iLt4MZRYqq0mlko-MGXMcg@987456321

抢排名模式介绍

该模式仅支持在自建服务器上使用。功能默认开启,每天凌晨 1 点前会向系统不断提交当日的日报信息直到提交成功,以提升排名。如需关闭,修改config.yaml中的grab_mode值为False即可。

关闭后每天7:30提醒一次。

更新日志

点击查看

说明

本项目在 2020 年初用 PHP 编写 (为了抢排名第一) ,返校后为了帮室友上报把源代码改得面目全非 (传说中的屎山)(又不是不能用) 。寒假离校后受下列开源项目启发,用 Python3 对 PHP 编写的源代码进行了重写重构。

本项目仅供学习交流之用,请勿用于其它用途。请遵守当地防疫守则。

Take care of yourself, and be well!

Thanks

BlueFisher/SHU-selfreport