Files
DadaoTask/backend/requirements.txt
T
Steven 626f83fb9c
CI / backend (push) Canceled after 0s
feat(wechat): 微信里发一条链接,正文和配图抓下来存成知识
公众号的文章也能抓:走 mp.weixin.qq.com 的 DOM(#js_content),
按 data-src 取图,不靠通用抽取器——它会把公众号的图全丢掉。

正文里的外链图下载进我们自己的存储(最多 12 张、单张 8 MB),
地址改成 /attachments/{id}/raw?签名:公众号那边一换图,外链就是一排红叉。

抓取入口谁都能触发,所以只允许公网地址(内网段、回环、链路本地、
保留段、解析不出的域名一律拒绝),否则就是个 SSRF 跳板。

抓不到要说人话:"这个链接没抓下来(原因)。想直接记成任务的话,
加「任务:」前缀再发一次。" 反爬验证页、SPA 空壳都走这条路。

- 新增 services/article.py:extract_url / parse / fetch / store_images / compose_body
- wechat_intake:整条消息是链接时走抓取,落知识草稿,回「已存成知识草稿:标题」
- 依赖 trafilatura==2.0.0(装法见 requirements.txt 注释:必须逐个装再 --no-deps)
- 测试 9 例:链接判定、公众号解析、验证页、通用页裁导航、SSRF 拒绝、图片本地化、失败提示
2026-11-06 00:54:21 +08:00

37 lines
1.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
fastapi==0.115.6
uvicorn[standard]==0.34.0
# 生产进程管理:gunicorn + UvicornWorker(开发用 `uvicorn --reload` 即可)
gunicorn==23.0.0
sqlalchemy[asyncio]==2.0.36
asyncpg==0.30.0
alembic==1.14.0
pydantic==2.10.4
pydantic-settings==2.7.0
pyjwt==2.10.1
redis==5.2.1
python-multipart==0.0.20
# Windows has no system tz database; ZoneInfo("Asia/Shanghai") fails without this.
# On Linux the package simply shadows the system one -- harmless.
tzdata==2026.5
# dev / test only (split into requirements-dev.txt when it grows)
pytest==8.3.4
pytest-asyncio==0.25.0
httpx==0.28.1
# 微信登录态加密(Fernet)与二维码渲染
cryptography==50.0.2
qrcode==8.2
# 微信里发来链接时抓正文:trafilatura 的正文抽取在中文站上最稳,lxml 是它的解析底座;
# lxml_html_clean 是 jusText(trafilatura 的回退抽取)还要的模块,lxml 6 起被拆成独立包。
trafilatura==2.0.0
lxml==6.1.3
lxml_html_clean==0.4.6
courlan==1.4.0
htmldate==1.11.0
jusText==3.0.2
charset-normalizer==3.5.2
urllib3==2.8.0
tld==0.13.2
dateparser==1.5.0
ruff==0.8.4