- 业务流程:用户访问页面,提交需要订阅的内容和时间(可自行定义服务),程序调度爬虫适时进行邮件推送。
- 本项目采用前后端分离架构。后端业务处理基于 SpringBoot + MyBatis,爬虫基于Python编写;前端使用 Ace Admin 作为模板
- 使用 Redis 作为缓存
- 采用 Nginx 搭建服务器,托管前端代码,同时解决前后端的跨域问题
- 不能及时或不想自己手动获取信息
- 网络上信息获取需求不能满足(例如没有现成的需求信息的推送服务)
- 用户添加订阅(选择服务、推送时间),可选择系统自带服务,也可自定义服务(暂未实现不同服务选择各自的推送时间);
- 已经添加过订阅服务的用户,输入信息时会自动填充以往提交的内容,方便取消订阅;
- 该页面的“接收订阅”一栏中,可切换推送状态(打开/关闭)。另外,在选择推送时间“第二步 Alert”里面,也可以关闭推送服务。
- 用户自定义服务功能。用户上传.py的爬虫文件,且一个爬虫文件只能对应一个服务;若有多个爬虫相关联,则选择其中一个文件用于返回格式化后的内容,格式如下:
由于邮件内容采用html格式,因此,内容推荐使用html构造,以方便接收者查看。最后转为字符串返回。
def process(): content = "(返回的内容)" # 此为发送到邮件的内容,推荐使用html格式 ... return str(content) # 将其转化为字符串并返回给调度文件customize.py
- 首先上传.py的爬虫文件(不能与服务器已有文件重名),上传成功后选择一个对应的.py文件,然后输入自定义服务信息进行提交。
- 添加成功后可选择是否继续添加服务:
- 若是,则留在本页继续添加,注意不要刷新页面,因为后文件的显示会丢失;
- 否则,回到服务订阅页面进行订阅。
- 查看服务信息:编号、名称、订阅量、类型、爬虫文件、发布者、备注、创建时间和状态等
- 修改状态:启用/禁用
- 删除服务(暂未实现修改服务信息)
- 导出服务列表到.CSV文件
- 打印服务列表
- 查看用户信息: 编号、用户名、邮箱、权限、用户类型和注册时间等
- 此处用户数据显示使用 WebSocket 实时推送更新
- 修改用户:使用ajax动态修改数据并显示,可修改的内容仅有用户名、邮箱、权限和用户类型
- 删除用户:每一行的“操作”为单独修改方式,表格下方的删除和编辑为批量修改方式
- 添加用户:左下方的“加号”按钮,仅能添加邮箱、权限和用户类型,用户名需要点击编辑才能修改(bug)
Java 1.8
MySQL 5.7
Nginx: latest stable version
Python 3.6
Redis: latest stable version
- git clone 项目
my-subscription
到本地 - 新建数据库
db_mail_send
,选择utf8mb4
编码,运行config/database/
中的.sql文件进行导入 - 配置 Nginx,参考
config/nginx/conf
中的文件,将html/ace-master
文件夹以移动到本地 nginx 的html
目录下 - 配置 Redis,配置应与
application.yml
设置一致(自定义) - 运行 Tomcat 服务器,启动项目
- 启动 Python 调度:控制台执行命令:
python (该文件所在的目录路径)/process_util.py
- 所有Python文件位于
crawlers/**
:
stable
文件夹为爬虫的稳定版本,beta
为测试版本,beta/customize
为用户自定义文件存放位置- database_util.py:数据库工具文件,注意修改登录配置信息
- mail_assist.py:邮件发送工具文件,根据内容进行信息配置,需要开通smtp服务
- spider_hot.py:管理员编写的爬虫文件,整合了
weibo_spider.py
(微博热搜)、zhihu_spider.py
(知乎热搜)、covid19_spider.py
(国内新冠疫情每日新增信息) - spider_customize.py:用户自定义爬虫调度工具文件,扫描文件的路径根据实际情况修改
- process_util.py:总调度文件,在每日的8点、12点、20点启动程序,可按需修改
-
html/ace-master文件夹中,修改过的文件以"*-copy.html"结尾
-
修改后端代码(IDEA项目文件夹:MySubcription)
- 根据个人情况修改applicaiton.yml中的内容
- 用户自定义上传的文件路径位于
com/lzc/util/FileUtils.java
的常量FILEPATH
,根据情况修改
-
本项目采用前后端分离,前端使用 Ajax 与后端进行数据交互,这时会出现跨域访问。由于安全性(同源策略),有些浏览器是禁止跨域访问的(借助
Access-Control-Allow-Origin
),这个时候就引入了 Nginx 进行反向代理,以便满足浏览器的 同源策略 实现跨域。本项目中的 Nginx 还有一方面的作用是作为 静态资源服务器 。
- Fork 本仓库
- 新建 dev 分支
- 提交代码
- 新建 Pull Request