介绍
# Vimeo
通过托管的 OAuth 身份验证访问 Vimeo API。上传和管理视频,创建展示和文件夹,管理“喜欢”和“稍后观看”,并与 Vimeo 社区互动。
## 快速开始
```bash # Get current user info python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/vimeo/me') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
## 基础 URL
``` https://gateway.maton.ai/vimeo/{resource} ```
该网关将请求代理到 `api.vimeo.com` 并自动注入您的 OAuth 令牌。
## 身份验证
所有请求都需要在 Authorization 头中包含 Maton API 密钥:
``` Authorization: Bearer $MATON_API_KEY ```
**环境变量:** 将您的 API 密钥设置为 `MATON_API_KEY`:
```bash export MATON_API_KEY="YOUR_API_KEY" ```
### 获取您的 API 密钥
1. 在 [maton.ai](https://maton.ai) 登录或创建一个账户 2. 前往 [maton.ai/settings](https://maton.ai/settings) 3. 复制您的 API 密钥
## 连接管理
在 `https://ctrl.maton.ai` 管理您的 Vimeo OAuth 连接。
### 列出连接
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=vimeo&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 创建连接
```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'vimeo'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 获取连接
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
**响应:** ```json { "connection": { "connection_id": "a6ecb894-3148-4f4c-a54c-e9d917e3f2a9", "status": "ACTIVE", "creation_time": "2026-02-09T08:56:53.522100Z", "last_updated_time": "2026-02-09T08:58:39.407864Z", "url": "https://connect.maton.ai/?session_token=...", "app": "vimeo", "metadata": {} } } ```
在浏览器中打开返回的 `url` 以完成 OAuth 授权。
### 删除连接
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 指定连接
如果您有多个 Vimeo 连接,请使用 `Maton-Connection` 头指定要使用的连接:
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/vimeo/me') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', 'a6ecb894-3148-4f4c-a54c-e9d917e3f2a9') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
如果省略,网关将使用默认(最早)的活跃连接。
## API 参考
### 用户操作
#### 获取当前用户
```bash GET /vimeo/me ```
**响应:** ```json { "uri": "/users/254399456", "name": "Chris", "link": "https://vimeo.com/user254399456", "account": "free", "created_time": "2026-02-09T07:00:20+00:00", "pictures": {...}, "metadata": { "connections": { "videos": {"uri": "/users/254399456/videos", "total": 2}, "albums": {"uri": "/users/254399456/albums", "total": 0}, "folders": {"uri": "/users/254399456/folders", "total": 0}, "likes": {"uri": "/users/254399456/likes", "total": 0}, "followers": {"uri": "/users/254399456/followers", "total": 0}, "following": {"uri": "/users/254399456/following", "total": 0} } } } ```
#### 根据 ID 获取用户
```bash GET /vimeo/users/{user_id} ```
#### 获取用户动态
```bash GET /vimeo/me/feed ```
### 视频操作
#### 列出用户视频
```bash GET /vimeo/me/videos ```
**响应:** ```json { "total": 2, "page": 1, "per_page": 25, "paging": { "next": null, "previous": null, "first": "/me/videos?page=1", "last": "/me/videos?page=1" }, "data": [ { "uri": "/videos/1163160198", "name": "My Video", "description": "Video description", "link": "https://vimeo.com/1163160198", "duration": 20, "width": 1920, "height": 1080, "created_time": "2026-02-09T07:05:00+00:00" } ] } ```
#### 获取视频
```bash GET /vimeo/videos/{video_id} ```
#### 搜索视频
```bash GET /vimeo/videos?query=nature&per_page=10 ```
查询参数: - `query` - 搜索查询 - `per_page` - 每页结果数(最多 100) - `page` - 页码 - `sort` - 排序方式:`relevant`(相关)、`date`(日期)、`alphabetical`(字母顺序)、`plays`(播放量)、`likes`(喜欢数)、`comments`(评论数)、`duration`(时长) - `direction` - 排序方向:`asc`(升序)、`desc`(降序)
#### 更新视频
```bash PATCH /vimeo/videos/{video_id} Content-Type: application/json
{ "name": "New Video Title", "description": "Updated description" } ```
#### 删除视频
```bash DELETE /vimeo/videos/{video_id} ```
成功时返回 204 No Content。
### 文件夹操作(项目)
#### 列出文件夹
```bash GET /vimeo/me/folders ```
**响应:** ```json { "total": 1, "page": 1, "per_page": 25, "data": [ { "uri": "/users/254399456/projects/28177219", "name": "My Folder", "created_time": "2026-02-09T08:59:20+00:00", "privacy": {"view": "nobody"}, "manage_link": "https://vimeo.com/user/254399456/folder/28177219" } ] } ```
#### 创建文件夹
```bash POST /vimeo/me/folders Content-Type: application/json
{ "name": "New Folder" } ```
#### 更新文件夹
```bash PATCH /vimeo/me/projects/{project_id} Content-Type: application/json
{ "name": "Renamed Folder" } ```
#### 删除文件夹
```bash DELETE /vimeo/me/projects/{project_id} ```
成功时返回 204 No Content。
#### 获取文件夹中的视频
```bash GET /vimeo/me/projects/{project_id}/videos ```
#### 添加视频到文件夹
```bash PUT /vimeo/me/projects/{project_id}/videos/{video_id} ```
成功时返回 204 No Content。
#### 从文件夹中移除视频
```bash DELETE /vimeo/me/projects/{project_id}/videos/{video_id} ```
### 合集操作(展示)
#### 列出合集
```bash GET /vimeo/me/albums ```
#### 创建合集
```bash POST /vimeo/me/albums Content-Type: application/json
{ "name": "My Showcase", "description": "A collection of videos" } ```
**响应:** ```json { "uri": "/users/254399456/albums/12099981", "name": "My Showcase", "description": "A collection of videos", "created_time": "2026-02-09T09:00:00+00:00" } ```
#### 更新合集
```bash PATCH /vimeo/me/albums/{album_id} Content-Type: application/json
{ "name": "Updated Showcase Name" } ```
#### 删除合集
```bash DELETE /vimeo/me/albums/{album_id} ```
成功时返回 204 No Content。
#### 获取合集中的视频
```bash GET /vimeo/me/albums/{album_id}/videos ```
#### 添加视频到合集
```bash PUT /vimeo/me/albums/{album_id}/videos/{video_id} ```
成功时返回 204 No Content。
#### 从合集中移除视频
```bash DELETE /vimeo/me/albums/{album_id}/videos/{video_id} ```
### 评论
#### 获取视频评论
```bash GET /vimeo/videos/{video_id}/comments ```
#### 添加评论
```bash POST /vimeo/videos/{video_id}/comments Content-Type: application/json
{ "text": "Great video!" } ```
**响应:** ```json { "uri": "/videos/1163160198/comments/21372988", "text": "Great video!", "created_on": "2026-02-09T09:05:00+00:00" } ```
#### 删除评论
```bash DELETE /vimeo/videos/{video_id}/comments/{comment_id} ```
成功时返回 204 No Content。
### 喜欢
#### 获取喜欢的视频
```bash GET /vimeo/me/likes ```
#### 喜欢视频
```bash PUT /vimeo/me/likes/{video_id} ```
成功时返回 204 No Content。
#### 取消喜欢视频
```bash DELETE /vimeo/me/likes/{video_id} ```
成功时返回 204 No Content。
### 稍后观看
#### 获取稍后观看列表
```bash GET /vimeo/me/watchlater ```
#### 添加到稍后观看
```bash PUT /vimeo/me/watchlater/{video_id} ```
成功时返回 204 No Content。
#### 从稍后观看中移除
```bash DELETE /vimeo/me/watchlater/{video_id} ```
成功时返回 204 No Content。
### 关注者和关注
#### 获取关注者
```bash GET /vimeo/me/followers ```
#### 获取关注列表
```bash GET /vimeo/me/following ```
#### 关注用户
```bash PUT /vimeo/me/following/{user_id} ```
#### 取消关注用户
```bash DELETE /vimeo/me/following/{user_id} ```
### 频道和分类
#### 列出所有频道
```bash GET /vimeo/channels ```
#### 获取频道
```bash GET /vimeo/channels/{channel_id} ```
#### 列出所有分类
```bash GET /vimeo/categories ```
**响应:** ```json { "total": 10, "data": [ {"uri": "/categories/animation", "name": "Animation"}, {"uri": "/categories/comedy", "name": "Comedy"}, {"uri": "/categories/documentary", "name": "Documentary"} ] } ```
#### 获取分类下的视频
```bash GET /vimeo/categories/{category}/videos ```
## 分页
Vimeo 使用基于页面的分页:
```bash GET /vimeo/me/videos?page=1&per_page=25 ```
**响应:** ```json { "total": 50, "page": 1, "per_page": 25, "paging": { "next": "/me/videos?page=2", "previous": null, "first": "/me/videos?page=1", "last": "/me/videos?page=2" }, "data": [...] } ```
参数: - `page` - 页码(默认 1) - `per_page` - 每页结果数(默认 25,最多 100)
## 代码示例
### JavaScript
```javascript const response = await fetch( 'https://gateway.maton.ai/vimeo/me/videos', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json(); ```
### Python
```python import os import requests
response = requests.get( 'https://gateway.maton.ai/vimeo/me/videos', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'} ) data = response.json() ```
### Python(创建文件夹)
```python import os import requests
response = requests.post( 'https://gateway.maton.ai/vimeo/me/folders', headers={ 'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}', 'Content-Type': 'application/json' }, json={'name': 'New Folder'} ) folder = response.json() print(f"Created folder: {folder['uri']}") ```
### Python(更新视频)
```python import os import requests
video_id = "1163160198" response = requests.patch( f'https://gateway.maton.ai/vimeo/videos/{video_id}', headers={ 'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}', 'Content-Type': 'application/json' }, json={ 'name': 'Updated Title', 'description': 'New description' } ) video = response.json() print(f"Updated video: {video['name']}") ```
## 注意事项
- 视频 ID 是数字(例如 `1163160198`) - 用户 ID 是数字(例如 `254399456`) - 文件夹在 API 路径中被称为“项目” - 合集在 Vimeo 界面中也被称为“Showcases” - DELETE 和 PUT 操作成功时返回 204 No Content - 视频上传需要 TUS 协议(此处不涉及) - 速率限制因账户类型而异 - 重要提示:当将 curl 输出通过管道传递给 `jq` 或其他命令时,像 `$MATON_API_KEY` 这样的环境变量在某些 shell 环境中可能无法正确展开
## 错误处理
| 状态 | 含义 | |--------|---------| | 400 | 缺少 Vimeo 连接或请求错误 | | 401 | Maton API 密钥无效或缺失 | | 403 | 权限或范围不足 | | 404 | 未找到资源 | | 429 | 请求速率受限 | | 4xx/5xx | 来自 Vimeo API 的透传错误 |
Vimeo 错误包含详细信息: ```json { "error": "Your access token does not have the \"create\" scope" } ```
### 故障排除:API 密钥问题
1. 检查是否设置了 `MATON_API_KEY` 环境变量:
```bash echo $MATON_API_KEY ```
2. 通过列出连接来验证 API 密钥是否有效:
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 故障排除:无效的应用名称
1. 确保您的 URL 路径以 `vimeo` 开头。例如:
- 正确:`https://gateway.maton.ai/vimeo/me/videos` - 错误:`https://gateway.maton.ai/me/videos`
## 资源
- [Vimeo API 参考](https://developer.vimeo.com/api/reference) - [Vimeo 开发者门户](https://developer.vimeo.com) - [Vimeo API 身份验证](https://developer.vimeo.com/api/authentication) - [Vimeo 上传 API](https://developer.vimeo.com/api/upload/videos) - [Maton 社区](https://discord.com/invite/dBfFAcefs2) - [Maton 支持](mailto:[email protected])