删除无用文件
CI / Build binary CI (push) Has been cancelled Details

This commit is contained in:
huoxue1 2023-10-07 00:07:33 +08:00
parent e8433180b4
commit cf49f2b065
25 changed files with 0 additions and 1557 deletions

603
README.md
View File

@ -1,603 +0,0 @@
# 克隆自原作者johlanse的项目
### 学习强国自动化学习
该项目基于[playwright-go](https://github.com/mxschmitt/playwright-go) 开发,支持*windows**linux*,*mac*
### 文档地址: https://johlanse.shhy.xyz
> 请先看文档再提出问题
## 申明,该项目仅用于学习。
## 鸣谢
+ ### [imkenf/XueQG](https://github.com/imkenf/XueQG)
## windows使用教程
- 浏览器访问[Release](https://github.com/sjkhsl/study_xxqg/releases)
- 选择最新版本下载 `study_xxqg_amd64.zip`
- 将其解压到合适的位置
- 进入解压后的文件夹,双击运行`study_xxqg.exe`,第一次打开可能会出现闪退发现文件夹下生成了config文件夹
- 打开config目录下的`confif.yml`文件,进行编辑,详情内容见<u>配置文件</u>
- 再次进行运行`study_xxqg.exe`
- 使用浏览器打开`http://127.0.0.1:8080`
- 推送配置请参考<u>推送</u>
### 自定义浏览器位置
> windows默认调用系统的edge浏览器调用目录**C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe**
>
> 若不存在该浏览器会自动尝试下载浏览器到目录下的tools文件夹下当然也可以自定义配置浏览器位置
>
> 修改配置文件的**edge_path**选项即可配置,配置为配置可执行文件的路径
>
> 自定义浏览器支持chromium内核的系列浏览器但是版本不能太高
>
> 例如我的chrome.exe文件在D盘的browser文件夹下配置为**D:/browser/chrome.exe**或者**D:\\browser\\chrome.exe**
## 可执行文件运行
- 本地访问[Releases](https://johlanse.shhy.xyz/[Release](https://github.com/johlanse/study_xxqg/releases)) ,查找对应版本并复制链接
- 使用wget下载对应版本压缩包
- > tar -xzvf study_xxqg_linux_amd64.tar.gz
- 运行 `./study_xxqg --init`,首次运行会生成默认配置文件
- 使用vim修改对应配置文件linux建议使用tg模式运行详情配置参考[配置](https://johlanse.shhy.xyz/#/../config),推送方式查看[push](https://johlanse.shhy.xyz/#/../push)
- 再次运行即可
### 一键安装脚本 废弃
```
wget https://raw.githubusercontent.com/johlanse/study_xxqg/main/docs/study_xxqg_install.py && python3 study_xxqg_install.py 废弃
```
## docker运行
```
docker run --name study_xxqg -d -p 8080:8080 -v /etc/study_xxqg/:/opt/config/ sjkhsl/study_xxqg:latest
```
各个参数的含义:
- **--name study_xxqg** 运行的容器的名称,可以根据自己实际情况进行修改
- **-p 8080:8080** 将容器内部的8080端口映射到容器外面前面是宿主机的端口就是网页上访问的端口后面是容器内部需要运行的端口对应配置文件内web配置的端口就好
- **-v /etc/study_xxqg/:/opt/config/** 将容器内的/opt/config/目录映射到宿主机的/etc/study_xxqg/目录可根据实际情况修改前面宿主机路径映射后对应的config.yml配置文件位置就在该目录下
- **jolanse/study_xxqg:latest**镜像名称和镜像的版本latest代表开发中的最新版本
## docker-compose运行
```
wget https://raw.githubusercontent.com/sjkhsl/study_xxqg/main/docker-compose.yml
docker-compose up -d
```
## 二种运行方式的区别
- #### 可执行文件运行
可执行文件运行节省存储空间拥有更低的占用但是可能会存在浏览器依赖安装的问题适合拥有一定linux基础的用户使用 如果系统为debian11用户可以参考DockerFile文件中的依赖安装语句执行即可centos用户推荐使用docker.
- #### docker运行
docker运行不需要解决依赖问题但是可能面临更高的运行占用建议使用docker控制内存占用
## 源码运行
### 安装golang环境
- 去golang[官网](https://studygolang.com/dl) 下载对应系统的安装包建议安装golang 1.7+
- 配置环境变量
- 具体可百度搜索golang环境安装
- 验证,任意终端中输入`go version`,显示版本信息即安装完成
### 运行项目
- 再任意终端输入一下命令
```
cd study_xxqg
go mod tidy
go build ./
./study_xxqg
```
## 推送配置
*一共有以下五种推送方式*
- 微信公众号测试号推送
- 网页推送
- telegram推送
- 微信pushPlus推送
- 钉钉推送
> 其中pushPlus和钉钉推送相互冲突因为两种推送模式都只能单方面配合定时运行功能使用只能接收消息不能发送消息
> 在公众号测试号和tg推送以及定时三种只要配置了任意一种程序将自动卡住等待用户指令。
> 若您想打开程序就运行请关闭这三项配置当前程序默认开启cron定时,所以新版若不想程序一直等待则关闭cron即可。
> 微信公众号和网页需要公网ip,若没有建议更换其他推送方式或者自行配置内网穿透tg推送需要配置代理或者自己反代tg的api钉钉和pushPlus仅支持单向推送一般配合定时使用
### 定时配置
定时任务和一下所有推送均可配合一起使用cron的语法遵循linux标准cron语法详情可百度自行查询
因为一些不知名的bug,观看视频时可能卡住不加分,所以建议一天运行三次左右定时,同时多次定时之间间隔不要太短
为防止定时任务每天在同一时间触发,可以配置**cron_random_wait**,等待随机时间再运行任务
除此之外,还支持以下语法
- @yearly:也可以写作@annually表示每年第一天的 0 点。等价于0 0 1 1 *
- @monthly:表示每月第一天的 0 点。等价于0 0 1 * *
- @weekly:表示每周第一天的 0 点,注意第一天为周日,即周六结束,周日开始的那个 0 点。等价于0 0 * * 0
- @daily:也可以写作@midnight表示每天 0 点。等价于0 0 * * *
- @hourly表示每小时的开始。等价于0 * * * *
- @every duration: duration为任意时间端例如 1h,1s,1s1h30m2s代表间隔时间段就指向一次
### 微信公众号推送
配置config.yml的如下部分
```
# 微信公众号测试号配置
wechat:
# 是否启用
enable: false
# 开发者平台设置的token
token: ""
# 开发者平台的secret
secret: ""
# 开发者平台的appId
app_id: ""
# 发送登录消息需要使用的消息模板
# 模板标题,随意 模板内容: 点我登录,然后在浏览器中打开!!
login_temp_id: ""
# 发送普通消息需要使用的消息模板
# 模板标题:随意 模板内容: {{data.DATA}}
normal_temp_id: ""
# xxqg会每隔两小时左右检查所有用户的ck有效性若开启该选项会在检查失败时推送提醒消息
push_login_warn: false
# 微信管理员的openid,可点击关于按钮获得,配置后请重启程序
super_open_id: ""
```
- 前往微信[公众号开发者平台](http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login),手机微信扫码登录
- 配置url为**[http://ip:port/wx](http://ip:port/wx)**,ip为你运行机器的公网ip,若使用docker运行端口则为宿主机中映射出来的端口ip和端口的配置和web使用同一个配置
- 设置token,需和配置项中一样
- 分别添加登录模板消息和普通模板消息,添加要求:
- 在配置文件中配置所有内容,启动程序
- 运行程序后在浏览器中访问配置的url,页面会返回`No Signature!`,然后提交配置,若成功则关注公众号尝试运行
- docker运行方式参考<u>linux运行</u>
- 配置成功后可点击关于按钮获取open_id然后填写到配置项的super_open_id中然后重启容器生效
### web推送
> 适用于部署在服务器上或者家里有公网IP的设备上
配置config.yml的如下部分
```
web:
# 启用web
enable: true
# 监听的ip,若只需要本机访问则设置为127.0.0.1监听本机所有ip为0.0.0.0
host: 0.0.0.0
# 监听的端口号 0-65535可选
port: 8081
# web端登录管理员的账号
accountadmin
# web端登录管理员的密码
password: admin
# web端登录普通用户的账号密码支持多个用户,普通用户只能看到自己的信息
common_user:
# 代表账号为user,密码为123的普通用户可添加多个继续在下面写就好了
user: 123
# user1: 123
# user2: 123
```
- 开启后通过浏览器访问 *[http://ip:port](http://ip:port/)*或者*[http://ip:port/new](http://ip:port/new)*即可打开网址 ,若为docker运行则ip为宿主机公网ip,端口为docker映射到宿主机的端口
- 若无法访问首先检查程序运行日志查看有无报错其次查看docker的运行情况端口是否映射正常然后可以通过curl命令检测在宿主机中能否访问然后检查防火墙之类的
- 若点击登录之后出现一个小框然后无反应,则说明账户密码错误,请重新配置程序账户密码并重启程序
> 登录的账号密码是在配置文件中配置,不是学习强国的登录账号,管理员登录支持删除用户,同时能看到所有人的用户信息,普通用户就是`common_user`下面配置的用户,支持多个用户,键是账号,值是密码
### 钉钉推送
配置config.yml的如下部分,具体使用教程详情参考[钉钉](https://developers.dingtalk.com/document/robots/custom-robot-access?spm=ding_open_doc.document.0.0.7f875e5903iVpC#topic-2026027)
```
ding:
enable: true
access_token: ""
secret: ""
```
- 在电脑端钉钉中创建群聊在聊天设置中选择只能群助手选择添加机器人机器人类别选择webhook自定义机器人
- 机器人名字任意机器人安全设置勾选加签复制加签的密钥作为secret配置项填入配置文件中
- 勾选协议确认添加会出现一个webhook地址形如这样`https://oapi.dingtalk.com/robot/send?access_token=aaabbbbcccc`
- 将上述地址中的后半段就是access_token=之后的内容作为access_token配置项填入配置文件中例如上述网址则填入aaabbbccc到access_token中
- 设置定时cron,启动程序,程序会在定时时间运行脚本
### pushplus推送
配置config.yml的如下部分具体使用教程参考[pushplus](https://www.pushplus.plus/)
```
push_plus:
enable: true
token: ""
```
### telegram推送
## Telegram Bot
配置 config.yml的如下部分
```
tg:
enable: false
chat_id: 0
token: ""
# telegram的代理不配置默认走系统代理
proxy: ""
# 自定义tg的api,可通过cloudflare搭建需自备域名
custom_api: "https://api.telegram.org"
# 白名单id,包括群id或者用户id,若为空则允许所有群所有用户使用若仅用于单人直接配置上面的chat_id就可以
white_list:
- 123
```
### 配置
1. 在 Tg 中搜索[`@BotFather`](https://t.me/BotFather) ,发送指令`/newbot`创建一个 bot
2. 获取你创建好的 API Token 格式为`123456789:AAaaaa-Uuuuuuuuuuu` ,要完整复制**全部内容**
3. 在 Tg 中搜索[`@userinfobot`](https://t.me/userinfobot) ,点击`START`,它就会给你发送你的信息,记住 Id 即可,是一串数字。
4. 跟你创建的 bot 会话,点击`START`,或者发送`/start`
5. 将第 2 步获取的 token 放在`tokenn`中,第 3 步获取的 Id 放到`chat_id`中,`enable`设置为 true。
6. 因为众所周知的原因telegram推送需要进行配置代理例如clash的代理配置为`http://127.0.0.1:7890`即可若通过cf反代的api,,则填写到**custom_api**配置项
7. 若不配置代理的情况下会默认走系统代理white_list建议填写自己的chat_id,为可以使用机器人的白名单,若需要在群组中使用,请相应进行配置
增加 telegram bot 指令支持
`/login` 添加一个用户
`/get_users` 获取所有cookie有效的用户
`/study 张三` 指定账号学习,若只存在一个用户则自动选择学习
`/get_scores` 获取账户积分
`/quit` 退出正在学习的实例当长时间无响应时建议退出并查看日志然后提交issue
`/study_all` 按顺序对cookie有效的所有用户进行学习
### PushDeer推送配置
pishDeer也仅支持单向推送
配置:
```
push_deer:
enable: true
api: "https://api2.pushdeer.com"
token: ""
```
自行注册pushDeer后获取token,配置token到配置文件即可api默认为官方api,若为自建,则配置对应接口即可
## 配置文件
> 配置文件修改后需要重启程序才能生效
```
# 刷课模式默认为3
# 1只刷文章何视频
# 2只刷文章和视频和每日答题
# 3刷文章和视频和每日答题每周答题和专项答题
model: 3
# 日志等级
# panic
# fatal
# error
# warn, warning
# info
# debug
# trace
log_level: "info"
# 是否显示浏览器
show_browser: false
# 跳转学习强国的scheme,默认使用本仓库的action自建scheme,若需自行修改,可直接复制仓库下/docs/scheme.html到任意静态文件服务器
scheme: "https://johlanse.github.io/study_xxqg/scheme.html?"
push:
ding:
enable: false
access_token: ""
secret: ""
# 目前仅支持push-plus推送二维码默认建议使用push-plus推送
# push-plus使用方法见http://www.pushplus.plus/
push_plus:
enable: false
token: ""
# telegram交互模式配置
tg:
enable: false
chat_id: 0
token: ""
# telegram的代理不配置默认走系统代理
proxy: ""
# 自定义tg的api,可通过cloudflare搭建需自备域名
custom_api: "https://api.telegram.org"
# 白名单id,包括群id或者用户id,若为空则允许所有群所有用户使用若仅用于单人直接配置上面的chat_id就可以
white_list:
- 123
# 网页端配置
web:
# 是否启用网页
enable: true
#
host: 0.0.0.0
port: 8080
# 网页端登录账号
account: admin
# 网页端登录密码
password: admin
# 微信公众号测试号配置
wechat:
# 是否启用
enable: false
# 开发者平台设置的token
token: ""
# 开发者平台的secret
secret: ""
# 开发者平台的appId
app_id: ""
# 发送登录消息需要使用的消息模板
# 模板标题,随意 模板内容: 点我登录,然后在浏览器中打开!!
login_temp_id: ""
# 发送普通消息需要使用的消息模板
# 模板标题:随意 模板内容: {{data.DATA}}
normal_temp_id: ""
# xxqg会每隔两小时左右检查所有用户的ck有效性若开启该选项会在检查失败时推送提醒消息
push_login_warn: false
# 微信管理员的openid,可点击关于按钮获得,配置后请重启程序
super_open_id: ""
# pushDeer推送配置,详情参考psuhDeer官网http://www.pushdeer.com/official.html
push_deer:
enable: false
api: "https://api2.pushdeer.com"
token: ""
# 登录重试配置
retry:
# 重试次数
times: 0
# 重试之间的时间间隔,单位为分钟
intervals: 5
# 设置是否定时执行学习程序格式为cron格式
# "9 19 * * *" 每天19点9分执行一次
# "* 10 * * *” 每天早上十点执行一次
cron: "0 0 * * *"
# 定时任务随机等待时间,单位:分钟
cron_random_wait: 0
#windows环境自定义浏览器路径仅支持chromium系列
edge_path: ""
# 是否推送二维码
qr_code: false
# 启动时等待时间,为了防止代理启动比软件慢而报错,默认不等待,单位秒
start_wait: 0
# 专项答题可接受的最小分值,因一天重复运行的时候,若专项答题未能答满会继续答新的一套题,会浪费题
special_min_score: 10
# 题目搜索的顺序为true则从2018年最开始搜题否则从现在最新开始搜题
reverse_order: false
```
## 跳板搭建
因为学习强国官方app的scheme是dtxuexi://但是大部分浏览器并不能识别该scheme,所以可以通过自行搭建跳板进行跳转。
study_xxqg官方搭建的跳板是使用github page进行搭建的可能访问情况会比较慢所以可以进自行搭建跳板。
## 搭建方法
- 在config目录下的创建dist目录
- 将仓库下docs目录里面的**scheme.html**和**qrcode.js**放入该目录
- 配置scheme为**[http://ip:port/dist/scheme.html](http://ip:port/dist/scheme.html)?**
- 重启程序
> 也可以通过其他静态文件服务器搭建,如 nginx等
## 常见问题
- ### 遇到问题的常用解决办法
```
首先将日志项中的日志等级调整为debug
复现出现的错误在issue中查找错误日志的关键字
通过搜索引擎查找问题
在群聊中查找聊天记录,查找置顶信息
若无解决方案可附上关键日志和相关配置文件在群聊中提出问题或者在github提出issue
```
- ### windows打开**study_xxqg.exe**出现直接闪退
```
在文件路径栏输入**cmd**,然后再黑色命令窗口中输入```./study_xxqg.exe```,
然后查看报错内容截图并在[github](https://github.com/johlanse/study_xxqg/issues) 提交issue
```
- ### web端账号密码
```
web端账号密码默认都是admin不是你学习强国的手机号需要修改可自行修改配置文件
```
- ### 关于cookie的时间问题
```
原理是是通过带上当前cookie访问一个api即可在1.0.35版本之后我通过cron定时执行保活默认的cron是 0 */1 * * *
```
目前暂不知道能够续期的次数
如果你想让访问间隔时间更短或者更长,可以通过添加环境变量 CHECK_ENV 为cron值
````
+ ### windows下出现找不到浏览器的问题
```yaml
自行安装chromium内核的浏览器包括chromeedge浏览器之类然后在配置文件中配置 edge_path 配置项,配置时将路径中的 \ 换成 / 或者 \\
````
- ### arm设备报错`could not download driver: could not check if driver is up2date: could not run driver: exit status 127`
```
因为playwright官方对arm设备支持会出现一些问题所以需要手动安装node.js和chromium并创建软连接
apt-get install nodejs
apt-get install chromium
ln -s /usr/bin/chromium ./tools/browser/chromium-978106/chrome-linux/chrome
ln -s /usr/bin/node ./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/node
```
- ### linux退出终端后脚本停止运行
```
可以使用screen或者nohup等命令后台运行具体命令自行百度
nohup参考命令
nohup ./study_xxqg > xxqg.log 2>&1
退出程序可以通过**cat pid.pid**查看程序pid,然后kill对应pid进行退出
```
````
+ ### linux上退出后台正在执行的进程
```yaml
study_xxqg进程会在运行的时候将pid输出到目录下的pid.pid文件使用kil -9 命令即可退出后台进程
````
- ### 刷文章或者视频无法加分
```
偶尔出现视频和文章无法加分的bug,可以进行等待一段时间后重启程序再次测试,目前尚不清楚造成原因
```
- ### Host system is missing
报错大概为这样:
```
[ERROR]: [core] 初始化chrome失败
[2022-05-13 13:43:47] [ERROR]: [core] could not send message: could not send message to server: Host system is missing dependencies!
Missing libraries are:
libgtk-3.so.0
libgdk-3.so.0
```
````
```shell
sudo ./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/playwright.sh install-deps
````
> 若运行后显示未找到apt-get可百度对应系统安装apt-get的方法
- ### 为什么运行了就卡住了
当开启了cron定时配置微信公众号测试号配置telegram配置这三项的任意一项后
程序就会等待用户的指令从而卡住,所以只需要修改配置文件就可以解决
study_xxqg作为一个开源程序欢迎大家尽自己的一份力做出贡献
## 贡献要求
- ###### 热爱祖国
- 愿意参与开源贡献
## 贡献文档
> 文档采用docsify框架加上github page进行自动部署
>
> 你只需要在docs目录进行marikdown编写提交pr后会
>
> 自动生成本地可通过docsify进行查看运行结果
## 贡献代码
### 技术需求
项目采用go语言编写
web框架采用gin框架
爬虫框架采用req库
浏览器自动化框架采用playwright-go库
### 目录结构
- **\.github\** github的相关配置目录主要存储了action自动化脚本
- **\conf\** 程序的配置文件解析,默认配置文件存放目录
- **\lib\** 程序的主要代码目录包含了核心的各项功能包括答题看文章看视频telegram
- **\model\** 程序的用户数据存储封装了对sqlite的操作
- **\push\** 程序的推送配置主要包括钉钉推送和pushplus推送
- **\web\** 程序的web端操作和微信公众的操作
- **\utils\** 程序的一些工具类封装
运行时生成的目录
- **\config\** 程序的配置文件config.yml的存放目录
- **\config\logs\** 程序的日志文件存放目录
- **\dist\** 留给用户存放自定义静态文件的目录,映射路径为 \dist需手动添加并重启程序

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

View File

View File

@ -1 +0,0 @@
johlanse.shhy.xyz

View File

@ -1,14 +0,0 @@
<!-- _coverpage.md -->
# study_xxqg
> 一个解放双手的强国自动化助手
- 每日40-45分
- cookie保存时间长
- 支持多种推送方式
[GitHub](https://github.com/sjkhsl/study_xxqg)
[Get Started](./start.md)

View File

@ -1,12 +0,0 @@
* [Study_xxqg](./start.md)
* [开始使用](./start.md)
* [Windows运行](./windows/index)
* [linux运行](./linux/index)
* [源码运行](./custom/index)
* [手机运行](./lazy/index)
* [推送配置](./push.md)
* [配置文件](./config.md)
* [跳板搭建](./scheme.md)
* [常见问题](./problem.md)
* [做出贡献](./contribute.md)
* [加群交流](./joinGroup.md)

View File

@ -1,125 +0,0 @@
## 配置文件<!-- {docsify-ignore} -->
> 配置文件修改后需要重启程序才能生效
```yaml
# 刷课模式默认为3
# 1只刷文章何视频
# 2只刷文章和视频和每日答题
# 3刷文章和视频和每日答题每周答题和专项答题
model: 3
# 日志等级
# panic
# fatal
# error
# warn, warning
# info
# debug
# trace
log_level: "info"
# 是否显示浏览器
show_browser: false
# 跳转学习强国的scheme,默认使用本仓库的action自建scheme,若需自行修改,可直接复制仓库下/docs/scheme.html到任意静态文件服务器
scheme: "https://johlanse.github.io/study_xxqg/scheme.html?"
push:
ding:
enable: false
access_token: ""
secret: ""
# 目前仅支持push-plus推送二维码默认建议使用push-plus推送
# push-plus使用方法见http://www.pushplus.plus/
push_plus:
enable: false
token: ""
# telegram交互模式配置
tg:
enable: false
chat_id: 0
token: ""
# telegram的代理不配置默认走系统代理
proxy: ""
# 自定义tg的api,可通过cloudflare搭建需自备域名
custom_api: "https://api.telegram.org"
# 白名单id,包括群id或者用户id,若为空则允许所有群所有用户使用若仅用于单人直接配置上面的chat_id就可以
white_list:
- 123
# 网页端配置
web:
# 是否启用网页
enable: true
#
host: 0.0.0.0
port: 8080
# 网页端登录账号
account: admin
# 网页端登录密码
password: admin
# 微信公众号测试号配置
wechat:
# 是否启用
enable: false
# 开发者平台设置的token
token: ""
# 开发者平台的secret
secret: ""
# 开发者平台的appId
app_id: ""
# 发送登录消息需要使用的消息模板
# 模板标题,随意 模板内容: 点我登录,然后在浏览器中打开!!
login_temp_id: ""
# 发送普通消息需要使用的消息模板
# 模板标题:随意 模板内容: {{data.DATA}}
normal_temp_id: ""
# xxqg会每隔两小时左右检查所有用户的ck有效性若开启该选项会在检查失败时推送提醒消息
push_login_warn: false
# 微信管理员的openid,可点击关于按钮获得,配置后请重启程序
super_open_id: ""
# pushDeer推送配置,详情参考psuhDeer官网http://www.pushdeer.com/official.html
push_deer:
enable: false
api: "https://api2.pushdeer.com"
token: ""
# 登录重试配置
retry:
# 重试次数
times: 0
# 重试之间的时间间隔,单位为分钟
intervals: 5
# 设置是否定时执行学习程序格式为cron格式
# "9 19 * * *" 每天19点9分执行一次
# "* 10 * * *” 每天早上十点执行一次
cron: "0 0 * * *"
# 定时任务随机等待时间,单位:分钟
cron_random_wait: 0
#windows环境自定义浏览器路径仅支持chromium系列需要将\替换为/或者\\
edge_path: ""
# 启动时等待时间,为了防止代理启动比软件慢而报错,默认不等待,单位秒
start_wait: 0
# 专项答题可接受的最小分值,因一天重复运行的时候,若专项答题未能答满会继续答新的一套题,会浪费题
special_min_score: 10
# 题目搜索的顺序为true则从2018年最开始搜题否则从现在最新开始搜题
reverse_order: false
# 定时任务运行时协程池的大小
pool_size: 1
```

View File

@ -1,39 +0,0 @@
study_xxqg作为一个开源程序欢迎大家尽自己的一份力做出贡献
## 贡献要求
* ###### 热爱祖国
* 愿意参与开源贡献
## 贡献文档
> 文档采用docsify框架加上github page进行自动部署
>
> 你只需要在docs目录进行marikdown编写提交pr后会
>
> 自动生成本地可通过docsify进行查看运行结果
## 贡献代码
### 技术需求
项目采用go语言编写\
web框架采用gin框架\
爬虫框架采用req库\
浏览器自动化框架采用playwright-go库
### 目录结构
+ **\\.github\\** github的相关配置目录主要存储了action自动化脚本
+ **\\conf\\** 程序的配置文件解析,默认配置文件存放目录
+ **\\lib\\** 程序的主要代码目录包含了核心的各项功能包括答题看文章看视频telegram
+ **\\model\\** 程序的用户数据存储封装了对sqlite的操作
+ **\\push\\** 程序的推送配置主要包括钉钉推送和pushplus推送
+ **\\web\\** 程序的web端操作和微信公众的操作
+ **\\utils\\** 程序的一些工具类封装
运行时生成的目录
+ **\\config\\** 程序的配置文件config.yml的存放目录
+ **\\config\\logs\\** 程序的日志文件存放目录
+ **\\dist\\** 留给用户存放自定义静态文件的目录,映射路径为 \dist需手动添加并重启程序

View File

@ -1,16 +0,0 @@
## 源码运行
### 安装golang环境
+ 去golang[官网](https://studygolang.com/dl) 下载对应系统的安装包建议安装golang 1.7+
+ 配置环境变量
+ 具体可百度搜索golang环境安装
+ 验证,任意终端中输入```go version```,显示版本信息即安装完成
### 运行项目
+ 再任意终端输入一下命令
```yaml
cd study_xxqg
go mod tidy
go build ./
./study_xxqg
```

View File

@ -1,17 +0,0 @@
目前最新版本更新了浏览器的执行文件路径和playwright驱动文件的路径所以可以删除之前下载的文件。对应文件位置分别为
## windows
```text
C:\Users\用户\AppData\Local\ms-playwright\
C:\Users\用户\AppData\Local\ms-playwright-go\
```
## linux
```text
~/.cache/ms-playwright/
~/.cache/ms-playwright-go/
```
## mac
```text
/User/Library/Caches/ms-playwright/
/User/Library/Caches/ms-playwright-go/
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,72 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Study_xxqg</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<!-- 设置浏览器图标 -->
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<!-- 默认主题 -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/lib/themes/vue.css">
</head>
<body>
<!-- 定义加载时候的动作 -->
<div id="app">加载中...</div>
<script>
window.$docsify = {
// 项目名称
name: 'study_xxqg',
// 仓库地址点击右上角的Github章鱼猫头像会跳转到此地址
repo: 'https://github.com/sjkhsl/study_xxqg',
// 侧边栏支持默认加载的是项目根目录下的_sidebar.md文件
loadSidebar: true,
// 导航栏支持默认加载的是项目根目录下的_navbar.md文件
loadNavbar: true,
// 封面支持默认加载的是项目根目录下的_coverpage.md文件
coverpage: true,
// 最大支持渲染的标题层级
maxLevel: 5,
// 自定义侧边栏后默认不会再生成目录设置生成目录的最大层级建议配置为2-4
subMaxLevel: 4,
// 小屏设备下合并导航栏到侧边栏
mergeNavbar: true,
}
</script>
<script>
// 搜索配置(urlhttps://docsify.js.org/#/zh-cn/plugins?id=%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2-search)
window.$docsify = {
search: {
maxAge: 86400000,// 过期时间,单位毫秒,默认一天
paths: auto,// 注意:仅适用于 paths: 'auto' 模式
placeholder: '搜索',
// 支持本地化
placeholder: {
'/zh-cn/': '搜索',
'/': 'Type to search'
},
noData: '找不到结果',
depth: 4,
hideOtherSidebarContent: false,
namespace: 'Docsify-Guide',
}
}
</script>
<!-- docsify的js依赖 -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
<!-- emoji表情支持 -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/emoji.min.js"></script>
<!-- 图片放大缩小支持 -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.min.js"></script>
<!-- 搜索功能支持 -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
<!--在所有的代码块上添加一个简单的Click to copy按钮来允许用户从你的文档中轻易地复制代码-->
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>
</body>
</html>

View File

@ -1,3 +0,0 @@
加群链接: https://t.me/+w07gJlNH8ewzYzg1
> 加群之前请完整阅读文档提出问题之前请先在github的issue查找并仔细阅读文档后再提出同时建议附上config.yml的配置信息和运行日志。

View File

@ -1,26 +0,0 @@
# 手机运行
## 懒人部署
> 运行方式采用的是ZeroTermux的proot容器来安装的ubuntu 20.04 来运行的
### 1.软件工具下载
- 安卓手机
- ZeroTermux
- 恢复包
> 下载地址https://www.123pan.com/s/g9qA-DMMYd
>
> <img src="https://dph666-1252290660.cos.ap-chengdu.myqcloud.com/c5sl29.png" style="float:left;" />
### 2.软件安装与恢复
<img src="https://dph666-1252290660.cos.ap-chengdu.myqcloud.com/72x5u5.png" />
### 3. 运行程序
```shell
# 进入容器后输入 ./study_xxqg 启动程序
./study_xxqg
#里面已经安装了screen 如何使用自行百度
```
<img src="https://dph666-1252290660.cos.ap-chengdu.myqcloud.com/reult.jpg" />

View File

@ -1,41 +0,0 @@
## 可执行文件运行
+ 本地访问[Releases]([Release](https://github.com/sjkhsl/study_xxqg/releases)) ,查找对应版本并复制链接
+ 使用wget下载对应版本压缩包
+ > tar -xzvf study_xxqg_linux_amd64.tar.gz
+ 运行 ```./study_xxqg --init```,首次运行会生成默认配置文件
+ 使用vim修改对应配置文件linux建议使用tg模式运行详情配置参考[配置](../config.md),推送方式查看[push](../push.md)
+ 再次运行即可
### 一键安装脚本
```shell
wget https://raw.githubusercontent.com/sjkhsl/study_xxqg/main/docs/study_xxqg_install.py && python3 study_xxqg_install.py
```
## docker运行
```
docker run --name study_xxqg --restart always -d -p 8080:8080 -v /etc/study_xxqg/:/opt/config/ sjkhsl/study_xxqg:latest
```
各个参数的含义:
+ **--restart always 容器总是自动重启
+ **--name study_xxqg** 运行的容器的名称,可以根据自己实际情况进行修改
+ **-p 8080:8080** 将容器内部的8080端口映射到容器外面前面是宿主机的端口就是网页上访问的端口后面是容器内部需要运行的端口对应配置文件内web配置的端口就好
+ **-v /etc/study_xxqg/:/opt/config/** 将容器内的/opt/config/目录映射到宿主机的/etc/study_xxqg/目录可根据实际情况修改前面宿主机路径映射后对应的config.yml配置文件位置就在该目录下
+ **sjkhsl/study_xxqg:latest**镜像名称和镜像的版本latest代表开发中的最新版本
## docker-compose运行
```shell
wget https://raw.githubusercontent.com/sjkhsl/study_xxqg/main/docker-compose.yml
docker-compose up -d
```
## 二种运行方式的区别
+ #### 可执行文件运行
可执行文件运行节省存储空间拥有更低的占用但是可能会存在浏览器依赖安装的问题适合拥有一定linux基础的用户使用
如果系统为debian11用户可以参考DockerFile文件中的依赖安装语句执行即可centos用户推荐使用docker.
+ #### docker运行
docker运行不需要解决依赖问题但是可能面临更高的运行占用建议使用docker控制内存占用

View File

@ -1,111 +0,0 @@
## 常见问题<!-- {docsify-ignore} -->
+ ### 遇到问题的常用解决办法
```yaml
首先将日志项中的日志等级调整为debug
复现出现的错误在issue中查找错误日志的关键字
通过搜索引擎查找问题
在群聊中查找聊天记录,查找置顶信息
若无解决方案可附上关键日志和相关配置文件在群聊中提出问题或者在github提出issue
```
+ ### windows打开**study_xxqg.exe**出现直接闪退
```yaml
在文件路径栏输入**cmd**,然后再黑色命令窗口中输入```./study_xxqg.exe```,
然后查看报错内容截图并在[github](https://github.com/sjkhsl/study_xxqg/issues) 提交issue
```
+ ### web端账号密码
```yaml
web端账号密码默认都是admin不是你学习强国的手机号需要修改可自行修改配置文件
```
+ ### 关于cookie的时间问题
```yaml
原理是是通过带上当前cookie访问一个api即可在1.0.35版本之后我通过cron定时执行保活默认的cron是 0 */1 * * *
目前暂不知道能够续期的次数
如果你想让访问间隔时间更短或者更长,可以通过添加环境变量 CHECK_ENV 为cron值
```
+ ### windows下出现找不到浏览器的问题
```yaml
自行安装chromium内核的浏览器包括chromeedge浏览器之类然后在配置文件中配置 edge_path 配置项,配置时将路径中的 \ 换成 / 或者 \\
```
+ ### arm设备报错```could not download driver: could not check if driver is up2date: could not run driver: exit status 127```
```yaml
因为playwright官方对arm设备支持会出现一些问题所以需要手动安装node.js和chromium并创建软连接
apt-get install nodejs
apt-get install chromium
ln -s /usr/bin/chromium ./tools/browser/chromium-978106/chrome-linux/chrome
ln -s /usr/bin/node ./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/node
```
+ ### linux退出终端后脚本停止运行
```yaml
可以使用screen或者nohup等命令后台运行具体命令自行百度
nohup参考命令
nohup ./study_xxqg > xxqg.log 2>&1
退出程序可以通过**cat pid.pid**查看程序pid,然后kill对应pid进行退出
```
+ ### linux上退出后台正在执行的进程
```yaml
study_xxqg进程会在运行的时候将pid输出到目录下的pid.pid文件使用kil -9 命令即可退出后台进程
```
+ ### 刷文章或者视频无法加分
```yaml
偶尔出现视频和文章无法加分的bug,可以进行等待一段时间后重启程序再次测试,目前尚不清楚造成原因
```
+ ### Host system is missing
报错大概为这样:
```
[ERROR]: [core] 初始化chrome失败
[2022-05-13 13:43:47] [ERROR]: [core] could not send message: could not send message to server: Host system is missing dependencies!
Missing libraries are:
libgtk-3.so.0
libgdk-3.so.0
```
```shell
sudo ./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/playwright.sh install-deps
```
> 若运行后显示未找到apt-get可百度对应系统安装apt-get的方法
+ ### 为什么运行了就卡住了
当开启了cron定时配置微信公众号测试号配置telegram配置这三项的任意一项后
程序就会等待用户的指令从而卡住,所以只需要修改配置文件就可以解决

View File

@ -1,225 +0,0 @@
## 推送配置<!-- {docsify-ignore} -->
*一共有以下五种推送方式*
+ 微信公众号测试号推送
+ 网页推送
+ telegram推送
+ 微信pushPlus推送
+ 钉钉推送
> 其中pushPlus和钉钉推送相互冲突因为两种推送模式都只能单方面配合定时运行功能使用只能接收消息不能发送消息
> 在公众号测试号和tg推送以及定时三种只要配置了任意一种程序将自动卡住等待用户指令。
> 若您想打开程序就运行请关闭这三项配置当前程序默认开启cron定时,所以新版若不想程序一直等待则关闭cron即可。
> 微信公众号和网页需要公网ip,若没有建议更换其他推送方式或者自行配置内网穿透tg推送需要配置代理或者自己反代tg的api钉钉和pushPlus仅支持单向推送一般配合定时使用
### 定时配置
定时任务和一下所有推送均可配合一起使用cron的语法遵循linux标准cron语法详情可百度自行查询
因为一些不知名的bug,观看视频时可能卡住不加分,所以建议一天运行三次左右定时,同时多次定时之间间隔不要太短
为防止定时任务每天在同一时间触发,可以配置**cron_random_wait**,等待随机时间再运行任务
除此之外,还支持以下语法
+ @yearly:也可以写作@annually表示每年第一天的 0 点。等价于0 0 1 1 *
+ @monthly:表示每月第一天的 0 点。等价于0 0 1 * *
+ @weekly:表示每周第一天的 0 点,注意第一天为周日,即周六结束,周日开始的那个 0 点。等价于0 0 * * 0
+ @daily:也可以写作@midnight表示每天 0 点。等价于0 0 * * *
+ @hourly表示每小时的开始。等价于0 * * * *
+ @every duration: duration为任意时间端例如 1h,1s,1s1h30m2s代表间隔时间段就指向一次
### 微信公众号推送
配置config.yml的如下部分
```yaml
# 微信公众号测试号配置
wechat:
# 是否启用
enable: false
# 开发者平台设置的token
token: ""
# 开发者平台的secret
secret: ""
# 开发者平台的appId
app_id: ""
# 发送登录消息需要使用的消息模板
# 模板标题,随意 模板内容: 点我登录,然后在浏览器中打开!!
login_temp_id: ""
# 发送普通消息需要使用的消息模板
# 模板标题:随意 模板内容: {{data.DATA}}
normal_temp_id: ""
# xxqg会每隔两小时左右检查所有用户的ck有效性若开启该选项会在检查失败时推送提醒消息
push_login_warn: false
# 微信管理员的openid,可点击关于按钮获得,配置后请重启程序
super_open_id: ""
```
+ 前往微信[公众号开发者平台](http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login),手机微信扫码登录
+ 配置url为**http://ip:port/wx**,ip为你运行机器的公网ip,若使用docker运行端口则为宿主机中映射出来的端口ip和端口的配置和web使用同一个配置
+ 设置token,需和配置项中一样
+ 分别添加登录模板消息和普通模板消息,添加要求:
![](./img/wx_temp.jpg)
+ 在配置文件中配置所有内容,启动程序
+ 运行程序后在浏览器中访问配置的url,页面会返回``No Signature!``,然后提交配置,若成功则关注公众号尝试运行
+ docker运行方式参考[linux运行](./linux/index.md)
+ 配置成功后可点击关于按钮获取open_id然后填写到配置项的super_open_id中然后重启容器生效
### web推送
> 适用于部署在服务器上或者家里有公网IP的设备上
配置config.yml的如下部分
```yaml
web:
# 启用web
enable: true
# 监听的ip,若只需要本机访问则设置为127.0.0.1监听本机所有ip为0.0.0.0
host: 0.0.0.0
# 监听的端口号 0-65535可选
port: 8081
# web端登录管理员的账号
accountadmin
# web端登录管理员的密码
password: admin
# web端登录普通用户的账号密码支持多个用户,普通用户只能看到自己的信息
common_user:
# 代表账号为user,密码为123的普通用户可添加多个继续在下面写就好了
user: 123
# user1: 123
# user2: 123
```
+ 开启后通过浏览器访问 *http://ip:port*或者*http://ip:port/new*即可打开网址 ,若为docker运行则ip为宿主机公网ip,端口为docker映射到宿主机的端口
+ 若无法访问首先检查程序运行日志查看有无报错其次查看docker的运行情况端口是否映射正常然后可以通过curl命令检测在宿主机中能否访问然后检查防火墙之类的
+ 若点击登录之后出现一个小框然后无反应,则说明账户密码错误,请重新配置程序账户密码并重启程序
> 登录的账号密码是在配置文件中配置,不是学习强国的登录账号,管理员登录支持删除用户,同时能看到所有人的用户信息,普通用户就是```common_user```下面配置的用户,支持多个用户,键是账号,值是密码
### 钉钉推送
配置config.yml的如下部分,具体使用教程详情参考[钉钉](https://developers.dingtalk.com/document/robots/custom-robot-access?spm=ding_open_doc.document.0.0.7f875e5903iVpC#topic-2026027)
```yaml
ding:
enable: true
access_token: ""
secret: ""
```
+ 在电脑端钉钉中创建群聊在聊天设置中选择只能群助手选择添加机器人机器人类别选择webhook自定义机器人
+ 机器人名字任意机器人安全设置勾选加签复制加签的密钥作为secret配置项填入配置文件中
+ 勾选协议确认添加会出现一个webhook地址形如这样```https://oapi.dingtalk.com/robot/send?access_token=aaabbbbcccc```
+ 将上述地址中的后半段就是access_token=之后的内容作为access_token配置项填入配置文件中例如上述网址则填入aaabbbccc到access_token中
+ 设置定时cron,启动程序,程序会在定时时间运行脚本
### pushplus推送
配置config.yml的如下部分具体使用教程参考[pushplus](https://www.pushplus.plus/)
```yaml
push_plus:
enable: true
token: ""
```
### telegram推送
## Telegram Bot
配置 config.yml的如下部分
```yaml
tg:
enable: false
chat_id: 0
token: ""
# telegram的代理不配置默认走系统代理
proxy: ""
# 自定义tg的api,可通过cloudflare搭建需自备域名
custom_api: "https://api.telegram.org"
# 白名单id,包括群id或者用户id,若为空则允许所有群所有用户使用若仅用于单人直接配置上面的chat_id就可以
white_list:
- 123
```
### 配置
1. 在 Tg 中搜索[`@BotFather`](https://t.me/BotFather) ,发送指令`/newbot`创建一个 bot
2. 获取你创建好的 API Token 格式为`123456789:AAaaaa-Uuuuuuuuuuu` ,要完整复制**全部内容**
3. 在 Tg 中搜索[`@userinfobot`](https://t.me/userinfobot) ,点击`START`,它就会给你发送你的信息,记住 Id 即可,是一串数字。
4. 跟你创建的 bot 会话,点击`START`,或者发送`/start`
5. 将第 2 步获取的 token 放在`tokenn`中,第 3 步获取的 Id 放到`chat_id`中,`enable`设置为 true。
6. 因为众所周知的原因telegram推送需要进行配置代理例如clash的代理配置为```http://127.0.0.1:7890```即可若通过cf反代的api,,则填写到**custom_api**配置项
7. 若不配置代理的情况下会默认走系统代理white_list建议填写自己的chat_id,为可以使用机器人的白名单,若需要在群组中使用,请相应进行配置
增加 telegram bot 指令支持
`/login` 添加一个用户
`/get_users` 获取所有cookie有效的用户
`/study 张三` 指定账号学习,若只存在一个用户则自动选择学习
`/get_scores` 获取账户积分
`/quit` 退出正在学习的实例当长时间无响应时建议退出并查看日志然后提交issue
`/study_all` 按顺序对cookie有效的所有用户进行学习
### QQ推送配置
qq推送配置支持双向交互不过需要对接go-cqhttp框架
配置:
```yaml
qq:
# 是否启用qq推送
enable: true
# gocq端监听的地址默认是5700端口ip根据自己的网络环境调整
post_addr: "http://127.0.0.1:5700"
# 管理员qq号
super_user: 123
# gocq端配置的access_token
access_token: 123
# 白名单消息
white_list:
- 123
```
gocq端配置
```yaml
servers:
# HTTP 通信设置
- http:
# 是否关闭正向HTTP服务器
disabled: false
# 服务端监听地址
host: 127.0.0.1
# 服务端监听端口
port: 5700
# 反向HTTP超时时间, 单位秒
# 最小值为5小于5将会忽略本项设置
timeout: 5
middlewares:
<<: *default # 引用默认中间件
# 反向HTTP POST地址列表
post:
-
url: 'http://127.0.0.1:8085/qq' # 此处配置为study_xxqg的网页地址加上/qq
secret: '' # 密钥
```
更多细节请查看go-cqhttp文档
qq命令请输入```.help```查看
### PushDeer推送配置
pishDeer也仅支持单向推送
配置:
```yaml
push_deer:
enable: true
api: "https://api2.pushdeer.com"
token: ""
```
自行注册pushDeer后获取token,配置token到配置文件即可api默认为官方api,若为自建,则配置对应接口即可

File diff suppressed because one or more lines are too long

View File

@ -1,42 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="qrcode.js"></script>
<style>
.wx{
font-size: 30px;
color: red;
}
</style>
</head>
<body>
<div>
<button><a id="login" href="#"><h1>点击登录跳转学习强国app</h1></a></button>
</div>
<div id="wx" class="wx"></div>
<div id="qrcode" style="margin-top: 10px">
<img id="img" src="#" alt="#"/>
</div>
</body>
<script>
function load() {
if (isWechat()){
document.getElementById("wx").innerText = "当前为微信环境,请点击右上角浏览器中打开"
}
let search = window.location.search
search = search.substring(1,search.length)
document.getElementById("login").setAttribute("href","dtxuexi://appclient/page/study_feeds?url="+search)
console.log(unescape(search))
let imgBase64 = jrQrcode.getQrBase64(unescape(search), {});
document.getElementById("img").setAttribute("src",imgBase64)
document.getElementById("login").click()
}
function isWechat() {
return /MicroMessenger/i.test(window.navigator.userAgent);
}
load()
</script>
</html>

View File

@ -1,11 +0,0 @@
因为学习强国官方app的scheme是dtxuexi://但是大部分浏览器并不能识别该scheme,所以可以通过自行搭建跳板进行跳转。
study_xxqg官方搭建的跳板是使用github page进行搭建的可能访问情况会比较慢所以可以进自行搭建跳板。
## 搭建方法
+ 在config目录下的创建dist目录
+ 将仓库下docs目录里面的**scheme.html**和**qrcode.js**放入该目录
+ 配置scheme为**http://ip:port/dist/scheme.html?**
+ 重启程序
> 也可以通过其他静态文件服务器搭建,如 nginx等

View File

@ -1,12 +0,0 @@
* [Study_xxqg](./start.md)
* [开始使用](./start.md)
* [Windows运行](./windows/index)
* [linux运行](./linux/index)
* [源码运行](./custom/index)
* [手机运行](./lazy/index)
* [推送配置](./push.md)
* [配置文件](./config.md)
* [跳板搭建](./scheme.md)
* [常见问题](./problem.md)
* [做出贡献](./contribute.md)
* [加群交流](./joinGroup.md)

View File

@ -1,153 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Author: johlanse
Date: 2022/10/3 15:30
Description:: 用于一键安装study_xxqg
"""
import io
import os
import platform
from functools import partial
try:
import requests
except ImportError as e:
print("requests依赖不存在尝试安装依赖")
os.system("pip3 install requests")
import requests
if platform.system().lower() == "windows":
import zipfile
print = partial(print, flush=True)
def updateDependent() -> str:
"""
更新依赖的主函数
"""
system = platform.system().lower()
PyVersion_ = platform.python_version()
if system == "windows":
if platform.architecture()[0] == "64bit":
fileName = f"study_xxqg_windows_amd64.zip"
print(f"✅识别本机设备为Windows amd64,Py版本为{PyVersion_}\n")
else:
fileName = f"study_xxqg_windows_386.zip"
elif system == "darwin":
fileName = f"tlib_darwin_amd64.tar.gz"
print(f"✅识别本机设备为MacOS x86_64,Py版本为{PyVersion_}\n")
else:
framework = os.uname().machine
if framework == "x86_64":
fileName = f"study_xxqg_linux_amd64.tar.gz"
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
elif framework == "aarch64" or framework == "arm64":
fileName = f"study_xxqg_linux_arm64.tar.gz"
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
elif framework == "armv7l":
fileName = f"study_xxqg_linux_386.tar.gz"
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
else:
fileName = f"study_xxqg_linux_amd64.tar.gz"
print(f"⚠️无法识别本机设备操作系统,默认本机设备为Linux x86_64,Py版本为{PyVersion_}\n")
return fileName
def last_version() -> str:
return requests.get("https://api.github.com/repos/sjkhsl/study_xxqg/releases/latest").json().get("tag_name")
def download(github: str, version: str, binaryName: str):
print("正在下载文件中,请耐心等待!!!")
content = requests.get(f"{github}/sjkhsl/study_xxqg/releases/download/{version}/{binaryName}").content
if platform.system().lower() == "windows":
with zipfile.ZipFile(io.BytesIO(content)) as zf:
data = zf.open("study_xxqg.exe")
with open("study_xxqg.exe", "wb") as f:
f.write(data.read())
else:
with open(binaryName, "wb") as f:
f.write(content)
os.system(f"tar xvf {binaryName}")
os.remove(binaryName)
def checkYesOrNo() -> bool:
data = input("请输入:").lower()
if data == "y" or data == "yes":
return True
else:
return False
def addSystemctl():
with open("/etc/systemd/system/study_xxqg.service", "w", encoding="utf-8") as f:
f.write(f'''[Unit]
Description=study_xxqg
Documentation=study_xxqg
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Restart=always
; User and group the process will run as.
User=root
Group=root
WorkingDirectory={os.getcwd()}
ExecStart={os.getcwd()}/study_xxqg
; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
LimitNOFILE=1048576
; Unmodified caddy is not expected to use more than that.
LimitNPROC=512
[Install]
WantedBy=multi-user.target''')
def main():
github = "https://github.com"
version = last_version()
binaryName = updateDependent()
if os.path.exists("study_xxqg.exe") or os.path.exists("study_xxqg"):
print("检测到study_xxqg文件已经存在是否跳过下载(y/n)")
if not checkYesOrNo():
download(github, version, binaryName)
print("已跳过下载")
else:
download(github, version, binaryName)
if not platform.system().lower() == "windows":
print("是否将study_xxqg加入系统启动system命令(y/n)")
if checkYesOrNo():
addSystemctl()
os.system("systemctl enable study_xxqg")
print("已加入开机自启动,输入 systemctl start study_xxqg即可后台启动")
print("开始安装浏览器依赖")
try:
os.mkdir("config")
except FileExistsError as e:
pass
if platform.system().lower() == "windows":
os.system("study_xxqg --init")
else:
os.system("./study_xxqg --init")
os.system("./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/playwright install-deps")
print("是否启动study_xxqg? (y/n)")
if checkYesOrNo():
if platform.system().lower() == "windows":
os.system("study_xxqg.exe")
else:
os.system("chmod -R 777 ./study_xxqg")
os.system("./study_xxqg")
if __name__ == '__main__':
main()

View File

View File

@ -1,22 +0,0 @@
## windows使用教程
+ 浏览器访问[Release](https://github.com/sjkhsl/study_xxqg/releases)
+ 选择最新版本下载 ```study_xxqg_amd64.zip```
+ 将其解压到合适的位置
+ 进入解压后的文件夹,双击运行```study_xxqg.exe```,第一次打开可能会出现闪退发现文件夹下生成了config文件夹
+ 打开config目录下的```confif.yml```文件,进行编辑,详情内容见[配置文件](../config.md)
+ 再次进行运行```study_xxqg.exe```
+ 使用浏览器打开```http://127.0.0.1:8080```
+ 推送配置请参考[推送](../push.md)
### 自定义浏览器位置
>windows默认调用系统的edge浏览器调用目录**C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe**
>
> 若不存在该浏览器会自动尝试下载浏览器到目录下的tools文件夹下当然也可以自定义配置浏览器位置
>
> 修改配置文件的**edge_path**选项即可配置,配置为配置可执行文件的路径
>
> 自定义浏览器支持chromium内核的系列浏览器但是版本不能太高
>
> 例如我的chrome.exe文件在D盘的browser文件夹下配置为**D:/browser/chrome.exe**或者**D:\\\browser\\\chrome.exe**

11
main.go
View File

@ -210,17 +210,6 @@ func main() {
getPush := push.GetPush(config)
getPush("", "flush", "学习强国助手已上线")
if config.CustomCron != "" {
c2 := cron.New()
_, err := c2.AddFunc(config.CustomCron, func() {
getPush("all", "flush", config.CustomMessage)
})
if err != nil {
log.Errorln("添加自定义定时消息推送错误" + err.Error())
return
}
c2.Run()
}
initTask()
model.SetPush(getPush)
if now {