- Now it works on BNU... just use your one.bnu.eud.cn username and password and follow the description below.
该脚本可以帮助您操作北邮「疫情防控通」,自动完成每日上报。
- 既可以部署在服务器上,也可以部署在 GCP Cloud Function、AWS Lambda 或阿里云、腾讯云云函数等支持 Python 的云函数平台上。
- 上报完成后,可通过 Telegram 机器人来接收上报结果,方便您得知自动上报是否成功
- 可输出日志文件,得知运行失败原因
- 单元测试覆盖 80% 的代码
- 该脚本的工作方式为:爬取您上一次上报的信息,然后自动上报同样的信息。因此,使用前,您需要保证昨天
(格林威治时间)(北京时间)已经正确填报了信息。如果您尚未填报,需要手动填报后,从第二天开始才能使用本脚本。
- Python 3.6 或以上
- requests 库
本节以云服务器、AWS Lambda、GCP Cloud Function 为例阐述了部署的基本步骤,但本脚本也可以部署在其它的云函数平台上。欲知详情,请参考您的部署目标的文档。
- 如果您要自动运行本脚本,建议您于每天上午 7:00 运行;在 0 点运行可能会失败。
-
通过
git clone
或 GitHub 的「下载 zip 文件」功能,将本仓库下载到您的电脑上。 -
安装 Python 3.6 或以上版本。
-
cd
到脚本目录,通过 pip 安装依赖项:pip install -r requirements.txt
。 -
根据下方的「脚本配置与运行」一栏,配置脚本参数。
注: 如果您需要让该脚本定期自动运行:
- Linux/macOS 用户可以配置 cron 等工具。参考教程:
- Windows 用户可以使用系统的「任务计划」功能。
由于 AWS Lambda 不会自动下载依赖项,因此需要您手动下载依赖项并打包上传。
- 在 Linux 下配置 Python 3.6 虚拟环境,在虚拟环境中安装 requests。
- 将虚拟环境下的
site-packages
文件夹中的内容,拷贝到与该脚本同一目录下。 - 在 AWS Lambda 中新建一个函数:
- 按照下方「脚本配置与运行」一节的说明,配置环境变量。
- 将所有文件上传。
- 将要执行的文件设为 main.py,要执行的函数设为 main。
注: 您可以通过 AWS CloudWatch 来自动执行该脚本。
GCP 支持通过 requirements.txt
自动下载依赖项,因此将所有文件(包括 requirements.txt
) 打包上传即可。您需要:
- 在 Cloud Function 中创建新函数。
- 按照下方「脚本配置与运行」一节的说明,配置环境变量。
- 打包上传本仓库所有文件。
- 将要执行的函数设为 main。
注: 建议您将该云函数的触发器设为 Cloud Pub/Sub 触发器,然后可以通过 GCP Cloud Scheduler 来自动执行该函数。
该脚本需要配置北邮帐号等信息才能正确运行。
您可以通过环境变量、命令行参数、修改代码等方式来提供配置,请根据您部署的目标平台来决定使用哪种方式。
需要设置的参数如下:
环境变量 | 命令行参数 | 说明 |
---|---|---|
BUPT_SSO_USER | --bupt-sso-user | 您登录北师大门户(https://one.bnu.edu.cn/)时使用的用户名,通常是您的学工号 |
BUPT_SSO_PASS | --bupt-sso-pass | 您登录北邮门户(https://one.bnu.edu.cn/)时使用的密码 |
TG_BOT_TOKEN | --tg-bot-token | (可选)如果您需要把执行结果通过 Telegram 机器人告知,请将此变量设为您的 Telegram 机器人的 API Token |
TG_CHAT_ID | --tg-chat-id | (可选)如果您需要把执行结果通过 Telegram 机器人告知,请将此变量设为您自己的用户 id |
BNR_LOG_PATH | --bnr-log-path | (可选)日志文件存放的路径,未设置则不输出日志文件。(注意日志中可能有敏感信息) |
注: 优先级为:命令行参数 > 环境变量 > 代码中的默认值。其中前者覆盖后者。
假设您登录北邮门户的账户和密码是:
- 用户名: 2020114514
- 密码: 114514
您使用 Linux 时,可以通过如下 bash 命令,设置环境变量并运行脚本:
export BUPT_SSO_USER=2020114514
export BUPT_SSO_PASS=114514
python3 main.py
注:
- 在 Windows 上,您使用的命令可能是
python
而不是python3
。您可以使用系统自带的「编辑环境变量」工具,也可以在使用cmd
和 PowerShell 时设置环境变量。其中,cmd
和 PowerShell 的环境变量的语法各不相同,请自行研究。 - 各配置所对应的环境变量可查看上表。
如果您认为设置环境变量,会让自己的密码有泄露风险,那么您可以使用环境变量提供用户名,同时又通过命令行参数来提供密码:
export BUPT_SSO_USER=2020114514
python3 main.py --bupt-sso-pass=114514
如果您觉得设置环境变量太麻烦,也可以全部使用命令行参数。
注: 各配置所对应的命令行参数可查看上表,也可以运行命令 python main.py --help
查看。
若您部署脚本的目标平台既不提供环境变量功能,也不允许设置命令行参数,那么您可以通过修改代码的方式提供配置。找到 CONFIG_SCHEMA 变量,给对应配置的 default 属性填入您的值即可。
如果您在国内使用该脚本,您可能需要配置代理才能使用 Telegram 机器人通知功能。
本脚本所使用的 requests 库支持 HTTP 代理。您可以通过 Shadowsocks 工具开启 HTTP 代理后,将 HTTP_PROXY 和 HTTPS_PROXY 环境变量设为 http://<代理 IP 地址>:<代理端口号>
。示例如下:
export HTTP_PROXY=http://127.0.0.1:1080
export HTTPS_PROXY=http://127.0.0.1:1080
使用 MIT 协议发布,著作权由代码的贡献者所有。