单个帖子提取
POST/openapi/v1/extract/post — 每次成功调用消耗 1 积分。
支持 1000+ 网站,常用网站列表见下方「支持的网站」。
curl -X POST https://api.snapany.com/openapi/v1/extract/post \
-H "Authorization: Bearer sk_snapany_xxx" \
-H "Accept-Language: zh" \
-H "Content-Type: application/json" \
-d '{"url": "https://x.com/user/status/123456"}'
响应内容一眼看全(网站未提供的字段不返回):
- 帖子:标题/正文、发布时间、规范链接、统计数据(播放 / 点赞 / 评论 / 分享)
- 作者:昵称、头像、粉丝数、是否认证
- medias:每个视频 / 图片 / 音频的可直接下载直链,附封面图与时长
- variants:视频的清晰度 / 格式档位(分辨率、编码、帧率、文件大小、分离音轨),多音轨内容的语言变体
- subtitles:多语言、多格式(srt / vtt 等)字幕直链
- headers:部分网站下载时须携带的请求头
完整字段结构与真实响应示例见 API 参考。
注意:
- 媒体直链通常短时有效(小时级),请及时下载,不要存储直链。
- 业务失败(内容已删除/私密、不支持的链接)返回 HTTP
400带错误码,不扣费。
下载媒体
带上返回的请求头:当媒体带有 headers 对象时,下载必须原样携带其中的每一个请求头——否则可能遇到 HTTP 403。空字符串值也是有意为之(比如空的 User-Agent),同样要原样发送。
import requests
media = post["medias"][0]
response = requests.get(media["resource_url"], headers=media.get("headers") or {}, stream=True)
with open("video.mp4", "wb") as f:
for chunk in response.iter_content(1 << 20):
f.write(chunk)
选清晰度变体:视频的 variants 按 quality(分辨率高度)排序,9999 表示原画质、排最前。按「不超过目标值的最近档」选取:
const variants = media.variants ?? []
const target = 1080
const pick = variants.filter(v => v.quality <= target).sort((a, b) => b.quality - a.quality)[0] ?? variants.at(-1)
合并分离的音视频流:当变体同时有 video_url 和 audio_url 时,两者是分离的流。分别下载后用 ffmpeg 合并——流复制不重编码,几秒完成。只有单个 URL 时它就是完整文件,无需合并。
ffmpeg -i video.mp4 -i audio.m4a -c copy merged.mp4
支持的网站
YouTube、TikTok、Instagram、X/Twitter、Facebook、Threads、Reddit、Pinterest、Tumblr、Vimeo、Dailymotion、VK、OK.ru、Twitch、Likee、Kwai、Suno、Sora、哔哩哔哩国际版(bilibili.tv)、小红书、哔哩哔哩、微博、微信公众号与视频号、好看视频、腾讯视频、爱奇艺、咪咕视频、搜狐视频、CCTV、网易云音乐、汽水音乐、全民 K 歌、微视、AcFun、火山、皮皮虾、皮皮搞笑、最右、梨视频、红果短剧、剪映、即梦、豆包、美拍、美图秀秀、陌陌、映客、音悦台、趣头条、小影、得物 等 1000+ 网站。
完整请求/响应结构见 API 参考。