sametcn99/instaloader-api

GitHub: sametcn99/instaloader-api

基于 FastAPI 的 Instagram 内容下载 API 服务,将 Instaloader 封装为支持速率限制和自动清理的 Web 接口。

Stars: 0 | Forks: 0

# Instaloader API 一个基于 FastAPI 的 [Instaloader](https://github.com/instaloader/instaloader) 封装工具,用于下载 Instagram 个人主页内容(帖子和头像)并以 ZIP 压缩包形式提供。包含可选的身份验证、简单的速率控制以及临时下载文件的自动清理功能。 ## 功能 - 以 ZIP 格式下载主页帖子和头像 - 通过链接/短代码下载单个帖子(如果是一项内容则返回原始文件,如果是轮播内容则返回 ZIP) - 主页信息查询,包含粉丝数和认证标志 - 导出帖子元数据(文案、标签、点赞、评论、位置) - 每个请求的临时下载隔离,并带有计划清理功能 - 可配置的帖子数量和请求频率限制 ## 环境要求 - Python 3.11+ - `instaloader` 下载前提条件(具有访问 Instagram 的网络权限) ## 快速开始(本地) ``` python -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install -e . uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` 交互式文档位于 `/` (Swagger) 和 `/redoc` (ReDoc)。 ## 配置说明 设置环境变量或 `.env` 文件(会自动加载)。主要选项: | 名称 | 默认值 | 描述 | |----------------------------|----------------------|-------------------------------------------------| | `APP_NAME` | Instaloader API | 文档中使用的 API 标题 | | `APP_VERSION` | 1.0.0 | 版本号 | | `DEBUG` | false | 启用调试日志和自动重载 | | `DOWNLOAD_DIR` | /tmp/insta_downloads | 临时下载的基础目录 | | `MAX_CONCURRENT_DOWNLOADS` | 3 | 为未来的并发控制保留 | | `DOWNLOAD_TIMEOUT` | 300 | 下载超时前的秒数(服务级别) | | `INSTAGRAM_USERNAME` | None | 用于登录的 Instagram 用户名 | | `INSTAGRAM_PASSWORD` | None | 用于登录的 Instagram 密码 | | `INSTAGRAM_SESSION_FILE` | None | 已保存的 Instaloader session 文件路径 | | `RATE_LIMIT_REQUESTS` | 10 | 每个周期允许的请求数(按客户端 IP) | | `RATE_LIMIT_PERIOD` | 60 | 速率限制窗口时间(秒)(按客户端 IP) | | `AUTO_CLEANUP` | true | 启用临时文件夹的后台清理 | | `CLEANUP_AFTER_SECONDS` | 300 | 删除临时文件夹前的延迟时间 | `.env` 示例: ``` DEBUG=true INSTAGRAM_USERNAME=your_username INSTAGRAM_PASSWORD=your_password # 或使用 session 文件代替凭据 INSTAGRAM_SESSION_FILE=/path/to/session ``` ## 速率限制 - 限制按每个客户端 IP 强制执行,不在服务器上共享。 - 在反向代理/负载均衡器后,使用 `X-Forwarded-For` 中的第一条记录来识别客户端;否则使用 `request.client.host`。 - 通过 `RATE_LIMIT_REQUESTS` 和 `RATE_LIMIT_PERIOD`(秒)调整限制。 ## 使用 Docker 运行 ``` docker build -t instaloader-api . docker run -p 8000:8000 \ -e DEBUG=true \ -e INSTAGRAM_SESSION_FILE=/sessions/sessionfile \ -v $(pwd)/sessions:/sessions \ -v $(pwd)/downloads:/tmp/insta_downloads \ instaloader-api ``` 挂载 `/tmp/insta_downloads` 是可选的,但在清理运行前,可以使 ZIP 文件在容器外部保持可访问。 ## API Endpoints Base URL: `http://localhost:8000` | Method | Path | Description | | --- | --- | --- | | GET | `/health` | 健康检查 | | GET | `/profile/{username}` | 主页信息(公开;私密主页需要登录) | | GET | `/profile/{username}/posts` | 列出最近的帖子及其元数据和缩略图 | | GET | `/proxy/thumbnail` | 用于 Instagram CDN 缩略图的后端代理 | | GET | `/download/all/{username}` | 将头像和帖子作为一个 ZIP 下载 | | GET | `/download/posts/{username}` | 仅下载帖子 (ZIP) | | GET | `/download/profile-pic/{username}` | 下载头像或返回 URL | | GET | `/download/post` | 通过链接/短代码下载单个帖子(文件或 ZIP) | 常用的 query 参数: - `max_posts` (int, 1-1000):限制帖子数量(在支持的情况下) - `include_metadata` (bool):为每个帖子保存 `metadata.txt`(默认为 `true`) - `url_only` (bool):对于头像 endpoint,返回图片 URL 而不是文件 ## 使用示例 健康检查: ``` curl http://localhost:8000/health ``` 主页信息: ``` curl http://localhost:8000/profile/instagram ``` 下载所有内容: ``` curl -L -o instagram.zip \ "http://localhost:8000/download/all/instagram?max_posts=50&include_metadata=true" ``` 仅下载帖子: ``` curl -L -o instagram_posts.zip \ "http://localhost:8000/download/posts/instagram?max_posts=25" ``` 下载头像文件: ``` curl -L -o profile.jpg \ "http://localhost:8000/download/profile-pic/instagram" ``` 仅获取头像 URL: ``` curl "http://localhost:8000/download/profile-pic/instagram?url_only=true" ``` 通过链接下载单个帖子(如果是一项媒体则返回文件,如果是多项则返回 ZIP): ``` curl -L -o post.bin \ "http://localhost:8000/download/post?url=https://www.instagram.com/p/POSTCODE/" ```
标签:AV绕过, FastAPI, Instagram, Python, RESTful API, URL抓取, 提示词优化, 数据抓取, 文件下载, 无后门, 请求拦截, 逆向工具