docs/LOCAL.md
應用程式啟動後會在本地綁定一個 HTTP 伺服器,埠號從 9978 開始依序嘗試至 9998,取得第一個可用埠。
http://127.0.0.1:{port}
實際埠號依系統可用情況而定,預設起始為 9978。
所有端點支援 GET 與 POST(除特別標注外),參數可放在 Query String 中。回應若無特別說明皆為 text/plain,成功回傳 OK,失敗回傳 500 與錯誤訊息。
透過 do 參數分派不同動作。
GET/POST http://127.0.0.1:9978/action?do={do}&...
控制目前播放器的播放狀態。
http://127.0.0.1:9978/action?do=control&type={type}
| 參數 | 說明 |
|---|---|
type | 控制指令,見下表。 |
type 可選值:
type | 說明 |
|---|---|
play | 播放 |
pause | 暫停 |
stop | 停止 |
replay | 重新播放 |
prev | 上一集 |
next | 下一集 |
loop | 切換循環播放模式 |
範例:
http://127.0.0.1:9978/action?do=control&type=play
http://127.0.0.1:9978/action?do=control&type=pause
http://127.0.0.1:9978/action?do=control&type=next
觸發應用程式重新載入指定頁面資料,或推送內容至播放器。
http://127.0.0.1:9978/action?do=refresh&type={type}&...
type 可選值:
type | 額外參數 | 說明 |
|---|---|---|
live | — | 重新整理直播頁面。 |
detail | — | 重新整理影片詳情頁。 |
player | — | 重新整理播放頁面。 |
subtitle | path | 推送字幕至目前播放器,path 為字幕檔 URL。 |
danmaku | path | 推送彈幕至目前播放器,path 為彈幕檔 URL。 |
vod | json | 推送 Vod 物件更新,json 為 Vod JSON 字串。 |
範例:
http://127.0.0.1:9978/action?do=refresh&type=detail
http://127.0.0.1:9978/action?do=refresh&type=subtitle&path=http://example.com/sub.srt
http://127.0.0.1:9978/action?do=refresh&type=danmaku&path=http://example.com/danmaku.xml
推送一個 URL 至應用程式進行播放。
http://127.0.0.1:9978/action?do=push&url={url}
| 參數 | 說明 |
|---|---|
url | 要播放的媒體 URL(需 URL 編碼)。 |
範例:
http://127.0.0.1:9978/action?do=push&url=http%3A%2F%2Fexample.com%2Fvideo.m3u8
指定本地檔案路徑,依副檔名執行對應動作。
http://127.0.0.1:9978/action?do=file&path={path}
| 參數 | 說明 |
|---|---|
path | 本地檔案的絕對路徑。 |
依副檔名的行為:
| 副檔名 | 行為 |
|---|---|
.apk | 觸發 APK 安裝流程。 |
.srt .ssa .ass | 注入字幕至目前播放器。 |
| 其他 | 觸發設定頁面開啟對應檔案。 |
在應用程式介面觸發關鍵字搜尋。
http://127.0.0.1:9978/action?do=search&word={word}
| 參數 | 說明 |
|---|---|
word | 搜尋關鍵字。 |
範例:
http://127.0.0.1:9978/action?do=search&word=%E9%A3%9F%E7%A5%9E
載入配置內容或指定名稱的配置。
http://127.0.0.1:9978/action?do=setting&text={text}&name={name}
| 參數 | 說明 |
|---|---|
text | 配置內容字串或配置 URL。 |
name | 配置顯示名稱(選填)。 |
將指定媒體投放至遠端裝置播放。
http://127.0.0.1:9978/action?do=cast&config={config}&device={device}&history={history}
| 參數 | 說明 |
|---|---|
config | Config 物件的 JSON 字串,指定要投放的配置。 |
device | 目標裝置的 Device 物件 JSON 字串(含 IP 等資訊)。 |
history | History 物件的 JSON 字串,包含播放歷史。 |
在多個裝置間同步觀看紀錄(history)或收藏清單(keep)。
POST http://127.0.0.1:9978/action?do=sync&type={type}&device={device}&force={force}&mode={mode}
Query 參數:
| 參數 | 說明 |
|---|---|
type | 同步類型:"history"(觀看紀錄)或 "keep"(收藏)。 |
device | 目標裝置的 Device 物件 JSON 字串。 |
force | "true" = 先刪除後合併;其他 = 直接合併。 |
mode | "0" = 雙向(發送+接收);"1" = 僅接收;"2" = 僅發送。 |
config | (history 用)Config 物件 JSON 字串。 |
POST Body(application/x-www-form-urlencoded):
| 參數 | 說明 |
|---|---|
targets | History 或 Keep 物件陣列的 JSON 字串。 |
configs | (keep 用)Config URL 陣列的 JSON 字串。 |
存取應用程式的鍵值快取(基於 SharedPreferences),可用於爬蟲在不同請求間共享資料。
GET/POST http://127.0.0.1:9978/cache?do={do}&...
Key 計算規則: "cache_" + (rule 為空 ? "" : rule + "_") + key
http://127.0.0.1:9978/cache?do=get&key={key}&rule={rule}
| 參數 | 說明 |
|---|---|
key | 快取鍵名。 |
rule | 命名空間前綴,用於隔離不同爬蟲的快取(選填)。 |
回應: 200 OK,回傳儲存的字串值(若不存在則為空字串)。
http://127.0.0.1:9978/cache?do=set&key={key}&value={value}&rule={rule}
| 參數 | 說明 |
|---|---|
key | 快取鍵名。 |
value | 要儲存的字串值。 |
rule | 命名空間前綴(選填)。 |
http://127.0.0.1:9978/cache?do=del&key={key}&rule={rule}
| 參數 | 說明 |
|---|---|
key | 要刪除的快取鍵名。 |
rule | 命名空間前綴(選填)。 |
取得目前播放器的媒體資訊與播放狀態。
GET http://127.0.0.1:9978/media
回應格式: application/json
播放器未啟動時:
{}
播放器啟動時:
{
"url": "https://cdn.example.com/video.m3u8",
"state": 3,
"speed": 1.0,
"title": "範例電影",
"artist": "來源名稱",
"artwork": "https://example.com/cover.jpg",
"duration": 7200000,
"position": 1234567
}
欄位說明:
| 欄位 | 類型 | 說明 |
|---|---|---|
url | string | 目前串流 URL,無則為 ""。 |
state | integer | PlaybackStateCompat 狀態碼。1=緩衝中,2=暫停,3=播放中,無則為 -1。 |
speed | float | 播放速率(1.0 = 正常速度),無則為 -1。 |
title | string | 媒體標題,無則為 ""。 |
artist | string | 藝術家或來源名稱,無則為 ""。 |
artwork | string | 封面圖 URI,無則為 ""。 |
duration | long | 媒體總時長(毫秒),無則為 -1。 |
position | long | 目前播放位置(毫秒),無則為 -1。 |
瀏覽或下載應用程式的本地儲存空間。
GET http://127.0.0.1:9978/file/{path}
| 參數 | 說明 |
|---|---|
path | 相對於應用程式根目錄的路徑。省略時列出根目錄。 |
目錄回應(JSON):
{
"parent": "videos",
"files": [
{
"name": "movie.mp4",
"path": "videos/movie.mp4",
"time": "2025/03/05 12:00:00",
"dir": 0
},
{
"name": "subtitles",
"path": "videos/subtitles",
"time": "2025/03/05 10:00:00",
"dir": 1
}
]
}
files 陣列欄位說明:
| 欄位 | 類型 | 說明 |
|---|---|---|
name | string | 檔案或目錄名稱。 |
path | string | 相對於根目錄的路徑。 |
time | string | 最後修改時間,格式 yyyy/MM/dd HH:mm:ss。 |
dir | integer | 1 = 目錄,0 = 檔案。 |
parent 欄位說明:
| 值 | 意義 |
|---|---|
"." | 目前即為根目錄(無上一層)。 |
"" | 上一層為根目錄。 |
"path/to/parent" | 上一層目錄的相對路徑。 |
檔案回應: 直接串流檔案內容,支援 Range 請求(206 Partial Content)與 ETag 快取(304 Not Modified)。
上傳檔案至指定目錄,.zip 檔案會自動解壓縮。
POST http://127.0.0.1:9978/upload?path={path}
Content-Type: multipart/form-data
| 參數 | 說明 |
|---|---|
path | 目標目錄,相對於應用程式根目錄。 |
| 檔案類型 | 行為 |
|---|---|
.zip | 解壓縮至 path 目錄。 |
| 其他 | 複製至 path/filename。 |
在指定路徑下建立新目錄。
GET http://127.0.0.1:9978/newFolder?path={path}&name={name}
| 參數 | 說明 |
|---|---|
path | 父目錄路徑,相對於應用程式根目錄。 |
name | 要建立的資料夾名稱。 |
刪除指定目錄及其所有內容。
GET http://127.0.0.1:9978/delFolder?path={path}
| 參數 | 說明 |
|---|---|
path | 要刪除的目錄路徑,相對於應用程式根目錄。 |
刪除指定檔案。
GET http://127.0.0.1:9978/delFile?path={path}
| 參數 | 說明 |
|---|---|
path | 要刪除的檔案路徑,相對於應用程式根目錄。 |
將解析器腳本與目標 URL 嵌入 HTML 範本後回傳,通常供 WebView 內部使用。
GET http://127.0.0.1:9978/parse?jxs={jxs}&url={url}
| 參數 | 說明 |
|---|---|
jxs | 解析器腳本識別碼或內容。 |
url | 待解析的媒體頁面 URL。 |
回應格式: text/html,回傳渲染後的 parse.html 頁面。
將請求轉發至爬蟲的 proxy() 方法處理,供爬蟲自訂回應(如轉發串流、修改標頭等)。
GET/POST http://127.0.0.1:9978/proxy?...
所有 Query String 參數、請求標頭與 POST Body 會合併後傳入 BaseLoader.get().proxy(params)。回應由爬蟲 proxy() 決定,框架原封不動地轉發爬蟲回傳的串流與標頭。
爬蟲如何實作 proxy() 方法及取得代理 URL,見 SPIDER.md — 爬蟲本地代理 URL。
取得本機裝置資訊。
GET http://127.0.0.1:9978/device
回應格式: text/plain,內容為裝置資訊的 JSON 字串。
回應欄位:
| 欄位 | 類型 | 說明 |
|---|---|---|
name | string | 裝置顯示名稱。 |
ip | string | 裝置區域網路 IP 位址。 |
| 端點 | 方法 | 主要參數 | 說明 |
|---|---|---|---|
/action?do=control | GET/POST | type | 播放控制(play/pause/stop/prev/next/loop/replay) |
/action?do=refresh | GET/POST | type, path, json | 刷新頁面或推送字幕/彈幕 |
/action?do=push | GET/POST | url | 推送 URL 播放 |
/action?do=file | GET/POST | path | 開啟本地檔案 |
/action?do=search | GET/POST | word | 觸發關鍵字搜尋 |
/action?do=setting | GET/POST | text, name | 載入配置 |
/action?do=cast | GET/POST | config, device, history | 投放媒體至遠端裝置 |
/action?do=sync | POST | type, device, force, mode | 多裝置資料同步 |
/cache?do=get | GET/POST | key, rule | 讀取快取值 |
/cache?do=set | GET/POST | key, value, rule | 寫入快取值 |
/cache?do=del | GET/POST | key, rule | 刪除快取值 |
/media | GET | — | 取得播放狀態 JSON |
/file/{path} | GET | — | 瀏覽目錄或下載檔案(支援 Range) |
/upload | POST | path(multipart) | 上傳檔案(支援 .zip 解壓) |
/newFolder | GET | path, name | 建立資料夾 |
/delFolder | GET | path | 刪除資料夾 |
/delFile | GET | path | 刪除檔案 |
/parse | GET | jxs, url | 取得渲染後的解析 HTML 頁面 |
/proxy | GET/POST | 自訂(轉發至爬蟲) | 爬蟲代理轉發 |
/device | GET | — | 取得裝置資訊 |