温馨提示×

如何在Ubuntu上使用Jellyfin的API

小樊
39
2025-12-30 15:10:24
栏目: 智能运维

在 Ubuntu 上使用 Jellyfin API 的实用指南

一 环境准备与获取访问凭证

  • 安装并启动 Jellyfin(Ubuntu 20.04/22.04/24.04 可用 APT 源一键安装):
    • 添加源与密钥:
      • sudo apt update && sudo apt install -y apt-transport-https ca-certificates gnupg curl
      • sudo mkdir -p /etc/apt/keyrings
      • curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
      • echo “deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/jellyfin.gpg] https://repo.jellyfin.org/$(awk -F= ‘/^ID=/{print $NF}’ /etc/os-release) $(awk -F= ‘/^VERSION_CODENAME=/{print $NF}’ /etc/os-release) main” | sudo tee /etc/apt/sources.list.d/jellyfin.sources
    • 安装与启动:
      • sudo apt update && sudo apt install -y jellyfin
      • sudo systemctl enable --now jellyfin
  • 获取 API 访问凭证(两种方式,任选其一):
    • 管理员 Token:在 Web 管理后台进入「控制台 → API Keys」,新建一个 Key(名称自定义,如 ubuntu-script)。
    • 用户级 Token:登录 Web 后访问「http://服务器IP:8096/swagger」,在「Authentication」下用你的用户名/密码调用 POST /Users/AuthenticateByName 获取 AccessToken
  • 基础连通性检查(在 Ubuntu 终端):
    • curl -I http://127.0.0.1:8096/System/Info
    • 若通过域名或反代访问,请将 127.0.0.1 替换为你的域名或服务器地址。

二 认证与调用方式

  • 请求通用规则:
    • 基础 URL:http://<服务器地址>:8096
    • 请求头:
      • 使用管理员 Key:添加 X-Emby-Authorization: MediaBrowser Token=“你的API Key”
      • 使用用户 Token:添加 Authorization: Bearer
    • 常见返回:成功通常为 200/201,鉴权失败 401,资源未找到 404
  • 示例 1(管理员 Key,获取服务器信息):
    • curl -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"”
      http://127.0.0.1:8096/System/Info
  • 示例 2(用户 Token,获取当前用户信息):
    • curl -H “Authorization: Bearer YOUR_USER_TOKEN”
      http://127.0.0.1:8096/Users/Me
  • 示例 3(管理员 Key,列出所有用户):
    • curl -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"”
      http://127.0.0.1:8096/Users
  • 示例 4(管理员 Key,触发电影库扫描):
    • curl -X POST
      -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"”
      http://127.0.0.1:8096/Library/Refresh?api_key=YOUR_ADMIN_KEY
  • 示例 5(管理员 Key,按名称搜索电影,返回最多 5 条):
    • curl -G
      -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"”
      –data-urlencode “searchTerm=Inception”
      –data “limit=5”
      http://127.0.0.1:8096/Items
  • 提示:
    • 多数写操作(如刷新库、创建/修改条目)需管理员权限;读取类接口普通用户即可。
    • 若你的 Jellyfin 启用了 反向代理/HTTPS,请将 URL 改为 https://你的域名,并确保证书与代理正确转发 /socket/.well-known/ 等路径。

三 常见 API 场景与命令模板

  • 媒体库管理
    • 获取所有媒体库:curl -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"” http://127.0.0.1:8096/Library/MediaFolders
    • 按库 ID 刷新:curl -X POST -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"” http://127.0.0.1:8096/Library/Refresh?itemIds=LIBRARY_ID
  • 用户与权限
    • 创建用户(管理员):curl -X POST -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"”
      -H “Content-Type: application/json”
      -d ‘{“Name”:“apiuser”,“Password”:“StrongPass!”}’
      http://127.0.0.1:8096/Users/New
    • 设置用户策略(示例:禁止该用户远程访问):curl -X POST -H “X-Emby-Authorization: MediaBrowser Token="YOUR_ADMIN_KEY"”
      -H “Content-Type: application/json”
      -d ‘{“IsAdministrator”:false,“EnableRemoteAccess”:false}’
      http://127.0.0.1:8096/Users/USER_ID/Policy
  • 播放与转码
    • 获取播放 URL(需用户 Token):先获取 ItemId,再访问 /Items/{ItemId}/PlaybackInfo(可带参数如 MaxStreamingBitrate)。
    • 获取转码信息:访问 /Items/{ItemId}/PlaybackInfo?MediaSourceId=…&VideoCodec=h264&AudioCodec=aac(返回可用码率、分辨率、容器等)。
  • 批量操作建议
    • 大量请求时控制并发与间隔,避免触发限流;必要时在脚本中加入重试与退避逻辑。

四 使用脚本与排错要点

  • Python 快速示例(获取服务器信息 + 搜索电影)
    • pip install requests
    • 代码示例:
      • import requests
        • base = “http://127.0.0.1:8096”
        • headers = {“X-Emby-Authorization”: ‘MediaBrowser Token=“YOUR_ADMIN_KEY”’}
        • r = requests.get(f"{base}/System/Info", headers=headers, timeout=10)
        • print(r.status_code, r.json())
        • q = requests.get(f"{base}/Items", headers=headers, params={“searchTerm”: “Inception”, “limit”: 5}, timeout=10)
        • print(q.json())
  • 常见问题与处理
    • 401 Unauthorized:检查 API Key/Token 是否正确、是否过期、是否放在正确请求头。
    • 404 Not Found:确认 Base URL 与端口(默认 8096) 正确,且目标资源(如 ItemId、LibraryId)存在。
    • 502/504 或连接超时:若使用 Nginx/Apache 反代,确认已正确代理 /socket/.well-known/,并开启 HTTP/2/HTTPS;必要时查看反代与 Jellyfin 日志。
    • 局域网正常外网不通:检查路由器端口转发、云服务器安全组、以及反代配置中的 X-Forwarded-Proto/X-Forwarded-Port 头是否正确设置。

0