# Momentry Core API 存取指南 | 項目 | 內容 | |------|------| | 版本 | V1.3 | | 日期 | 2026-03-25 | | 用途 | API 存取方式、端點與整合指南 | --- ## 版本歷史 | 版本 | 日期 | 目的 | 操作人 | 工具/模型 | |------|------|------|--------|-----------| | V1.3 | 2026-03-25 | 更新: n8n 搜尋回傳 `file_path` 取代 `media_url`,新增 API Key 驗證說明 | OpenCode | deepseek-reasoner | | V1.2 | 2026-03-24 | 更新網址與服務列表 | Warren | OpenCode / MiniMax M2.5 | | V1.1 | 2026-03-23 | 初始版本 | Warren | OpenCode / MiniMax M2.5 | --- ## 基本網址 | 環境 | URL | 說明 | |------|-----|------| | **本地開發** | `http://localhost:3002` | 直接訪問 API,繞過反向代理 | | **外部訪問** | `https://api.momentry.ddns.net` | 通過 Caddy 反向代理訪問,需網路可達 | ### 何時使用哪個 URL **使用 `localhost:3002`:** - 開發/測試環境 - 直接在伺服器上操作 - 當反向代理有問題時 **使用 `api.momentry.ddns.net`:** - n8n workflow 中呼叫 API - 外部系統整合 - 生產環境 ## 認證 所有 `/api/v1/*` 端點(除了健康檢查 `/health` 與 `/health/detailed`)都需要 API Key 認證。 請在請求標頭中加入: ``` X-API-Key: YOUR_API_KEY ``` **目前示範使用的 API Key**: `demo_api_key_12345` > **注意**: 正式環境請使用安全的 API Key 管理機制,避免在客戶端暴露 API Key。 --- ## 影片搜尋 API ### 語意搜尋 **端點:** `POST /api/v1/search` **請求:** ```json { "query": "charade", "limit": 5, "uuid": "a1b10138a6bbb0cd" } ``` | 欄位 | 類型 | 必填 | 說明 | |------|------|------|------| | `query` | 字串 | 是 | 搜尋文字 | | `limit` | 整數 | 否 | 最大回傳結果數(預設 10) | | `uuid` | 字串 | 否 | 依影片 UUID 過濾 | **回應:** ```json { "results": [ { "uuid": "a1b10138a6bbb0cd", "chunk_id": "sentence_0006", "chunk_type": "sentence", "start_time": 48.8, "end_time": 55.44, "text": "fun plot twists, Woody Dialog and charming performances...", "score": 0.526 } ], "query": "charade" } ``` --- ### n8n 整合搜尋 **端點:** `POST /api/v1/n8n/search` **請求:** ```json { "query": "charade", "limit": 5 } ``` **回應:** ```json { "query": "charade", "count": 5, "hits": [ { "id": "sentence_0006", "vid": "a1b10138a6bbb0cd", "start": 48.8, "end": 55.44, "title": "Chunk sentence_0006", "text": "fun plot twists...", "score": 0.526, "file_path": "/Users/accusys/momentry/var/sftpgo/data/demo/Old_Time_Movie_Show_-_Charade_1963.HD.mov" } ] } ``` > **注意**: API 現在返回 `file_path`(檔案系統路徑)而非 `media_url`(網頁 URL)。如需在網頁中播放影片,請將檔案路徑轉換為可訪問的 URL(例如透過 SFTPGo 分享連結)。 --- ## 影片管理 API ### 列出所有影片 **端點:** `GET /api/v1/videos` ### 查詢影片資訊 **端點:** `GET /api/v1/lookup?uuid={uuid}` 或 `GET /api/v1/lookup?path={path}` ### 取得處理進度 **端點:** `GET /api/v1/progress/{uuid}` --- ## 區塊資料結構 每個搜尋結果包含影片播放的時間資訊: | 欄位 | 說明 | |------|------| | `uuid` | 影片識別碼 | | `chunk_id` | 區塊唯一識別碼 | | `chunk_type` | 類型:`sentence`、`cut`、`time_based` | | `start_time` | 開始時間(秒) | | `end_time` | 結束時間(秒) | | `text` | 語音轉文字內容 | | `score` | 相關性分數(0-1) | --- ## 整合範例 ### JavaScript/fetch ```javascript const response = await fetch('http://localhost:3002/api/v1/search', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'YOUR_API_KEY' // 替換為實際的 API Key }, body: JSON.stringify({ query: 'charade', limit: 5 }) }); const data = await response.json(); console.log(data.results); ``` ### PHP/cURL ```php $ch = curl_init('http://localhost:3002/api/v1/search'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ 'query' => 'charade', 'limit' => 5 ])); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'X-API-Key: YOUR_API_KEY' // 替換為實際的 API Key ]); $response = curl_exec($ch); $data = json_decode($response, true); ``` --- ## 影片嵌入網址 > **重要**: API 現在返回 `file_path`(檔案系統路徑),而非直接可訪問的網址。您需要將檔案路徑轉換為 SFTPGo 分享連結才能嵌入影片。 **檔案路徑轉換為網址:** - API 返回的 `file_path` 範例:`/Users/accusys/momentry/var/sftpgo/data/demo/video.mp4` - 對應的 SFTPGo 分享連結:`https://wp.momentry.ddns.net/demo/video.mp4` - 轉換方式:移除 `/Users/accusys/momentry/var/sftpgo/data/` 前綴,將剩餘路徑附加到 `https://wp.momentry.ddns.net/` **手動建立分享連結:** 1. 開啟 SFTPGo Web UI:`http://localhost:8080` 2. 使用帳號 `demo` / 密碼 `demopassword123` 登入 3. 導航至 `Files` → 選擇影片檔案 4. 點擊 `Share` → `Create Link` 5. 複製產生的分享連結 使用搜尋結果中的 `start_time` 和 `end_time` 來嵌入影片片段。 --- ## 服務列表 | 服務 | 網址 | 用途 | |------|------|------| | Momentry API | `http://localhost:3002` | 核心 API | | SFTPGo | `http://localhost:8080` | 檔案儲存 | | Qdrant | `http://localhost:6333` | 向量搜尋 | | PostgreSQL | `localhost:5432` | 資料庫 | --- ## 示範影片 - **檔案:** `Old_Time_Movie_Show_-_Charade_1963.HD.mov` - **UUID:** `a1b10138a6bbb0cd` - **長度:** 約 6879 秒(約 1.9 小時) - **區塊數:** 3886 個(句子 + 場景 + 時間)