ReClip API完整参考:从/api/info到/api/file的5个端点全文档
2026/9/16 14:56:36 网站建设 项目流程

ReClip API完整参考:从/api/info到/api/file的5个端点全文档

【免费下载链接】reclipDownload videos from almost any website. Lightweight, self-hosted media downloader with a clean web UI.项目地址: https://gitcode.com/GitHub_Trending/rec/reclip

ReClip 是一款轻量、可自托管的视频下载器(支持从 YouTube、TikTok、Instagram 等 1000+ 网站下载 MP4/MP3),它的后端全部功能都由 5 个 REST API 端点驱动:/api/info/api/playlist/api/download/api/status/api/file。本文是一份面向新手的 ReClip API 完整参考,帮你快速搞懂每个端点的请求参数、返回格式和调用顺序。

📋 ReClip 的5个API端点一览

ReClip 后端只有一个约 150 行的 Python 文件 app.py,5 个端点全部定义在其中:

端点方法作用源码位置
/api/infoPOST解析视频链接,返回标题、封面、时长、清晰度列表app.py#L81-L124
/api/playlistPOST把播放列表链接展开成单个视频 URLapp.py#L127-L147
/api/downloadPOST创建下载任务,返回job_idapp.py#L150-L168
/api/status/<job_id>GET查询任务状态(下载中/完成/失败)app.py#L171-L180
/api/file/<job_id>GET下载已完成的任务文件app.py#L183-L188

服务默认监听8899端口(可通过环境变量PORT修改),启动脚本为 reclip.sh,也可用 docker-compose.yml 一键部署。

🎬 端点一:/api/info 查询视频信息

这是整个流程的入口。前端点击 "Fetch" 时,就会调用它来拉取视频元数据。

请求:POST,JSON 体只需一个字段:

{ "url": "https://www.youtube.com/watch?v=xxxx" }

成功响应

{ "title": "视频标题", "thumbnail": "封面图URL", "duration": 210, "uploader": "上传者", "formats": [ { "id": "22", "label": "720p", "height": 720 }, { "id": "18", "label": "360p", "height": 360 } ] }

formats清晰度列表,每个分辨率只保留码率最高的一路,并按分辨率从高到低排序——这正是页面上那排清晰度选择按钮的数据来源(见 templates/index.html)。

💡小贴士:该端点超时限制为 60 秒;URL 不支持或视频不可用时,会返回400状态码和{"error": "原因"}

📺 端点二:/api/playlist 展开播放列表

粘贴带list=参数的 YouTube 播放列表链接时,前端会自动先调用这个端点,把列表"炸开"成一批单视频 URL,再逐个走/api/info

请求

{ "url": "https://www.youtube.com/watch?v=xxx&list=PLxxxx" }

成功响应

{ "urls": ["https://...单个视频1", "https://...单个视频2"] }

注意它返回的是纯 URL 数组,不含视频详情——详情仍需逐个通过/api/info获取。

⬇️ 端点三:/api/download 创建下载任务

确定好视频和格式后,调用它启动下载。任务在后台线程中执行(由 yt-dlp 引擎驱动),接口会立刻返回,不会阻塞。

请求(4 个字段):

{ "url": "视频URL", "format": "video", "format_id": "22", "title": "视频标题" }
  • format"video"输出 MP4,"audio"输出 MP3(会忽略format_id
  • format_id/api/info返回的清晰度 id,省略则取"最佳画质"
  • title:用于生成友好的下载文件名(非法字符会被自动清理)

成功响应

{ "job_id": "a1b2c3d4e5" }

⏱️ 每个下载任务有 5 分钟超时上限。

⏳ 端点四:/api/status/<job_id> 轮询任务状态

前端拿到job_id后会每秒轮询一次此端点(轮询逻辑见 templates/index.html),直到状态不再是downloading

请求:GET,无需任何参数,job_id放在路径里。

成功响应

{ "status": "done", "error": null, "filename": "视频标题.mp4" }

status三种取值:downloading(进行中)、done(完成,附带filename)、error(失败,error字段给出原因)。如果job_id不存在,返回404 {"error": "Job not found"}

📥 端点五:/api/file/<job_id> 取回下载好的文件

最后一个端点最简单:任务done之后,GET 这个地址就能把文件当作附件下载(浏览器直接触发保存)。

响应

  • 文件就绪:直接返回 MP4/MP3 文件流,文件名来自任务的filename
  • 文件未就绪:404 {"error": "File not ready"}

文件会先保存在服务器本地的downloads/目录中,downloads/目录由 app.py#L10-L11 自动创建。

🔗 5个端点串起来:完整调用流程

实际使用时,5 个端点按以下顺序协作,也就是页面上"粘贴链接 → 点 Fetch → 点 Download"背后发生的事:

  1. (可选)链接是播放列表?先调/api/playlist展开成单视频
  2. /api/info拿标题、封面和清晰度
  3. 用户选格式后调/api/download,拿到job_id
  4. 轮询/api/status/<job_id>直到done
  5. 请求/api/file/<job_id>把文件保存到本地

批量下载场景下,前端会对每个视频重复第 3~5 步,实现"一键全部下载"。

⚠️ 错误码速查表

状态码返回含义
400{"error": "No URL provided"}请求体缺少url字段
400{"error": "<yt-dlp 错误信息>"}URL 不支持、视频私密/被删、地区受限等
400{"error": "Timed out ..."}解析超时(60 秒)
404{"error": "Job not found"}job_id不存在(任务记录在内存中,服务重启即丢失)
404{"error": "File not ready"}任务还没到done状态就去取文件

🏁 总结:如何跑起来验证这些API

ReClip 依赖极简,requirements.txt 只有flaskyt-dlp两个 Python 包(另需系统安装 ffmpeg)。两种部署方式任选:

  • 本地运行git clone https://gitcode.com/GitHub_Trending/rec/reclip后执行./reclip.sh,浏览器打开http://localhost:8899
  • Docker 运行:用 Dockerfile 构建镜像,gunicorn 单进程 4 线程启动,下载文件通过数据卷持久化

理解这 5 个端点后,你甚至可以用 curl 或任何 HTTP 客户端编写自己的 ReClip 调用脚本,把它嵌入自动化流程中。

提示:本工具仅供个人学习使用,请遵守各平台的服务条款与版权法规。

【免费下载链接】reclipDownload videos from almost any website. Lightweight, self-hosted media downloader with a clean web UI.项目地址: https://gitcode.com/GitHub_Trending/rec/reclip

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询