Skip to content

VidsHidden/scipush

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open Literature Push

一个可开源、可部署的网站版个性化文献推送系统。项目默认面向细胞生物学研0学生,使用 PubMed 官方 E-utilities 检索近期论文,按个人关键词偏好打分排序,并支持 Markdown 日报、命令行定时任务和邮件推送。

功能

  • 网站表单:在线调整检索式、关键词权重、检索天数和推送篇数。
  • PubMed 检索:不依赖爬虫,使用官方接口。
  • 个性化排序:核心词加权、扩展词加权、低价值词降权。
  • Markdown 导出:适合保存、发给导师或同步到知识库。
  • 本地定时:Windows 计划任务脚本。
  • 邮件推送:支持 SMTP,可选开启。
  • 开源部署:内置 Flask、Gunicorn、Render 配置。

快速开始

运行网站

安装依赖:

pip install -r requirements.txt

启动网站:

python app.py

浏览器打开:

http://127.0.0.1:5000

Windows 也可以直接双击 start_web.bat,或在 PowerShell 运行:

.\start_web.ps1

使用网站时请保持启动窗口不要关闭;关闭窗口后网站也会停止。

运行命令行定时推送

  1. 复制配置:
Copy-Item config.example.toml config.toml
  1. 编辑 config.toml
  • search.pubmed_query:改成你当前课题最相关的关键词。
  • ranking.must_have / nice_to_have:决定排序偏好。
  • email.enabled:需要邮件推送时改为 true 并填写 SMTP。
  1. 试运行:
python literature_push.py --config config.toml --dry-run

报告会生成在 reports/

  1. 注册每天定时任务:
.\schedule_windows.ps1 -Time "08:30"

部署到网站

Vercel

项目已包含 Vercel 部署入口:

  • api/index.py:Vercel Python Serverless 入口
  • vercel.json:路由和 Cron 配置
  • /api/cron/push:定时推送入口

Hobby 计划下建议不要使用 Vercel Cron 做每小时任务。项目改为:

  • Vercel:部署网站和 /api/cron/push 推送接口
  • GitHub Actions:每小时调用一次 /api/cron/push

.github/workflows/cron-push.yml 中的计划任务:

schedule:
  - cron: "0 * * * *"

系统不会每小时都给用户发邮件,而是由每个订阅自己的设置决定是否到点发送。用户可以设置:

  • 每天
  • 工作日
  • 每周
  • 暂停
  • 推送时间,按 Asia/Shanghai 解释

如果用户设置 08:30,由于 Cron 每小时触发,通常会在 09:00 这一轮补发,不会在 08:00 提前发送。

GitHub Actions 定时推送配置

在 GitHub 仓库 Settings → Secrets and variables → Actions 中添加:

Repository secret:

SCIPUSH_CRON_SECRET=和 Vercel 环境变量 CRON_SECRET 完全相同的值

Repository variable:

SCIPUSH_CRON_URL=https://scipush.vercel.app/api/cron/push

也可以在 Actions 页面手动运行 Scheduled literature push,用于立即测试定时入口。

1. 配置数据库

本地开发默认使用 SQLite;Vercel 生产环境必须使用持久数据库。推荐在 Vercel Marketplace 添加 Neon/Postgres,并获得:

DATABASE_URL

如果没有 DATABASE_URL,订阅和去重数据无法在 Vercel Serverless 环境中长期保存。

2. 配置环境变量

在 Vercel Project Settings → Environment Variables 中添加:

DATABASE_URL=你的 Neon/Postgres 连接串
SMTP_HOST=smtp.163.com
SMTP_PORT=465
SMTP_USE_SSL=true
SMTP_USERNAME=scipush@163.com
SMTP_PASSWORD=你的 SMTP 授权码
SMTP_FROM=scipush@163.com
PUBLIC_BASE_URL=https://你的-vercel-域名
SECRET_KEY=生成一个长随机字符串,用于登录会话
CRON_SECRET=生成一个长随机字符串

SMTP_PASSWORDCRON_SECRET 不要提交到 GitHub。

3. 导入 GitHub 仓库

  1. 把代码推送到 GitHub。
  2. 打开 Vercel Dashboard,选择 Add New → Project。
  3. 导入 GitHub 仓库 VidsHidden/scipush
  4. Framework Preset 选择 Other。
  5. 部署后,把 PUBLIC_BASE_URL 改成 Vercel 分配的正式域名。

4. 本地 Vercel CLI 可选流程

npm i -g vercel
vercel login
vercel
vercel --prod

Render

  1. 把项目推送到 GitHub。
  2. 打开 Render,选择 New Web Service。
  3. 连接 GitHub 仓库。
  4. Render 会读取 render.yaml,使用:
Build Command: pip install -r requirements.txt
Start Command: gunicorn app:app
  1. 部署完成后即可通过 Render 分配的域名访问。

其他平台

只要平台支持 Python Web 服务即可:

pip install -r requirements.txt
gunicorn app:app

本项目也可以部署到 Railway、Fly.io、VPS、学校服务器或 Docker 化后部署。

Docker

docker build -t open-literature-push .
docker run -p 8000:8000 open-literature-push

访问:

http://127.0.0.1:8000

开源发布建议

建议创建 GitHub 仓库后补充:

  • 仓库名称:open-literature-push
  • 项目简介:Personalized PubMed literature push for biology students and labs
  • License:MIT
  • Topics:pubmed, literature-review, flask, biology, open-source

不要提交个人配置和邮箱授权码;.gitignore 已排除 config.toml、数据库、报告和日志。

推送机制

网站本身负责保存订阅条件,真正的推送由 push_worker.py 定时执行:

  1. 读取 data/subscriptions.sqlite3 中的订阅。
  2. 按每个订阅的研究领域、关键词、文章体裁和期刊筛选检索 PubMed。
  3. 按个性化规则打分排序。
  4. 用订阅级别的去重表过滤已经推送过的 PMID。
  5. 通过 SMTP 发送邮件,并在邮件底部附带退订链接。

在网站中保存订阅

启动网站后,填写检索条件和“推送邮箱”,点击“保存推送订阅”。

配置 SMTP

push_worker.py 使用环境变量读取邮件配置:

[Environment]::SetEnvironmentVariable("SMTP_HOST", "smtp.example.com", "User")
[Environment]::SetEnvironmentVariable("SMTP_PORT", "587", "User")
[Environment]::SetEnvironmentVariable("SMTP_USERNAME", "your_email@example.com", "User")
[Environment]::SetEnvironmentVariable("SMTP_PASSWORD", "你的SMTP授权码", "User")
[Environment]::SetEnvironmentVariable("SMTP_FROM", "your_email@example.com", "User")
[Environment]::SetEnvironmentVariable("PUBLIC_BASE_URL", "http://127.0.0.1:5000", "User")

设置后重新打开 PowerShell。

免费试水 AI 翻译

默认 AI provider 是 Gemini。先在 .env 里加入:

AI_TRANSLATION_PROVIDER=gemini
AI_TRANSLATION_MODEL=gemini-2.5-flash-lite
AI_TRANSLATION_API_KEY=你的 Gemini API Key
AI_TRANSLATION_ENABLED=true

AI_SUMMARY_PROVIDER=gemini
AI_SUMMARY_MODEL=gemini-2.5-flash-lite
AI_SUMMARY_API_KEY=你的 Gemini API Key
AI_PUSH_SUMMARY_ENABLED=false

保存订阅时可选择目标语言,并勾选“双语标题和摘要”。系统会缓存每篇 PMID 的译文;API 不可用时仍会发送英文原文。若要试用推送小结,把订阅中的“生成 AI 推送小结”勾上,并将 AI_PUSH_SUMMARY_ENABLED=true

如果翻译和小结暂时共用同一个 API,也可以继续使用旧变量作为 fallback:

AI_PROVIDER=gemini
AI_MODEL=gemini-2.5-flash-lite
AI_API_KEY=你的 Gemini API Key

接入 DeepSeek

DeepSeek 兼容 OpenAI Chat Completions。可以只把小结切到 DeepSeek:

AI_SUMMARY_PROVIDER=deepseek
AI_SUMMARY_MODEL=deepseek-v4-flash
AI_SUMMARY_API_KEY=你的 DeepSeek API Key
AI_SUMMARY_BASE_URL=https://api.deepseek.com
AI_PUSH_SUMMARY_ENABLED=true

也可以把翻译切到 DeepSeek:

AI_TRANSLATION_PROVIDER=deepseek
AI_TRANSLATION_MODEL=deepseek-v4-flash
AI_TRANSLATION_API_KEY=你的 DeepSeek API Key
AI_TRANSLATION_BASE_URL=https://api.deepseek.com
AI_TRANSLATION_ENABLED=true

AI_*_BASE_URL 对 DeepSeek 可省略,默认就是 https://api.deepseek.com。如果两个功能共用同一个 DeepSeek Key,也可以只设置一次:

DEEPSEEK_API_KEY=你的 DeepSeek API Key

手动测试推送

python push_worker.py --dry-run

真实发送:

python push_worker.py

登录后也可以在“我的订阅”中点击“立即测试推送”。测试推送会发送当前订阅匹配结果,但不会写入正式去重记录,不影响下一次正常定时推送。

预览邮件样式

生成本地 HTML demo,不发送邮件:

python demo_email.py

打开:

reports/email_demo.html

网站运行时也可以访问:

http://127.0.0.1:5000/email-demo

每天定时推送

.\schedule_push_worker.ps1 -Time "08:30"

旧版单配置邮件推送

如果使用邮箱 SMTP,把 config.toml[email] 填好,并设置邮箱授权码环境变量:

[Environment]::SetEnvironmentVariable("LIT_PUSH_EMAIL_PASSWORD", "你的SMTP授权码", "User")

之后重新打开 PowerShell 或重启电脑,让环境变量生效。

个性化建议

当前默认配置参考了你的背景和课题组网页公开方向,偏向:

  • 细胞生物学机制
  • 免疫与炎症
  • 单细胞/空间组学
  • 系统生物学与生物信息
  • 疾病、治疗和标志物相关研究

当你明确进入具体课题后,建议把默认词替换为更窄的组合。例如:

(autophagy OR lysosome OR mitochondria) AND (immune OR inflammation) AND single-cell

或:

(tumor microenvironment OR macrophage OR T cell) AND (spatial transcriptomics OR single-cell)

输出与去重

  • 报告:reports/literature_push_YYYYMMDD_HHMMSS.md
  • 去重数据库:data/literature_push.sqlite3

如果想从头重新推送,删除 data/literature_push.sqlite3 即可。

路线图

  • 用户账号与个人配置保存
  • 每日/每周邮件队列
  • RSS 和 bioRxiv 支持
  • LLM 摘要与中文解读
  • Zotero / Notion / Obsidian 导出

About

个性化的文献推送系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors