解析分享链接
把小红书、抖音、B 站、微信公众号的链接换成一条一个文件夹:正文、作者、点赞收藏、原图、视频,B 站另有字幕和评论;抖音、小红书传作者主页就翻完这个人发的全部,公众号用 --account 取一个号最新的文章。一个平台一个脚本,各平台一页:页面上面写脚本怎么跑,下面写底层接口和请求参数,脚本出错、要改脚本或者只要其中一样时看底层。
| 平台 | 脚本 | 正文、作者、点赞收藏 | 图 | 视频 | 字幕、评论 | 作者主页 | 背后调谁 |
|---|---|---|---|---|---|---|---|
| 小红书 | xiaohongshu.py | ✅ | 原图;轮播视频也给原图 | 真视频才有 | — | ✅ 每条 0.01 美元 | TikHub,真视频另调下载狗 |
| 抖音 | douyin.py | ✅ | 图文给无水印 JPEG | ✅ | — | ✅ 20 条 0.001 美元 | TikHub 取元数据,下载狗取视频 |
| B 站视频 | bilibili.py | ✅,另有播放、投币、弹幕数 | 封面 | 每P一个 | 字幕多半要登录才给;评论加 --comments | — | B 站公开接口,下载狗取视频 |
| B 站图文动态 | bilibili.py | ✅ | 文中全部图 | — | 评论加 --comments | — | 公开页面 |
| 微信公众号 | wechat_mp.py | ✅;阅读、点赞、在看加 --stats,每篇 0.01 美元 | 文中全部原图 | — | — | --account,约 25 篇一页 0.01 美元 | 文章页直取,TikHub 翻列表 |
| 其他平台 | xiazaitool.py | 只有标题 | 有就给 | 有就给 | — | — | 下载狗 |
跑脚本
- 先载入
MY_API_KEY,见 Agent 基础能力 · 用法。只用 Python 标准库,不用装包,也不用 ffmpeg - 平台脚本都 import 同目录的
share_common.py,所以调用一次也要整包:直接将Agent 基础能力下载到本地。本地有本 wiki 的仓库就直接跑docs/skills/agent-io/scripts/下的 - 每个脚本只认自己平台的链接:传错了那一条报错、提示换哪个脚本,其余照常取完。几个平台混在一起,就按平台分几次跑,
--out用同一个目录 - 输出:每条一个子文件夹
<平台>_<键>/,键是链接里直接认得出的 ID,短链就是短链码,真正的 ID 在meta.json的id。里面是meta.json、images/01.jpg…、cover.jpg、video/p01.mp4…(图片扩展名按文件实际格式,B 站图文多是.png,抖音封面是.webp),B 站图文、公众号文章另有article.md,B 站视频另有subtitles/p01_<语言>.srt,加--comments有comments.json;raw/存各家的原样返回 meta.json:kind是image(图文)、carousel(小红书拿一组图拼的轮播视频,原图都在images/)、video或article(B 站图文、公众号文章);另有title、desc、author、stats、published、duration、topics、files、cost、warnings、error。parts每P一条:page、cid、title、duration、video、subtitles,不分P的也是一条- stdout:每条一行 JSON 摘要,最后一行是总花费;有一条失败,退出码就是 1
- 共用参数:
--no-video不下视频,也省下下载狗;--force重新取,重新扣钱。B 站另有--parts和--comments,见 B 站;公众号的参数不一样,见微信公众号 - 重跑不扣钱:文件夹里已有不带
error的meta.json就跳过 - 下载中断了就原样重跑:断网、磁盘满这类下载失败只记进
warnings,meta.json照样写;重跑时先用raw/里的直链免费补下,直链过期了才重新解析那一P --out放在空间够的盘上:一篇 B 站长图文的原图就上百 MB- 出错时:
error写着哪一步失败,raw/里是那家的原样返回,对照那个平台页的底层接口接着调
作者主页:翻完一个人发的全部
抖音、小红书的脚本认得作者主页链接:douyin.com/user/<sec_uid>、xiaohongshu.com/user/profile/<用户 ID>,或者跳转到主页的短链。传进去就从新到旧翻完,命令和单条一样:
- 每条作品照单条的格式一个文件夹:放在
--out下,和单独取过的同名,取过的直接跳过 - 另写一个
<平台>_user_<作者 ID>/list.json:author、complete(这次翻到底了没有),items每条有id、url、title、published、pinned、kind、stats、dir。要做统计直接读它;raw/存每一页的原样返回 - 默认不下视频:一个主页往往上百个视频,要视频加
--video。--limit N只取列表前 N 条,置顶的排在最前面 - 花费:抖音 20 条一页,每页 0.001 美元,列表已经带齐全部字段,不用再一条条取;小红书 20 条一页,每页 0.01 美元,但列表里的正文截到 100 字、没有原图,每条还要另调一次详情,0.01 美元
- 超过 1 美元先停:详情合计超过 1 美元时,脚本翻完列表就停,
error里写着条数和预估花费。先报给用户,同意了加--yes重跑,或者用--limit N只取一部分 - 重跑只补新发的:上次翻到底的,这次翻到见过的那条就停;
--force从头翻,每条重新取 - 公众号没有主页链接:用
--account传号名、gh_号或这个号的一篇文章链接,默认只取最新 20 篇,文件夹和list.json照上面的格式,见微信公众号 - stdout:一个主页只出一行摘要:
listed是列表条数,posts、cached是这次处理了几条、其中几条之前取过,失败的列在failed
底层:下载狗
视频直链靠它,三个平台都用;其他平台只能靠它,脚本是 xiazaitool.py,只给标题和媒体。经中转的国内机:
curl -sS -m 90 -G https://xiazaitool-proxy.liuhetian.work/ \
-H "Authorization: Bearer $MY_API_KEY" \
--data-urlencode "url=<分享链接>"
- 只传链接:先从分享文案里抽出 URL 再传,整段文案里的引号、换行会把中转拼的 JSON 弄坏
- 结果:
status为 200 才算成功。data.isVideo为真下data.videoUrls,为假下data.pics。videoUrls一般是一个字符串,B 站有时是数组,两种都要处理;coverUrls是字符串;pics是数组,视频笔记里是[""] - 只信媒体:小红书的正文、作者是空的,点赞收藏是 0,发布时间是空串;抖音给统计数,没有作者
- 失败重试:偶尔返回 500「解析失败」,同一链接重试一两次;同一条抖音也碰到过半天都解析不了。失败不扣次数,成功一次扣 0.005 元
- 耗时:B 站 0.5 秒左右,抖音、小红书几秒到十几秒,超时设一分钟以上
- 下载直链:直接下,不经过中转。B 站带上
Referer: https://www.bilibili.com/;抖音直链一小时左右过期,解析完马上下
维护记录:为什么两家一起用、为什么按平台拆、各字段稳不稳、实测结果、没做的事。正常使用不用看,想换接口或者排查怪现象时再看。