{"allowContribute":false,"item":{"artifactHtml":"\u003cstyle\u003e\n  :root { --paper:#F9F7FF; --ink:#181826; --ink-2:#5B5870; --accent:#7C3AED; --accent-2:#4F46E5; --soft:#EDE9FE; --soft-2:#F5F3FF; --hair:#DDD6FE; --ok:#059669; --warn:#D97706; --bad:#DC2626; }\n  :root[data-theme=\"dark\"] { --paper:#14131C; --ink:#EDE9FF; --ink-2:#A9A6BF; --accent:#A78BFA; --accent-2:#818CF8; --soft:#1E1B33; --soft-2:#1A1930; --hair:#2E2B4A; --ok:#34D399; --warn:#FBBF24; --bad:#F87171; }\n  *{box-sizing:border-box}\n  .doc{background:var(--paper);color:var(--ink);padding:30px 32px 36px;font:15.5px/1.78 -apple-system,\"PingFang TC\",\"Noto Sans TC\",sans-serif;}\n  header{margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid var(--hair)}\n  .eyebrow{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}\n  h1{font-size:28px;line-height:1.25;letter-spacing:-.02em;margin:10px 0 8px;font-weight:800}\n  .lede{color:var(--ink-2);font-size:15px;line-height:1.6;margin:0;max-width:68ch}\n  h2{font-size:18px;font-weight:750;margin:30px 0 10px;letter-spacing:-.01em}\n  h3{font-size:14px;font-weight:750;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);margin:20px 0 8px}\n  p{color:var(--ink-2);margin:10px 0;max-width:68ch}\n  .hero{display:flex;gap:16px;flex-wrap:wrap;margin:20px 0 6px}\n  .hero-card{flex:1 1 200px;background:var(--soft);border:1px solid var(--hair);border-radius:12px;padding:16px 18px}\n  .hero-card .k{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent)}\n  .hero-card .v{font-size:15px;font-weight:700;margin-top:6px;line-height:1.4}\n  .hero-card .n{font-size:12.5px;color:var(--ink-2);margin-top:4px;line-height:1.5}\n  .callout{display:flex;gap:12px;align-items:flex-start;background:var(--soft-2);border:1px solid var(--hair);border-left:3px solid var(--accent);border-radius:8px;padding:14px 16px;margin:16px 0}\n  .callout.warn{border-left-color:var(--warn);background:#FFFBEB}\n  :root[data-theme=\"dark\"] .callout.warn{background:#2A2210}\n  .callout.ok{border-left-color:var(--ok)}\n  .callout .tag{flex:none;font:800 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px}\n  .callout.warn .tag{color:var(--warn)}\n  .callout.ok .tag{color:var(--ok)}\n  .callout div{font-size:13.5px;line-height:1.65;color:var(--ink-2)}\n  .callout div strong{color:var(--ink)}\n  table{width:100%;border-collapse:collapse;margin:12px 0 16px;font-size:13.5px}\n  th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--hair);vertical-align:top}\n  th{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;color:var(--ink-2);white-space:nowrap}\n  td{color:var(--ink-2)} td:first-child{color:var(--ink);font-weight:600;white-space:nowrap}\n  code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);border:1px solid var(--hair);padding:1px 6px;border-radius:5px;color:var(--ink);word-break:break-all}\n  .codeblock{background:var(--soft);border:1px solid var(--hair);border-radius:10px;padding:14px 16px;margin:14px 0;overflow-x:auto;font:12.5px/1.6 ui-monospace,Menlo,monospace;color:var(--ink)}\n  .codeblock .c{color:var(--ink-2)}\n  .steps{list-style:none;padding:0;margin:12px 0;display:grid;gap:10px;counter-reset:step}\n  .steps li{position:relative;padding:14px 16px 14px 52px;background:var(--soft-2);border:1px solid var(--hair);border-radius:10px}\n  .steps li::before{counter-increment:step;content:counter(step);position:absolute;left:14px;top:14px;width:26px;height:26px;display:grid;place-items:center;background:var(--accent);color:#fff;font:800 12px ui-monospace,Menlo,monospace;border-radius:50%}\n  .steps li b{color:var(--ink)}\n  .steps li span{color:var(--ink-2);font-size:13.5px}\n  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}\n  .mini{border:1px solid var(--hair);border-radius:10px;padding:14px 16px;background:var(--soft-2)}\n  .mini h4{margin:0 0 6px;font-size:13px;font-weight:750;color:var(--ink)}\n  .mini p{margin:0;font-size:13px;line-height:1.6}\n  .pill{display:inline-flex;align-items:center;font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;padding:3px 8px;border-radius:999px;border:1px solid var(--hair);background:var(--soft);color:var(--accent);margin-right:6px}\n  .hr{height:1px;background:var(--hair);margin:26px 0}\n  .foot{font-size:12.5px;color:var(--ink-2);border-top:1px solid var(--hair);padding-top:16px;margin-top:24px}\n  @media(max-width:640px){.doc{padding:20px 18px}h1{font-size:23px}.grid2{grid-template-columns:1fr}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\n  \u003cheader\u003e\n    \u003cdiv class=\"eyebrow\"\u003eCubeLV · 追劇部門 · 無廣告追劇中心\u003c/div\u003e\n    \u003ch1\u003e追劇上手指南 — 無廣告追劇中心與資源站介面規格\u003c/h1\u003e\n    \u003cp class=\"lede\"\u003e「追劇播放器」已正式上線。這份指南不再是「等工具上線再說」，你可以現在就照著做：加信任的資源站、搜劇、免廣告直播、加入追蹤、讓系統每天幫你盯新集數。後半部的資源站介面規格保留作技術附錄，需要排錯或對接時再看。\u003c/p\u003e\n  \u003c/header\u003e\n\n  \u003cdiv class=\"hero\"\u003e\n    \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e系統定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e資源站是資料來源，\u003cbr\u003e追劇中心是你的清單\u003c/div\u003e\u003cdiv class=\"n\"\u003e播放器只負責「照你指定的站去問」與「記住你追到哪一集」\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e介面標準\u003c/div\u003e\u003cdiv class=\"v\"\u003e蘋果 CMS（MACCMS V10）\u003cbr\u003e\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e\u003c/div\u003e\u003cdiv class=\"n\"\u003eac=list / detail、t / pg / wd / ids / h / at\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e安全原則\u003c/div\u003e\u003cdiv class=\"v\"\u003e只加你信任的站\u003cbr\u003e不信任的不加\u003c/div\u003e\u003cdiv class=\"n\"\u003e來源不可信，片名、集數、播放連結都不可信\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e已上線\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e側邊欄 →「追劇播放器」就是入口。\u003c/strong\u003e下面兩個資料夾「資源站」「我的追劇」已可直接使用；右側會依你選中的項目自動切換成瀏覽與播放畫面，不需要額外安裝。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e一、這套系統會做什麼\u003c/h2\u003e\n  \u003cp\u003e「無廣告追劇中心」的想法很單純：你挑幾個\u003cstrong style=\"color:var(--ink)\"\u003e自己信任的資源站\u003c/strong\u003e加進來，之後把想追的劇加入清單，系統每天幫你去各站問一次「有沒有新集數」，有就提醒你。站掛了、格式錯了，就如實告訴你，不會自己編集數。\u003c/p\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔌 資源站\u003c/h4\u003e\u003cp\u003e提供片庫的遠端 API（蘋果 CMS 規格）。系統不會內建任何站，站由你自己決定要加哪幾個。\u003c/p\u003e\u003c/div\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e📋 追蹤清單\u003c/h4\u003e\u003cp\u003e你按「加入追蹤」才會出現在清單裡。清單記住：劇名、vod_id、來源站、最後看到哪一集。\u003c/p\u003e\u003c/div\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔄 每日檢查\u003c/h4\u003e\u003cp\u003e追劇更新助理每日 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e依各站 API 實際回傳比對集數，有更新才寫入「追劇筆記」通知。\u003c/p\u003e\u003c/div\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e▶️ 播放器\u003c/h4\u003e\u003cp\u003e已正式上線。支援站內搜尋、海報詳情、多播放源切換與 \u003ccode\u003em3u8\u003c/code\u003e 直連播放（hls.js），免廣告、進度自動記憶。\u003c/p\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003ch2\u003e二、實際操作：照著做就好\u003c/h2\u003e\n  \u003cp\u003e下面 5 步對應你在 app 裡實際看到的版面。左側是清單、右側是內容，「追劇播放器」這個區塊同時管兩個資料夾。\u003c/p\u003e\n\n  \u003col class=\"steps\"\u003e\n    \u003cli\u003e\u003cb\u003e在側邊欄找到「追劇播放器」下的兩個資料夾\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e展開側邊欄的 \u003ccode\u003e追劇播放器\u003c/code\u003e 區段，你會看到 \u003ccode\u003e資源站\u003c/code\u003e（圖示 server）與 \u003ccode\u003e我的追劇\u003c/code\u003e（圖示 tv）兩個資料夾。點資料夾名稱進入；點資料夾內的單筆項目會在右側開啟詳情。左欄永遠是清單，右欄永遠是瀏覽/詳情/播放。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e在「資源站」新增一個你信任的 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 網址\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e進入「資源站」資料夾 → 點右上角 \u003ccode\u003e＋ 新增資源站\u003c/code\u003e（沒有任何站時，中間也會有「新增第一個資源站」虛線按鈕）。填「名稱」與完整的資源站網址（以 \u003ccode\u003ehttp(s)://\u003c/code\u003e 開頭、結尾指向 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的介面根網址），可選是否「啟用」。按「儲存」時系統會自動用 \u003ccode\u003eac=list\u0026amp;pg=1\u003c/code\u003e 對該網址做一次連線測試：成功顯示「連線測試成功」，失敗也會照實顯示錯誤訊息並寫入該資源站的 \u003ccode\u003elastError\u003c/code\u003e，不會靜悄悄略過。只加你信任的來源，不要貼來路不明的網址。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e在「資源站」右側瀏覽最新片單或關鍵字搜尋，點海報看詳情、挑播放源與集數、免廣告直接播放\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在左欄選中一個已新增的資源站，右側會自動載入它的最新片單（預設 \u003ccode\u003epg=1\u003c/code\u003e，每頁 24 部，有分頁與總筆數）。上方有關鍵字輸入框，輸入劇名後按「搜尋」或按 Enter，即以 \u003ccode\u003ewd=關鍵字\u003c/code\u003e 重新查詢。\u003cbr\u003e片單以海報網格呈現，每張卡顯示封面與 \u003ccode\u003evod_remarks\u003c/code\u003e（如「更新至 20 集」）。點海報會彈出「劇集詳情」對話框：上方是封面、類型/年份/地區與進度文字，中間是簡介，下方是播放源與集數。\u003cbr\u003e若該劇有多個播放源（如多組 \u003ccode\u003evod_play_from\u003c/code\u003e），會出現「播放源」下拉選單，切換後集數網格立即更新。點任一集數立即以 \u003ccode\u003eVodPlayer\u003c/code\u003e 直連播放：\u003ccode\u003em3u8\u003c/code\u003e 用 hls.js 解碼，其他直鏈直接播，免廣告；對話框內可「複製播放網址」或「在新分頁開啟」。若來源暫時連不上、或不提供此劇的播放連結，會在對話框內顯示錯誤說明。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e點「加入追蹤」後，劇集會進「我的追劇」；播放進度自動記住，右側可繼續播放、調進度、標記看完\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在劇集詳情對話框按 \u003ccode\u003e加入追蹤\u003c/code\u003e，系統會以該劇的 \u003ccode\u003esourceId + sourceVodId\u003c/code\u003e 在「我的追劇」建立一筆追蹤，並補齊封面、類型與 \u003ccode\u003evodRemarks\u003c/code\u003e。\u003cbr\u003e之後切到「我的追劇」資料夾：左欄是你的追蹤清單（每筆顯示劇名與進度文字），點任一部劇，右側切換為該劇的專屬管理頁：\u003cbr\u003e• 上方顯示封面、狀態標籤（想追 / 追看中 / 已看完）、來源站、類型與「已看到第 N 集」。\u003cbr\u003e• 中間按鈕：\u003ccode\u003e▶ 繼續看第 N+1 集\u003c/code\u003e（自動算下一集並直接開播）、\u003ccode\u003e挑選集數\u003c/code\u003e（重開詳情選集）、\u003ccode\u003e標記為已看完\u003c/code\u003e / \u003ccode\u003e回到追看中\u003c/code\u003e。\u003cbr\u003e• 下方進度列：\u003ccode\u003e上一集 / 下一集\u003c/code\u003e 按鈕即時改寫 \u003ccode\u003ewatchedEpisode\u003c/code\u003e，右側下拉可切換 \u003ccode\u003epending / watching / finished\u003c/code\u003e 狀態；若原本是 \u003ccode\u003epending\u003c/code\u003e 且開始記錄集數，會自動轉為 \u003ccode\u003ewatching\u003c/code\u003e。\u003cbr\u003e• 在詳情對話框內直接點集數播放時，若集數大於目前記錄，也會自動把 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 更新到該集，不用手動補。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e每天 20:00 自動檢查各追蹤劇有無新集數，有更新就寫進「追劇筆記」\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e追劇更新助理每天 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e 逐部檢查「我的追劇」中狀態為 \u003ccode\u003ewatching / pending\u003c/code\u003e 且來源資源站為啟用的劇：對來源站打 \u003ccode\u003eac=detail\u0026amp;ids=\u0026lt;sourceVodId\u0026gt;\u003c/code\u003e，用回傳的 \u003ccode\u003evod_play_url\u003c/code\u003e 算出最新集數並比對 \u003ccode\u003evodRemarks\u003c/code\u003e。若比你的 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 新，就更新該筆的 \u003ccode\u003evodRemarks\u003c/code\u003e，並在\u003cstrong\u003e「追劇筆記」\u003c/strong\u003e資料夾寫（或更新）一篇「劇集更新通知」筆記，用清單列出每部「已更新到第 N 集，你看到第 M 集」；沒有新進度就什麼都不寫。來源一時連不上會略過該部、如實記下，不會編造進度。你也可以在右側管理頁隨時按右上角 \u003ccode\u003e↻ 檢查更新\u003c/code\u003e 手動檢查一次。\u003c/span\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e版面提示\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e左清單、右內容是固定規則。\u003c/strong\u003e「資源站」左欄選站 → 右欄瀏覽該站；「我的追劇」左欄選劇 → 右欄管該劇。兩個資料夾的右上角都有 \u003ccode\u003e＋\u003c/code\u003e 與功能按鈕（編輯 / 移除 / 檢查更新），找不到功能時先看右上角的 \u003ccode\u003ePluginTopbar\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e\n\n  \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e⚠️ 安全提醒\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e只加入你信任的來源。\u003c/strong\u003e資源站回傳的片名、封面 \u003ccode\u003evod_pic\u003c/code\u003e、簡介 \u003ccode\u003evod_content\u003c/code\u003e 與播放連結 \u003ccode\u003evod_play_url\u003c/code\u003e 都是第三方提供的字串，可能含廣告跳轉或誘導連結。本系統不會替來源背書，新增前請確認：1) 站方是你認識或社群長期推薦的、2) 用瀏覽器試打回傳的 JSON 結構正常、3) 播放連結指向你預期的站點。來路不明的站一律不要加。\u003c/div\u003e\u003c/div\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n\n  \u003ch2\u003e附錄：資源站介面規格（技術參考）\u003c/h2\u003e\n  \u003cp\u003e以下為蘋果 CMS（MACCMS V10）\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的已查證規格，整理自官方文件 \u003ccode\u003egithub.com/magicblack/maccms10 / 說明文檔/API接口說明.txt\u003c/code\u003e 並交叉比對 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e。日常使用不需要背，排錯或想理解背後在做什麼時再看。\u003c/p\u003e\n\n  \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e查證說明\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e本附錄的介面規格已上網查證\u003c/strong\u003e：以 MACCMS V10 官方文件為準，ac / 參數 / 回傳欄位皆依此整理，非臆測。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch3\u003eAC 動作\u003c/h3\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003eac\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e別名（部分站兼容）\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e取影片列表（分頁、可篩選）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideolist\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e取影片詳情（含播放連結）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideodetail\u003c/code\u003e / \u003ccode\u003evideo\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003cp\u003e官方文件寫 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，但實務上許多資源站為了兼容舊採集器，也同時接受 \u003ccode\u003evideolist\u003c/code\u003e / \u003ccode\u003evideodetail\u003c/code\u003e。建議優先送 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，失敗再試別名。\u003c/p\u003e\n  \u003cp\u003e標準位置：\u003ccode\u003e/api.php/provide/vod/\u003c/code\u003e。多數站同時也接受 \u003ccode\u003e/api.php/provide/vod/at/json/\u003c/code\u003e 這種路徑式寫法。回傳預設 \u003ccode\u003eJSON\u003c/code\u003e，加 \u003ccode\u003e\u0026amp;at=xml\u003c/code\u003e 可改回 XML（本系統只用 JSON）。\u003c/p\u003e\n\n  \u003ch3\u003e常用參數\u003c/h3\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e適用\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003et\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e分類 ID（\u003ccode\u003etype_id\u003c/code\u003e）。例：\u003ccode\u003et=1\u003c/code\u003e 只取該分類。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003epg\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e頁碼，從 1 開始。例：\u003ccode\u003epg=3\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003ewd\u003c/td\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e搜尋關鍵字（片名模糊搜尋）。例：\u003ccode\u003ewd=慶餘年\u003c/code\u003e 需 URL-encode。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eids\u003c/td\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e指定影片 ID，多個用逗號分隔。例：\u003ccode\u003eids=123,456\u003c/code\u003e。最常用於「加入追蹤時抓詳情」。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eh\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e只取 N 小時內有更新的資料。例：\u003ccode\u003eh=24\u003c/code\u003e 取 24 小時內更新的（每日檢查用）。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eat\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e回傳格式：\u003ccode\u003ejson\u003c/code\u003e（預設）或 \u003ccode\u003exml\u003c/code\u003e。例：\u003ccode\u003eat=json\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003ch3\u003e常用請求範例\u003c/h3\u003e\n  \u003cdiv class=\"codeblock\"\u003e\n    \u003cdiv\u003e\u003cspan class=\"c\"\u003e# 列表第 1 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;pg=1\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 搜尋「慶餘年」\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;wd=%E6%85%B6%E9%A4%98%E5%B9%B4\u0026amp;pg=1\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 分類 t=2 的第 5 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;t=2\u0026amp;pg=5\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取 24 小時內更新\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;h=24\u0026amp;pg=1\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取某幾部劇的詳情（含播放連結）\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=detail\u0026amp;ids=123,456\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003e回傳 JSON 結構\u003c/h3\u003e\n  \u003cp\u003e頂層固定欄位：\u003c/p\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003ecode\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e1 = 成功，其餘為失敗\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003emsg\u003c/td\u003e\u003ctd\u003estring\u003c/td\u003e\u003ctd\u003e訊息，例如「數據列表」\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003epage\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e當前頁碼\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003epagecount\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總頁數\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003elimit\u003c/td\u003e\u003ctd\u003estring|number\u003c/td\u003e\u003ctd\u003e每頁筆數（有些站回字串 \"20\"）\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003etotal\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總筆數\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e影片陣列，見下表\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eclass\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e分類清單（部分站在 list 回傳時附帶）\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cp\u003e\u003ccode\u003elist\u003c/code\u003e 內每筆影片常用欄位：\u003c/p\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_id\u003c/td\u003e\u003ctd\u003e影片唯一 ID\u003c/td\u003e\u003ctd\u003e追蹤主鍵\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_name\u003c/td\u003e\u003ctd\u003e片名\u003c/td\u003e\u003ctd\u003e顯示與搜尋\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003etype_id / type_name\u003c/td\u003e\u003ctd\u003e分類 ID / 分類名稱\u003c/td\u003e\u003ctd\u003e篩選\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_en\u003c/td\u003e\u003ctd\u003e英文別名 / 拼音\u003c/td\u003e\u003ctd\u003e次要顯示\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_time\u003c/td\u003e\u003ctd\u003e最後更新時間（\"YYYY-MM-DD HH:mm:ss\"）\u003c/td\u003e\u003ctd\u003e判斷新集\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_remarks\u003c/td\u003e\u003ctd\u003e更新狀態文字，如「更新至 20 集」「完結」\u003c/td\u003e\u003ctd\u003e快速判斷\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_pic\u003c/td\u003e\u003ctd\u003e封面圖 URL\u003c/td\u003e\u003ctd\u003e海報\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_area / vod_lang / vod_year\u003c/td\u003e\u003ctd\u003e地區 / 語言 / 年份\u003c/td\u003e\u003ctd\u003e篩選與顯示\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_actor / vod_director\u003c/td\u003e\u003ctd\u003e主演 / 導演\u003c/td\u003e\u003ctd\u003e顯示\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_content\u003c/td\u003e\u003ctd\u003e簡介（多為 HTML）\u003c/td\u003e\u003ctd\u003e詳情頁\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_serial\u003c/td\u003e\u003ctd\u003e連載狀態相關（站方定義不一）\u003c/td\u003e\u003ctd\u003e參考\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_play_from\u003c/td\u003e\u003ctd\u003e播放來源分組名，以 \u003ccode\u003e$$$\u003c/code\u003e 分隔多來源\u003c/td\u003e\u003ctd\u003e解析播放\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_play_url\u003c/td\u003e\u003ctd\u003e每組的集數清單，組間以 \u003ccode\u003e$$$\u003c/code\u003e 對應，組內用 \u003ccode\u003e#\u003c/code\u003e 分隔集數，單集格式 \u003ccode\u003e標題$URL\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e解析集數\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cdiv class=\"codeblock\"\u003e\n    \u003cdiv\u003e\u003cspan class=\"c\"\u003e// list 回應（節錄）\u003c/span\u003e\u003cbr\u003e{\n  \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 23, \"limit\": \"20\", \"total\": 449,\u003cbr\u003e  \"list\": [\u003cbr\u003e    { \"vod_id\": 493, \"vod_name\": \"測試劇\", \"type_id\": 9, \"type_name\": \"連續劇\",\u003cbr\u003e      \"vod_time\": \"2026-09-01 20:12:00\", \"vod_remarks\": \"更新至 12 集\",\u003cbr\u003e      \"vod_play_from\": \"hls$$$mp4\",\u003cbr\u003e      \"vod_play_url\": \"第01集$https://cdn.example.com/1.m3u8#第02集$https://cdn.example.com/2.m3u8$$$第01集$https://cdn.example.com/1.mp4#第02集$https://cdn.example.com/2.mp4\" }\u003cbr\u003e  ]\u003cbr\u003e}\u003c/div\u003e\n    \u003cdiv style=\"margin-top:12px\"\u003e\u003cspan class=\"c\"\u003e// detail 回應多含 vod_pic / vod_content / vod_play_from / vod_play_url 完整版\u003c/span\u003e\u003cbr\u003e{\n  \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 1, \"limit\": \"20\", \"total\": 1,\u003cbr\u003e  \"list\": [{ \"vod_id\": 123, \"vod_name\": \"慶餘年\", \"vod_pic\": \"https://...jpg\",\u003cbr\u003e    \"vod_content\": \"\u0026lt;p\u0026gt;簡介…\u0026lt;/p\u0026gt;\", \"vod_play_from\": \"hls\",\u003cbr\u003e    \"vod_play_url\": \"第01集$https://.../1.m3u8#第02集$https://.../2.m3u8\" }]\u003cbr\u003e}\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003e播放連結解析規則（重點）\u003c/h3\u003e\n  \u003cp\u003e\u003ccode\u003evod_play_from\u003c/code\u003e 與 \u003ccode\u003evod_play_url\u003c/code\u003e 是一一對應的兩條以 \u003ccode\u003e$$$\u003c/code\u003e 分隔的字串：\u003c/p\u003e\n  \u003cdiv class=\"codeblock\"\u003e\n    vod_play_from = \"youku$$$hls\"  \u0026nbsp;\u003cspan class=\"c\"\u003e// 2 組來源\u003c/span\u003e\u003cbr\u003e\n    vod_play_url  = \"第01集$https://youku/...#第02集$https://youku/...$$$第01集$https://cdn/.../1.m3u8#第02集$https://cdn/.../2.m3u8\"\n    \u003cspan class=\"c\" style=\"display:block;margin-top:8px\"\u003e// 拆法：先按 $$$ 拆成組 → 每組按 # 拆成集 → 每集按 $ 拆成 [標題, URL]\u003c/span\u003e\n    \u003cspan class=\"c\"\u003e// 注意：標題或 URL 中若含 $ 或 #，站方通常會做轉義；解析失敗應視為「來源格式異常」\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cp\u003e統計目前集數時，數 \u003ccode\u003e#\u003c/code\u003e 的段數即可；\u003ccode\u003evod_remarks\u003c/code\u003e 只是站方寫的文字（「更新至 N 集」），以實際解析出的段數為準。\u003c/p\u003e\n\n  \u003ch2\u003e常見坑與排錯\u003c/h2\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e現象\u003c/th\u003e\u003cth\u003e原因與處理\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e瀏覽器打 \u003ccode\u003eac=list\u003c/code\u003e 回空白或 403\u003c/td\u003e\u003ctd\u003e站方可能擋非白名單 UA / 需 Referer，或已關閉對外採集。換一個信任站或聯絡站方。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecode != 1\u003c/code\u003e 或 \u003ccode\u003elist\u003c/code\u003e 為空\u003c/td\u003e\u003ctd\u003e參數錯誤或該分類/關鍵字無資料。檢查 \u003ccode\u003et\u003c/code\u003e 是否存在、\u003ccode\u003ewd\u003c/code\u003e 是否正確 encode。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_play_url\u003c/code\u003e 為空但有 \u003ccode\u003evod_remarks\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e站方只更新文字、尚未上片源；等下一輪 \u003ccode\u003eh=24\u003c/code\u003e 再檢查。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_time\u003c/code\u003e 格式不一\u003c/td\u003e\u003ctd\u003e部分站回 Unix 時間戳，部分回字串。程式端同時兼容兩種。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e同一劇在不同站 \u003ccode\u003evod_id\u003c/code\u003e 不同\u003c/td\u003e\u003ctd\u003e正常，\u003ccode\u003evod_id\u003c/code\u003e 是站內自增主鍵。跨站去重請用 \u003ccode\u003evod_name + vod_year\u003c/code\u003e 輔助判斷。\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"foot\"\u003e最後更新：2026-09-02 · 追劇播放器已正式上線，本文對應現行版面 · 附錄依據 MACCMS V10 官方 API 文件與 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e 採集介面文件整理 · 資料來源僅供對接參考，實際以各資源站回傳為準\u003c/div\u003e\n\u003c/div\u003e\n","content":"\u003cdiv class=\"doc\"\u003e  \u003cdiv class=\"hero\"\u003e \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e系統定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e資源站是資料來源，\u003cbr\u003e追劇中心是你的清單\u003c/div\u003e\u003cdiv class=\"n\"\u003e播放器只負責「照你指定的站去問」與「記住你追到哪一集」\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e介面標準\u003c/div\u003e\u003cdiv class=\"v\"\u003e蘋果 CMS（MACCMS V10）\u003cbr\u003e\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e\u003c/div\u003e\u003cdiv class=\"n\"\u003eac=list / detail、t / pg / wd / ids / h / at\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e安全原則\u003c/div\u003e\u003cdiv class=\"v\"\u003e只加你信任的站\u003cbr\u003e不信任的不加\u003c/div\u003e\u003cdiv class=\"n\"\u003e來源不可信，片名、集數、播放連結都不可信\u003c/div\u003e\u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e已上線\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e側邊欄 →「追劇播放器」就是入口。\u003c/strong\u003e下面兩個資料夾「資源站」「我的追劇」已可直接使用；右側會依你選中的項目自動切換成瀏覽與播放畫面，不需要額外安裝。\u003c/div\u003e\u003c/div\u003e \u003ch2\u003e一、這套系統會做什麼\u003c/h2\u003e \u003cp\u003e「無廣告追劇中心」的想法很單純：你挑幾個\u003cstrong style=\"color:var(--ink)\"\u003e自己信任的資源站\u003c/strong\u003e加進來，之後把想追的劇加入清單，系統每天幫你去各站問一次「有沒有新集數」，有就提醒你。站掛了、格式錯了，就如實告訴你，不會自己編集數。\u003c/p\u003e \u003cdiv class=\"grid2\"\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔌 資源站\u003c/h4\u003e\u003cp\u003e提供片庫的遠端 API（蘋果 CMS 規格）。系統不會內建任何站，站由你自己決定要加哪幾個。\u003c/p\u003e\u003c/div\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e📋 追蹤清單\u003c/h4\u003e\u003cp\u003e你按「加入追蹤」才會出現在清單裡。清單記住：劇名、vod_id、來源站、最後看到哪一集。\u003c/p\u003e\u003c/div\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔄 每日檢查\u003c/h4\u003e\u003cp\u003e追劇更新助理每日 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e依各站 API 實際回傳比對集數，有更新才寫入「追劇筆記」通知。\u003c/p\u003e\u003c/div\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e▶️ 播放器\u003c/h4\u003e\u003cp\u003e已正式上線。支援站內搜尋、海報詳情、多播放源切換與 \u003ccode\u003em3u8\u003c/code\u003e 直連播放（hls.js），免廣告、進度自動記憶。\u003c/p\u003e\u003c/div\u003e \u003c/div\u003e \u003ch2\u003e二、實際操作：照著做就好\u003c/h2\u003e \u003cp\u003e下面 5 步對應你在 app 裡實際看到的版面。左側是清單、右側是內容，「追劇播放器」這個區塊同時管兩個資料夾。\u003c/p\u003e \u003col class=\"steps\"\u003e \u003cli\u003e\u003cb\u003e在側邊欄找到「追劇播放器」下的兩個資料夾\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e展開側邊欄的 \u003ccode\u003e追劇播放器\u003c/code\u003e 區段，你會看到 \u003ccode\u003e資源站\u003c/code\u003e（圖示 server）與 \u003ccode\u003e我的追劇\u003c/code\u003e（圖示 tv）兩個資料夾。點資料夾名稱進入；點資料夾內的單筆項目會在右側開啟詳情。左欄永遠是清單，右欄永遠是瀏覽/詳情/播放。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e在「資源站」新增一個你信任的 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 網址\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e進入「資源站」資料夾 → 點右上角 \u003ccode\u003e＋ 新增資源站\u003c/code\u003e（沒有任何站時，中間也會有「新增第一個資源站」虛線按鈕）。填「名稱」與完整的資源站網址（以 \u003ccode\u003ehttp(s)://\u003c/code\u003e 開頭、結尾指向 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的介面根網址），可選是否「啟用」。按「儲存」時系統會自動用 \u003ccode\u003eac=list\u0026amp;pg=1\u003c/code\u003e 對該網址做一次連線測試：成功顯示「連線測試成功」，失敗也會照實顯示錯誤訊息並寫入該資源站的 \u003ccode\u003elastError\u003c/code\u003e，不會靜悄悄略過。只加你信任的來源，不要貼來路不明的網址。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e在「資源站」右側瀏覽最新片單或關鍵字搜尋，點海報看詳情、挑播放源與集數、免廣告直接播放\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在左欄選中一個已新增的資源站，右側會自動載入它的最新片單（預設 \u003ccode\u003epg=1\u003c/code\u003e，每頁 24 部，有分頁與總筆數）。上方有關鍵字輸入框，輸入劇名後按「搜尋」或按 Enter，即以 \u003ccode\u003ewd=關鍵字\u003c/code\u003e 重新查詢。\u003cbr\u003e片單以海報網格呈現，每張卡顯示封面與 \u003ccode\u003evod_remarks\u003c/code\u003e（如「更新至 20 集」）。點海報會彈出「劇集詳情」對話框：上方是封面、類型/年份/地區與進度文字，中間是簡介，下方是播放源與集數。\u003cbr\u003e若該劇有多個播放源（如多組 \u003ccode\u003evod_play_from\u003c/code\u003e），會出現「播放源」下拉選單，切換後集數網格立即更新。點任一集數立即以 \u003ccode\u003eVodPlayer\u003c/code\u003e 直連播放：\u003ccode\u003em3u8\u003c/code\u003e 用 hls.js 解碼，其他直鏈直接播，免廣告；對話框內可「複製播放網址」或「在新分頁開啟」。若來源暫時連不上、或不提供此劇的播放連結，會在對話框內顯示錯誤說明。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e點「加入追蹤」後，劇集會進「我的追劇」；播放進度自動記住，右側可繼續播放、調進度、標記看完\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在劇集詳情對話框按 \u003ccode\u003e加入追蹤\u003c/code\u003e，系統會以該劇的 \u003ccode\u003esourceId + sourceVodId\u003c/code\u003e 在「我的追劇」建立一筆追蹤，並補齊封面、類型與 \u003ccode\u003evodRemarks\u003c/code\u003e。\u003cbr\u003e之後切到「我的追劇」資料夾：左欄是你的追蹤清單（每筆顯示劇名與進度文字），點任一部劇，右側切換為該劇的專屬管理頁：\u003cbr\u003e• 上方顯示封面、狀態標籤（想追 / 追看中 / 已看完）、來源站、類型與「已看到第 N 集」。\u003cbr\u003e• 中間按鈕：\u003ccode\u003e▶ 繼續看第 N+1 集\u003c/code\u003e（自動算下一集並直接開播）、\u003ccode\u003e挑選集數\u003c/code\u003e（重開詳情選集）、\u003ccode\u003e標記為已看完\u003c/code\u003e / \u003ccode\u003e回到追看中\u003c/code\u003e。\u003cbr\u003e• 下方進度列：\u003ccode\u003e上一集 / 下一集\u003c/code\u003e 按鈕即時改寫 \u003ccode\u003ewatchedEpisode\u003c/code\u003e，右側下拉可切換 \u003ccode\u003epending / watching / finished\u003c/code\u003e 狀態；若原本是 \u003ccode\u003epending\u003c/code\u003e 且開始記錄集數，會自動轉為 \u003ccode\u003ewatching\u003c/code\u003e。\u003cbr\u003e• 在詳情對話框內直接點集數播放時，若集數大於目前記錄，也會自動把 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 更新到該集，不用手動補。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e每天 20:00 自動檢查各追蹤劇有無新集數，有更新就寫進「追劇筆記」\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e追劇更新助理每天 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e 逐部檢查「我的追劇」中狀態為 \u003ccode\u003ewatching / pending\u003c/code\u003e 且來源資源站為啟用的劇：對來源站打 \u003ccode\u003eac=detail\u0026amp;ids=\u0026lt;sourceVodId\u0026gt;\u003c/code\u003e，用回傳的 \u003ccode\u003evod_play_url\u003c/code\u003e 算出最新集數並比對 \u003ccode\u003evodRemarks\u003c/code\u003e。若比你的 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 新，就更新該筆的 \u003ccode\u003evodRemarks\u003c/code\u003e，並在\u003cstrong\u003e「追劇筆記」\u003c/strong\u003e資料夾寫（或更新）一篇「劇集更新通知」筆記，用清單列出每部「已更新到第 N 集，你看到第 M 集」；沒有新進度就什麼都不寫。來源一時連不上會略過該部、如實記下，不會編造進度。你也可以在右側管理頁隨時按右上角 \u003ccode\u003e↻ 檢查更新\u003c/code\u003e 手動檢查一次。\u003c/span\u003e\u003c/li\u003e \u003c/ol\u003e \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e版面提示\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e左清單、右內容是固定規則。\u003c/strong\u003e「資源站」左欄選站 → 右欄瀏覽該站；「我的追劇」左欄選劇 → 右欄管該劇。兩個資料夾的右上角都有 \u003ccode\u003e＋\u003c/code\u003e 與功能按鈕（編輯 / 移除 / 檢查更新），找不到功能時先看右上角的 \u003ccode\u003ePluginTopbar\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e⚠️ 安全提醒\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e只加入你信任的來源。\u003c/strong\u003e資源站回傳的片名、封面 \u003ccode\u003evod_pic\u003c/code\u003e、簡介 \u003ccode\u003evod_content\u003c/code\u003e 與播放連結 \u003ccode\u003evod_play_url\u003c/code\u003e 都是第三方提供的字串，可能含廣告跳轉或誘導連結。本系統不會替來源背書，新增前請確認：1) 站方是你認識或社群長期推薦的、2) 用瀏覽器試打回傳的 JSON 結構正常、3) 播放連結指向你預期的站點。來路不明的站一律不要加。\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"hr\"\u003e\u003c/div\u003e \u003ch2\u003e附錄：資源站介面規格（技術參考）\u003c/h2\u003e \u003cp\u003e以下為蘋果 CMS（MACCMS V10）\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的已查證規格，整理自官方文件 \u003ccode\u003egithub.com/magicblack/maccms10 / 說明文檔/API接口說明.txt\u003c/code\u003e 並交叉比對 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e。日常使用不需要背，排錯或想理解背後在做什麼時再看。\u003c/p\u003e \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e查證說明\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e本附錄的介面規格已上網查證\u003c/strong\u003e：以 MACCMS V10 官方文件為準，ac / 參數 / 回傳欄位皆依此整理，非臆測。\u003c/div\u003e\u003c/div\u003e \u003ch3\u003eAC 動作\u003c/h3\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003eac\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e別名（部分站兼容）\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e取影片列表（分頁、可篩選）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideolist\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e取影片詳情（含播放連結）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideodetail\u003c/code\u003e / \u003ccode\u003evideo\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cp\u003e官方文件寫 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，但實務上許多資源站為了兼容舊採集器，也同時接受 \u003ccode\u003evideolist\u003c/code\u003e / \u003ccode\u003evideodetail\u003c/code\u003e。建議優先送 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，失敗再試別名。\u003c/p\u003e \u003cp\u003e標準位置：\u003ccode\u003e/api.php/provide/vod/\u003c/code\u003e。多數站同時也接受 \u003ccode\u003e/api.php/provide/vod/at/json/\u003c/code\u003e 這種路徑式寫法。回傳預設 \u003ccode\u003eJSON\u003c/code\u003e，加 \u003ccode\u003e\u0026amp;at=xml\u003c/code\u003e 可改回 XML（本系統只用 JSON）。\u003c/p\u003e \u003ch3\u003e常用參數\u003c/h3\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e適用\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003et\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e分類 ID（\u003ccode\u003etype_id\u003c/code\u003e）。例：\u003ccode\u003et=1\u003c/code\u003e 只取該分類。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003epg\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e頁碼，從 1 開始。例：\u003ccode\u003epg=3\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003ewd\u003c/td\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e搜尋關鍵字（片名模糊搜尋）。例：\u003ccode\u003ewd=慶餘年\u003c/code\u003e 需 URL-encode。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eids\u003c/td\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e指定影片 ID，多個用逗號分隔。例：\u003ccode\u003eids=123,456\u003c/code\u003e。最常用於「加入追蹤時抓詳情」。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eh\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e只取 N 小時內有更新的資料。例：\u003ccode\u003eh=24\u003c/code\u003e 取 24 小時內更新的（每日檢查用）。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eat\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e回傳格式：\u003ccode\u003ejson\u003c/code\u003e（預設）或 \u003ccode\u003exml\u003c/code\u003e。例：\u003ccode\u003eat=json\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003ch3\u003e常用請求範例\u003c/h3\u003e \u003cdiv class=\"codeblock\"\u003e \u003cdiv\u003e\u003cspan class=\"c\"\u003e# 列表第 1 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;pg=1\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 搜尋「慶餘年」\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;wd=%E6%85%B6%E9%A4%98%E5%B9%B4\u0026amp;pg=1\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 分類 t=2 的第 5 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;t=2\u0026amp;pg=5\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取 24 小時內更新\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;h=24\u0026amp;pg=1\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取某幾部劇的詳情（含播放連結）\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=detail\u0026amp;ids=123,456\u003c/div\u003e \u003c/div\u003e \u003ch3\u003e回傳 JSON 結構\u003c/h3\u003e \u003cp\u003e頂層固定欄位：\u003c/p\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003ecode\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e1 = 成功，其餘為失敗\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003emsg\u003c/td\u003e\u003ctd\u003estring\u003c/td\u003e\u003ctd\u003e訊息，例如「數據列表」\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003epage\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e當前頁碼\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003epagecount\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總頁數\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003elimit\u003c/td\u003e\u003ctd\u003estring|number\u003c/td\u003e\u003ctd\u003e每頁筆數（有些站回字串 \"20\"）\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003etotal\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總筆數\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e影片陣列，見下表\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eclass\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e分類清單（部分站在 list 回傳時附帶）\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cp\u003e\u003ccode\u003elist\u003c/code\u003e 內每筆影片常用欄位：\u003c/p\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_id\u003c/td\u003e\u003ctd\u003e影片唯一 ID\u003c/td\u003e\u003ctd\u003e追蹤主鍵\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_name\u003c/td\u003e\u003ctd\u003e片名\u003c/td\u003e\u003ctd\u003e顯示與搜尋\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003etype_id / type_name\u003c/td\u003e\u003ctd\u003e分類 ID / 分類名稱\u003c/td\u003e\u003ctd\u003e篩選\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_en\u003c/td\u003e\u003ctd\u003e英文別名 / 拼音\u003c/td\u003e\u003ctd\u003e次要顯示\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_time\u003c/td\u003e\u003ctd\u003e最後更新時間（\"YYYY-MM-DD HH:mm:ss\"）\u003c/td\u003e\u003ctd\u003e判斷新集\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_remarks\u003c/td\u003e\u003ctd\u003e更新狀態文字，如「更新至 20 集」「完結」\u003c/td\u003e\u003ctd\u003e快速判斷\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_pic\u003c/td\u003e\u003ctd\u003e封面圖 URL\u003c/td\u003e\u003ctd\u003e海報\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_area / vod_lang / vod_year\u003c/td\u003e\u003ctd\u003e地區 / 語言 / 年份\u003c/td\u003e\u003ctd\u003e篩選與顯示\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_actor / vod_director\u003c/td\u003e\u003ctd\u003e主演 / 導演\u003c/td\u003e\u003ctd\u003e顯示\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_content\u003c/td\u003e\u003ctd\u003e簡介（多為 HTML）\u003c/td\u003e\u003ctd\u003e詳情頁\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_serial\u003c/td\u003e\u003ctd\u003e連載狀態相關（站方定義不一）\u003c/td\u003e\u003ctd\u003e參考\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_play_from\u003c/td\u003e\u003ctd\u003e播放來源分組名，以 \u003ccode\u003e$$$\u003c/code\u003e 分隔多來源\u003c/td\u003e\u003ctd\u003e解析播放\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_play_url\u003c/td\u003e\u003ctd\u003e每組的集數清單，組間以 \u003ccode\u003e$$$\u003c/code\u003e 對應，組內用 \u003ccode\u003e#\u003c/code\u003e 分隔集數，單集格式 \u003ccode\u003e標題$URL\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e解析集數\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cdiv class=\"codeblock\"\u003e \u003cdiv\u003e\u003cspan class=\"c\"\u003e// list 回應（節錄）\u003c/span\u003e\u003cbr\u003e{ \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 23, \"limit\": \"20\", \"total\": 449,\u003cbr\u003e  \"list\": [\u003cbr\u003e    { \"vod_id\": 493, \"vod_name\": \"測試劇\", \"type_id\": 9, \"type_name\": \"連續劇\",\u003cbr\u003e      \"vod_time\": \"2026-09-01 20:12:00\", \"vod_remarks\": \"更新至 12 集\",\u003cbr\u003e      \"vod_play_from\": \"hls$$$mp4\",\u003cbr\u003e      \"vod_play_url\": \"第01集$https://cdn.example.com/1.m3u8#第02集$https://cdn.example.com/2.m3u8$$$第01集$https://cdn.example.com/1.mp4#第02集$https://cdn.example.com/2.mp4\" }\u003cbr\u003e  ]\u003cbr\u003e}\u003c/div\u003e \u003cdiv style=\"margin-top:12px\"\u003e\u003cspan class=\"c\"\u003e// detail 回應多含 vod_pic / vod_content / vod_play_from / vod_play_url 完整版\u003c/span\u003e\u003cbr\u003e{ \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 1, \"limit\": \"20\", \"total\": 1,\u003cbr\u003e  \"list\": [{ \"vod_id\": 123, \"vod_name\": \"慶餘年\", \"vod_pic\": \"https://...jpg\",\u003cbr\u003e    \"vod_content\": \"\u0026lt;p\u0026gt;簡介…\u0026lt;/p\u0026gt;\", \"vod_play_from\": \"hls\",\u003cbr\u003e    \"vod_play_url\": \"第01集$https://.../1.m3u8#第02集$https://.../2.m3u8\" }]\u003cbr\u003e}\u003c/div\u003e \u003c/div\u003e \u003ch3\u003e播放連結解析規則（重點）\u003c/h3\u003e \u003cp\u003e\u003ccode\u003evod_play_from\u003c/code\u003e 與 \u003ccode\u003evod_play_url\u003c/code\u003e 是一一對應的兩條以 \u003ccode\u003e$$$\u003c/code\u003e 分隔的字串：\u003c/p\u003e \u003cdiv class=\"codeblock\"\u003e vod_play_from = \"youku$$$hls\"  \u0026nbsp;\u003cspan class=\"c\"\u003e// 2 組來源\u003c/span\u003e\u003cbr\u003e vod_play_url  = \"第01集$https://youku/...#第02集$https://youku/...$$$第01集$https://cdn/.../1.m3u8#第02集$https://cdn/.../2.m3u8\" \u003cspan class=\"c\" style=\"display:block;margin-top:8px\"\u003e// 拆法：先按 $$$ 拆成組 → 每組按 # 拆成集 → 每集按 $ 拆成 [標題, URL]\u003c/span\u003e \u003cspan class=\"c\"\u003e// 注意：標題或 URL 中若含 $ 或 #，站方通常會做轉義；解析失敗應視為「來源格式異常」\u003c/span\u003e \u003c/div\u003e \u003cp\u003e統計目前集數時，數 \u003ccode\u003e#\u003c/code\u003e 的段數即可；\u003ccode\u003evod_remarks\u003c/code\u003e 只是站方寫的文字（「更新至 N 集」），以實際解析出的段數為準。\u003c/p\u003e \u003ch2\u003e常見坑與排錯\u003c/h2\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e現象\u003c/th\u003e\u003cth\u003e原因與處理\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e瀏覽器打 \u003ccode\u003eac=list\u003c/code\u003e 回空白或 403\u003c/td\u003e\u003ctd\u003e站方可能擋非白名單 UA / 需 Referer，或已關閉對外採集。換一個信任站或聯絡站方。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecode != 1\u003c/code\u003e 或 \u003ccode\u003elist\u003c/code\u003e 為空\u003c/td\u003e\u003ctd\u003e參數錯誤或該分類/關鍵字無資料。檢查 \u003ccode\u003et\u003c/code\u003e 是否存在、\u003ccode\u003ewd\u003c/code\u003e 是否正確 encode。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_play_url\u003c/code\u003e 為空但有 \u003ccode\u003evod_remarks\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e站方只更新文字、尚未上片源；等下一輪 \u003ccode\u003eh=24\u003c/code\u003e 再檢查。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_time\u003c/code\u003e 格式不一\u003c/td\u003e\u003ctd\u003e部分站回 Unix 時間戳，部分回字串。程式端同時兼容兩種。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e同一劇在不同站 \u003ccode\u003evod_id\u003c/code\u003e 不同\u003c/td\u003e\u003ctd\u003e正常，\u003ccode\u003evod_id\u003c/code\u003e 是站內自增主鍵。跨站去重請用 \u003ccode\u003evod_name + vod_year\u003c/code\u003e 輔助判斷。\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cdiv class=\"hr\"\u003e\u003c/div\u003e \u003cdiv class=\"foot\"\u003e最後更新：2026-09-02 · 追劇播放器已正式上線，本文對應現行版面 · 附錄依據 MACCMS V10 官方 API 文件與 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e 採集介面文件整理 · 資料來源僅供對接參考，實際以各資源站回傳為準\u003c/div\u003e \u003c/div\u003e","createdAt":1788361940984,"deletedAt":null,"displayMode":"artifact","embedRenders":{},"id":"57d675e5afa24d7179cc3456","isNew":false,"isPublic":true,"itemType":"NOTE","name":"追劇上手指南 — 無廣告追劇中心與資源站介面規格","parents":{"5ad36dcfda4189c90991ccf2":1788361940984},"preParentID":null,"updatedAt":1788495458506,"updatedBy":{"userId":"6a983a0c0215b385286e05","userName":"VINCENT SOH"},"version":10,"websiteContent":"[{\"originUrl\":\"https://cdn.example.com/1.m3u8#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn.example.com/2.m3u8$$$\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn.example.com/1.mp4#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn.example.com/2.mp4\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://...jpg\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://.../1.m3u8#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://.../2.m3u8\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://youku/...#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://youku/...$$$\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn/.../1.m3u8#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn/.../2.m3u8\",\"title\":null,\"content\":null,\"imageUrl\":null}]"},"ownerName":"VINCENT SOH","subtree":[{"artifactHtml":"\u003cstyle\u003e\n  :root { --paper:#F9F7FF; --ink:#181826; --ink-2:#5B5870; --accent:#7C3AED; --accent-2:#4F46E5; --soft:#EDE9FE; --soft-2:#F5F3FF; --hair:#DDD6FE; --ok:#059669; --warn:#D97706; --bad:#DC2626; }\n  :root[data-theme=\"dark\"] { --paper:#14131C; --ink:#EDE9FF; --ink-2:#A9A6BF; --accent:#A78BFA; --accent-2:#818CF8; --soft:#1E1B33; --soft-2:#1A1930; --hair:#2E2B4A; --ok:#34D399; --warn:#FBBF24; --bad:#F87171; }\n  *{box-sizing:border-box}\n  .doc{background:var(--paper);color:var(--ink);padding:30px 32px 36px;font:15.5px/1.78 -apple-system,\"PingFang TC\",\"Noto Sans TC\",sans-serif;}\n  header{margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid var(--hair)}\n  .eyebrow{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}\n  h1{font-size:28px;line-height:1.25;letter-spacing:-.02em;margin:10px 0 8px;font-weight:800}\n  .lede{color:var(--ink-2);font-size:15px;line-height:1.6;margin:0;max-width:68ch}\n  h2{font-size:18px;font-weight:750;margin:30px 0 10px;letter-spacing:-.01em}\n  h3{font-size:14px;font-weight:750;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);margin:20px 0 8px}\n  p{color:var(--ink-2);margin:10px 0;max-width:68ch}\n  .hero{display:flex;gap:16px;flex-wrap:wrap;margin:20px 0 6px}\n  .hero-card{flex:1 1 200px;background:var(--soft);border:1px solid var(--hair);border-radius:12px;padding:16px 18px}\n  .hero-card .k{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent)}\n  .hero-card .v{font-size:15px;font-weight:700;margin-top:6px;line-height:1.4}\n  .hero-card .n{font-size:12.5px;color:var(--ink-2);margin-top:4px;line-height:1.5}\n  .callout{display:flex;gap:12px;align-items:flex-start;background:var(--soft-2);border:1px solid var(--hair);border-left:3px solid var(--accent);border-radius:8px;padding:14px 16px;margin:16px 0}\n  .callout.warn{border-left-color:var(--warn);background:#FFFBEB}\n  :root[data-theme=\"dark\"] .callout.warn{background:#2A2210}\n  .callout.ok{border-left-color:var(--ok)}\n  .callout .tag{flex:none;font:800 11px ui-monospace,Menlo,monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px}\n  .callout.warn .tag{color:var(--warn)}\n  .callout.ok .tag{color:var(--ok)}\n  .callout div{font-size:13.5px;line-height:1.65;color:var(--ink-2)}\n  .callout div strong{color:var(--ink)}\n  table{width:100%;border-collapse:collapse;margin:12px 0 16px;font-size:13.5px}\n  th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--hair);vertical-align:top}\n  th{font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;color:var(--ink-2);white-space:nowrap}\n  td{color:var(--ink-2)} td:first-child{color:var(--ink);font-weight:600;white-space:nowrap}\n  code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);border:1px solid var(--hair);padding:1px 6px;border-radius:5px;color:var(--ink);word-break:break-all}\n  .codeblock{background:var(--soft);border:1px solid var(--hair);border-radius:10px;padding:14px 16px;margin:14px 0;overflow-x:auto;font:12.5px/1.6 ui-monospace,Menlo,monospace;color:var(--ink)}\n  .codeblock .c{color:var(--ink-2)}\n  .steps{list-style:none;padding:0;margin:12px 0;display:grid;gap:10px;counter-reset:step}\n  .steps li{position:relative;padding:14px 16px 14px 52px;background:var(--soft-2);border:1px solid var(--hair);border-radius:10px}\n  .steps li::before{counter-increment:step;content:counter(step);position:absolute;left:14px;top:14px;width:26px;height:26px;display:grid;place-items:center;background:var(--accent);color:#fff;font:800 12px ui-monospace,Menlo,monospace;border-radius:50%}\n  .steps li b{color:var(--ink)}\n  .steps li span{color:var(--ink-2);font-size:13.5px}\n  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}\n  .mini{border:1px solid var(--hair);border-radius:10px;padding:14px 16px;background:var(--soft-2)}\n  .mini h4{margin:0 0 6px;font-size:13px;font-weight:750;color:var(--ink)}\n  .mini p{margin:0;font-size:13px;line-height:1.6}\n  .pill{display:inline-flex;align-items:center;font:700 11px ui-monospace,Menlo,monospace;letter-spacing:.06em;padding:3px 8px;border-radius:999px;border:1px solid var(--hair);background:var(--soft);color:var(--accent);margin-right:6px}\n  .hr{height:1px;background:var(--hair);margin:26px 0}\n  .foot{font-size:12.5px;color:var(--ink-2);border-top:1px solid var(--hair);padding-top:16px;margin-top:24px}\n  @media(max-width:640px){.doc{padding:20px 18px}h1{font-size:23px}.grid2{grid-template-columns:1fr}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\n  \u003cheader\u003e\n    \u003cdiv class=\"eyebrow\"\u003eCubeLV · 追劇部門 · 無廣告追劇中心\u003c/div\u003e\n    \u003ch1\u003e追劇上手指南 — 無廣告追劇中心與資源站介面規格\u003c/h1\u003e\n    \u003cp class=\"lede\"\u003e「追劇播放器」已正式上線。這份指南不再是「等工具上線再說」，你可以現在就照著做：加信任的資源站、搜劇、免廣告直播、加入追蹤、讓系統每天幫你盯新集數。後半部的資源站介面規格保留作技術附錄，需要排錯或對接時再看。\u003c/p\u003e\n  \u003c/header\u003e\n\n  \u003cdiv class=\"hero\"\u003e\n    \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e系統定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e資源站是資料來源，\u003cbr\u003e追劇中心是你的清單\u003c/div\u003e\u003cdiv class=\"n\"\u003e播放器只負責「照你指定的站去問」與「記住你追到哪一集」\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e介面標準\u003c/div\u003e\u003cdiv class=\"v\"\u003e蘋果 CMS（MACCMS V10）\u003cbr\u003e\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e\u003c/div\u003e\u003cdiv class=\"n\"\u003eac=list / detail、t / pg / wd / ids / h / at\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e安全原則\u003c/div\u003e\u003cdiv class=\"v\"\u003e只加你信任的站\u003cbr\u003e不信任的不加\u003c/div\u003e\u003cdiv class=\"n\"\u003e來源不可信，片名、集數、播放連結都不可信\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e已上線\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e側邊欄 →「追劇播放器」就是入口。\u003c/strong\u003e下面兩個資料夾「資源站」「我的追劇」已可直接使用；右側會依你選中的項目自動切換成瀏覽與播放畫面，不需要額外安裝。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e一、這套系統會做什麼\u003c/h2\u003e\n  \u003cp\u003e「無廣告追劇中心」的想法很單純：你挑幾個\u003cstrong style=\"color:var(--ink)\"\u003e自己信任的資源站\u003c/strong\u003e加進來，之後把想追的劇加入清單，系統每天幫你去各站問一次「有沒有新集數」，有就提醒你。站掛了、格式錯了，就如實告訴你，不會自己編集數。\u003c/p\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔌 資源站\u003c/h4\u003e\u003cp\u003e提供片庫的遠端 API（蘋果 CMS 規格）。系統不會內建任何站，站由你自己決定要加哪幾個。\u003c/p\u003e\u003c/div\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e📋 追蹤清單\u003c/h4\u003e\u003cp\u003e你按「加入追蹤」才會出現在清單裡。清單記住：劇名、vod_id、來源站、最後看到哪一集。\u003c/p\u003e\u003c/div\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔄 每日檢查\u003c/h4\u003e\u003cp\u003e追劇更新助理每日 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e依各站 API 實際回傳比對集數，有更新才寫入「追劇筆記」通知。\u003c/p\u003e\u003c/div\u003e\n    \u003cdiv class=\"mini\"\u003e\u003ch4\u003e▶️ 播放器\u003c/h4\u003e\u003cp\u003e已正式上線。支援站內搜尋、海報詳情、多播放源切換與 \u003ccode\u003em3u8\u003c/code\u003e 直連播放（hls.js），免廣告、進度自動記憶。\u003c/p\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003ch2\u003e二、實際操作：照著做就好\u003c/h2\u003e\n  \u003cp\u003e下面 5 步對應你在 app 裡實際看到的版面。左側是清單、右側是內容，「追劇播放器」這個區塊同時管兩個資料夾。\u003c/p\u003e\n\n  \u003col class=\"steps\"\u003e\n    \u003cli\u003e\u003cb\u003e在側邊欄找到「追劇播放器」下的兩個資料夾\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e展開側邊欄的 \u003ccode\u003e追劇播放器\u003c/code\u003e 區段，你會看到 \u003ccode\u003e資源站\u003c/code\u003e（圖示 server）與 \u003ccode\u003e我的追劇\u003c/code\u003e（圖示 tv）兩個資料夾。點資料夾名稱進入；點資料夾內的單筆項目會在右側開啟詳情。左欄永遠是清單，右欄永遠是瀏覽/詳情/播放。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e在「資源站」新增一個你信任的 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 網址\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e進入「資源站」資料夾 → 點右上角 \u003ccode\u003e＋ 新增資源站\u003c/code\u003e（沒有任何站時，中間也會有「新增第一個資源站」虛線按鈕）。填「名稱」與完整的資源站網址（以 \u003ccode\u003ehttp(s)://\u003c/code\u003e 開頭、結尾指向 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的介面根網址），可選是否「啟用」。按「儲存」時系統會自動用 \u003ccode\u003eac=list\u0026amp;pg=1\u003c/code\u003e 對該網址做一次連線測試：成功顯示「連線測試成功」，失敗也會照實顯示錯誤訊息並寫入該資源站的 \u003ccode\u003elastError\u003c/code\u003e，不會靜悄悄略過。只加你信任的來源，不要貼來路不明的網址。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e在「資源站」右側瀏覽最新片單或關鍵字搜尋，點海報看詳情、挑播放源與集數、免廣告直接播放\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在左欄選中一個已新增的資源站，右側會自動載入它的最新片單（預設 \u003ccode\u003epg=1\u003c/code\u003e，每頁 24 部，有分頁與總筆數）。上方有關鍵字輸入框，輸入劇名後按「搜尋」或按 Enter，即以 \u003ccode\u003ewd=關鍵字\u003c/code\u003e 重新查詢。\u003cbr\u003e片單以海報網格呈現，每張卡顯示封面與 \u003ccode\u003evod_remarks\u003c/code\u003e（如「更新至 20 集」）。點海報會彈出「劇集詳情」對話框：上方是封面、類型/年份/地區與進度文字，中間是簡介，下方是播放源與集數。\u003cbr\u003e若該劇有多個播放源（如多組 \u003ccode\u003evod_play_from\u003c/code\u003e），會出現「播放源」下拉選單，切換後集數網格立即更新。點任一集數立即以 \u003ccode\u003eVodPlayer\u003c/code\u003e 直連播放：\u003ccode\u003em3u8\u003c/code\u003e 用 hls.js 解碼，其他直鏈直接播，免廣告；對話框內可「複製播放網址」或「在新分頁開啟」。若來源暫時連不上、或不提供此劇的播放連結，會在對話框內顯示錯誤說明。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e點「加入追蹤」後，劇集會進「我的追劇」；播放進度自動記住，右側可繼續播放、調進度、標記看完\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在劇集詳情對話框按 \u003ccode\u003e加入追蹤\u003c/code\u003e，系統會以該劇的 \u003ccode\u003esourceId + sourceVodId\u003c/code\u003e 在「我的追劇」建立一筆追蹤，並補齊封面、類型與 \u003ccode\u003evodRemarks\u003c/code\u003e。\u003cbr\u003e之後切到「我的追劇」資料夾：左欄是你的追蹤清單（每筆顯示劇名與進度文字），點任一部劇，右側切換為該劇的專屬管理頁：\u003cbr\u003e• 上方顯示封面、狀態標籤（想追 / 追看中 / 已看完）、來源站、類型與「已看到第 N 集」。\u003cbr\u003e• 中間按鈕：\u003ccode\u003e▶ 繼續看第 N+1 集\u003c/code\u003e（自動算下一集並直接開播）、\u003ccode\u003e挑選集數\u003c/code\u003e（重開詳情選集）、\u003ccode\u003e標記為已看完\u003c/code\u003e / \u003ccode\u003e回到追看中\u003c/code\u003e。\u003cbr\u003e• 下方進度列：\u003ccode\u003e上一集 / 下一集\u003c/code\u003e 按鈕即時改寫 \u003ccode\u003ewatchedEpisode\u003c/code\u003e，右側下拉可切換 \u003ccode\u003epending / watching / finished\u003c/code\u003e 狀態；若原本是 \u003ccode\u003epending\u003c/code\u003e 且開始記錄集數，會自動轉為 \u003ccode\u003ewatching\u003c/code\u003e。\u003cbr\u003e• 在詳情對話框內直接點集數播放時，若集數大於目前記錄，也會自動把 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 更新到該集，不用手動補。\u003c/span\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cb\u003e每天 20:00 自動檢查各追蹤劇有無新集數，有更新就寫進「追劇筆記」\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e追劇更新助理每天 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e 逐部檢查「我的追劇」中狀態為 \u003ccode\u003ewatching / pending\u003c/code\u003e 且來源資源站為啟用的劇：對來源站打 \u003ccode\u003eac=detail\u0026amp;ids=\u0026lt;sourceVodId\u0026gt;\u003c/code\u003e，用回傳的 \u003ccode\u003evod_play_url\u003c/code\u003e 算出最新集數並比對 \u003ccode\u003evodRemarks\u003c/code\u003e。若比你的 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 新，就更新該筆的 \u003ccode\u003evodRemarks\u003c/code\u003e，並在\u003cstrong\u003e「追劇筆記」\u003c/strong\u003e資料夾寫（或更新）一篇「劇集更新通知」筆記，用清單列出每部「已更新到第 N 集，你看到第 M 集」；沒有新進度就什麼都不寫。來源一時連不上會略過該部、如實記下，不會編造進度。你也可以在右側管理頁隨時按右上角 \u003ccode\u003e↻ 檢查更新\u003c/code\u003e 手動檢查一次。\u003c/span\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e版面提示\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e左清單、右內容是固定規則。\u003c/strong\u003e「資源站」左欄選站 → 右欄瀏覽該站；「我的追劇」左欄選劇 → 右欄管該劇。兩個資料夾的右上角都有 \u003ccode\u003e＋\u003c/code\u003e 與功能按鈕（編輯 / 移除 / 檢查更新），找不到功能時先看右上角的 \u003ccode\u003ePluginTopbar\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e\n\n  \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e⚠️ 安全提醒\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e只加入你信任的來源。\u003c/strong\u003e資源站回傳的片名、封面 \u003ccode\u003evod_pic\u003c/code\u003e、簡介 \u003ccode\u003evod_content\u003c/code\u003e 與播放連結 \u003ccode\u003evod_play_url\u003c/code\u003e 都是第三方提供的字串，可能含廣告跳轉或誘導連結。本系統不會替來源背書，新增前請確認：1) 站方是你認識或社群長期推薦的、2) 用瀏覽器試打回傳的 JSON 結構正常、3) 播放連結指向你預期的站點。來路不明的站一律不要加。\u003c/div\u003e\u003c/div\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n\n  \u003ch2\u003e附錄：資源站介面規格（技術參考）\u003c/h2\u003e\n  \u003cp\u003e以下為蘋果 CMS（MACCMS V10）\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的已查證規格，整理自官方文件 \u003ccode\u003egithub.com/magicblack/maccms10 / 說明文檔/API接口說明.txt\u003c/code\u003e 並交叉比對 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e。日常使用不需要背，排錯或想理解背後在做什麼時再看。\u003c/p\u003e\n\n  \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e查證說明\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e本附錄的介面規格已上網查證\u003c/strong\u003e：以 MACCMS V10 官方文件為準，ac / 參數 / 回傳欄位皆依此整理，非臆測。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch3\u003eAC 動作\u003c/h3\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003eac\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e別名（部分站兼容）\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e取影片列表（分頁、可篩選）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideolist\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e取影片詳情（含播放連結）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideodetail\u003c/code\u003e / \u003ccode\u003evideo\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003cp\u003e官方文件寫 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，但實務上許多資源站為了兼容舊採集器，也同時接受 \u003ccode\u003evideolist\u003c/code\u003e / \u003ccode\u003evideodetail\u003c/code\u003e。建議優先送 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，失敗再試別名。\u003c/p\u003e\n  \u003cp\u003e標準位置：\u003ccode\u003e/api.php/provide/vod/\u003c/code\u003e。多數站同時也接受 \u003ccode\u003e/api.php/provide/vod/at/json/\u003c/code\u003e 這種路徑式寫法。回傳預設 \u003ccode\u003eJSON\u003c/code\u003e，加 \u003ccode\u003e\u0026amp;at=xml\u003c/code\u003e 可改回 XML（本系統只用 JSON）。\u003c/p\u003e\n\n  \u003ch3\u003e常用參數\u003c/h3\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e適用\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003et\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e分類 ID（\u003ccode\u003etype_id\u003c/code\u003e）。例：\u003ccode\u003et=1\u003c/code\u003e 只取該分類。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003epg\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e頁碼，從 1 開始。例：\u003ccode\u003epg=3\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003ewd\u003c/td\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e搜尋關鍵字（片名模糊搜尋）。例：\u003ccode\u003ewd=慶餘年\u003c/code\u003e 需 URL-encode。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eids\u003c/td\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e指定影片 ID，多個用逗號分隔。例：\u003ccode\u003eids=123,456\u003c/code\u003e。最常用於「加入追蹤時抓詳情」。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eh\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e只取 N 小時內有更新的資料。例：\u003ccode\u003eh=24\u003c/code\u003e 取 24 小時內更新的（每日檢查用）。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eat\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e回傳格式：\u003ccode\u003ejson\u003c/code\u003e（預設）或 \u003ccode\u003exml\u003c/code\u003e。例：\u003ccode\u003eat=json\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003ch3\u003e常用請求範例\u003c/h3\u003e\n  \u003cdiv class=\"codeblock\"\u003e\n    \u003cdiv\u003e\u003cspan class=\"c\"\u003e# 列表第 1 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;pg=1\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 搜尋「慶餘年」\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;wd=%E6%85%B6%E9%A4%98%E5%B9%B4\u0026amp;pg=1\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 分類 t=2 的第 5 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;t=2\u0026amp;pg=5\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取 24 小時內更新\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;h=24\u0026amp;pg=1\u003c/div\u003e\n    \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取某幾部劇的詳情（含播放連結）\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=detail\u0026amp;ids=123,456\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003e回傳 JSON 結構\u003c/h3\u003e\n  \u003cp\u003e頂層固定欄位：\u003c/p\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003ecode\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e1 = 成功，其餘為失敗\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003emsg\u003c/td\u003e\u003ctd\u003estring\u003c/td\u003e\u003ctd\u003e訊息，例如「數據列表」\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003epage\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e當前頁碼\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003epagecount\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總頁數\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003elimit\u003c/td\u003e\u003ctd\u003estring|number\u003c/td\u003e\u003ctd\u003e每頁筆數（有些站回字串 \"20\"）\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003etotal\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總筆數\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e影片陣列，見下表\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eclass\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e分類清單（部分站在 list 回傳時附帶）\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cp\u003e\u003ccode\u003elist\u003c/code\u003e 內每筆影片常用欄位：\u003c/p\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_id\u003c/td\u003e\u003ctd\u003e影片唯一 ID\u003c/td\u003e\u003ctd\u003e追蹤主鍵\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_name\u003c/td\u003e\u003ctd\u003e片名\u003c/td\u003e\u003ctd\u003e顯示與搜尋\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003etype_id / type_name\u003c/td\u003e\u003ctd\u003e分類 ID / 分類名稱\u003c/td\u003e\u003ctd\u003e篩選\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_en\u003c/td\u003e\u003ctd\u003e英文別名 / 拼音\u003c/td\u003e\u003ctd\u003e次要顯示\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_time\u003c/td\u003e\u003ctd\u003e最後更新時間（\"YYYY-MM-DD HH:mm:ss\"）\u003c/td\u003e\u003ctd\u003e判斷新集\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_remarks\u003c/td\u003e\u003ctd\u003e更新狀態文字，如「更新至 20 集」「完結」\u003c/td\u003e\u003ctd\u003e快速判斷\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_pic\u003c/td\u003e\u003ctd\u003e封面圖 URL\u003c/td\u003e\u003ctd\u003e海報\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_area / vod_lang / vod_year\u003c/td\u003e\u003ctd\u003e地區 / 語言 / 年份\u003c/td\u003e\u003ctd\u003e篩選與顯示\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_actor / vod_director\u003c/td\u003e\u003ctd\u003e主演 / 導演\u003c/td\u003e\u003ctd\u003e顯示\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_content\u003c/td\u003e\u003ctd\u003e簡介（多為 HTML）\u003c/td\u003e\u003ctd\u003e詳情頁\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_serial\u003c/td\u003e\u003ctd\u003e連載狀態相關（站方定義不一）\u003c/td\u003e\u003ctd\u003e參考\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_play_from\u003c/td\u003e\u003ctd\u003e播放來源分組名，以 \u003ccode\u003e$$$\u003c/code\u003e 分隔多來源\u003c/td\u003e\u003ctd\u003e解析播放\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003evod_play_url\u003c/td\u003e\u003ctd\u003e每組的集數清單，組間以 \u003ccode\u003e$$$\u003c/code\u003e 對應，組內用 \u003ccode\u003e#\u003c/code\u003e 分隔集數，單集格式 \u003ccode\u003e標題$URL\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e解析集數\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cdiv class=\"codeblock\"\u003e\n    \u003cdiv\u003e\u003cspan class=\"c\"\u003e// list 回應（節錄）\u003c/span\u003e\u003cbr\u003e{\n  \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 23, \"limit\": \"20\", \"total\": 449,\u003cbr\u003e  \"list\": [\u003cbr\u003e    { \"vod_id\": 493, \"vod_name\": \"測試劇\", \"type_id\": 9, \"type_name\": \"連續劇\",\u003cbr\u003e      \"vod_time\": \"2026-09-01 20:12:00\", \"vod_remarks\": \"更新至 12 集\",\u003cbr\u003e      \"vod_play_from\": \"hls$$$mp4\",\u003cbr\u003e      \"vod_play_url\": \"第01集$https://cdn.example.com/1.m3u8#第02集$https://cdn.example.com/2.m3u8$$$第01集$https://cdn.example.com/1.mp4#第02集$https://cdn.example.com/2.mp4\" }\u003cbr\u003e  ]\u003cbr\u003e}\u003c/div\u003e\n    \u003cdiv style=\"margin-top:12px\"\u003e\u003cspan class=\"c\"\u003e// detail 回應多含 vod_pic / vod_content / vod_play_from / vod_play_url 完整版\u003c/span\u003e\u003cbr\u003e{\n  \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 1, \"limit\": \"20\", \"total\": 1,\u003cbr\u003e  \"list\": [{ \"vod_id\": 123, \"vod_name\": \"慶餘年\", \"vod_pic\": \"https://...jpg\",\u003cbr\u003e    \"vod_content\": \"\u0026lt;p\u0026gt;簡介…\u0026lt;/p\u0026gt;\", \"vod_play_from\": \"hls\",\u003cbr\u003e    \"vod_play_url\": \"第01集$https://.../1.m3u8#第02集$https://.../2.m3u8\" }]\u003cbr\u003e}\u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003ch3\u003e播放連結解析規則（重點）\u003c/h3\u003e\n  \u003cp\u003e\u003ccode\u003evod_play_from\u003c/code\u003e 與 \u003ccode\u003evod_play_url\u003c/code\u003e 是一一對應的兩條以 \u003ccode\u003e$$$\u003c/code\u003e 分隔的字串：\u003c/p\u003e\n  \u003cdiv class=\"codeblock\"\u003e\n    vod_play_from = \"youku$$$hls\"  \u0026nbsp;\u003cspan class=\"c\"\u003e// 2 組來源\u003c/span\u003e\u003cbr\u003e\n    vod_play_url  = \"第01集$https://youku/...#第02集$https://youku/...$$$第01集$https://cdn/.../1.m3u8#第02集$https://cdn/.../2.m3u8\"\n    \u003cspan class=\"c\" style=\"display:block;margin-top:8px\"\u003e// 拆法：先按 $$$ 拆成組 → 每組按 # 拆成集 → 每集按 $ 拆成 [標題, URL]\u003c/span\u003e\n    \u003cspan class=\"c\"\u003e// 注意：標題或 URL 中若含 $ 或 #，站方通常會做轉義；解析失敗應視為「來源格式異常」\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cp\u003e統計目前集數時，數 \u003ccode\u003e#\u003c/code\u003e 的段數即可；\u003ccode\u003evod_remarks\u003c/code\u003e 只是站方寫的文字（「更新至 N 集」），以實際解析出的段數為準。\u003c/p\u003e\n\n  \u003ch2\u003e常見坑與排錯\u003c/h2\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\u003cth\u003e現象\u003c/th\u003e\u003cth\u003e原因與處理\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e瀏覽器打 \u003ccode\u003eac=list\u003c/code\u003e 回空白或 403\u003c/td\u003e\u003ctd\u003e站方可能擋非白名單 UA / 需 Referer，或已關閉對外採集。換一個信任站或聯絡站方。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecode != 1\u003c/code\u003e 或 \u003ccode\u003elist\u003c/code\u003e 為空\u003c/td\u003e\u003ctd\u003e參數錯誤或該分類/關鍵字無資料。檢查 \u003ccode\u003et\u003c/code\u003e 是否存在、\u003ccode\u003ewd\u003c/code\u003e 是否正確 encode。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_play_url\u003c/code\u003e 為空但有 \u003ccode\u003evod_remarks\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e站方只更新文字、尚未上片源；等下一輪 \u003ccode\u003eh=24\u003c/code\u003e 再檢查。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_time\u003c/code\u003e 格式不一\u003c/td\u003e\u003ctd\u003e部分站回 Unix 時間戳，部分回字串。程式端同時兼容兩種。\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003e同一劇在不同站 \u003ccode\u003evod_id\u003c/code\u003e 不同\u003c/td\u003e\u003ctd\u003e正常，\u003ccode\u003evod_id\u003c/code\u003e 是站內自增主鍵。跨站去重請用 \u003ccode\u003evod_name + vod_year\u003c/code\u003e 輔助判斷。\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"foot\"\u003e最後更新：2026-09-02 · 追劇播放器已正式上線，本文對應現行版面 · 附錄依據 MACCMS V10 官方 API 文件與 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e 採集介面文件整理 · 資料來源僅供對接參考，實際以各資源站回傳為準\u003c/div\u003e\n\u003c/div\u003e\n","content":"\u003cdiv class=\"doc\"\u003e  \u003cdiv class=\"hero\"\u003e \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e系統定位\u003c/div\u003e\u003cdiv class=\"v\"\u003e資源站是資料來源，\u003cbr\u003e追劇中心是你的清單\u003c/div\u003e\u003cdiv class=\"n\"\u003e播放器只負責「照你指定的站去問」與「記住你追到哪一集」\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e介面標準\u003c/div\u003e\u003cdiv class=\"v\"\u003e蘋果 CMS（MACCMS V10）\u003cbr\u003e\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e\u003c/div\u003e\u003cdiv class=\"n\"\u003eac=list / detail、t / pg / wd / ids / h / at\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"hero-card\"\u003e\u003cdiv class=\"k\"\u003e安全原則\u003c/div\u003e\u003cdiv class=\"v\"\u003e只加你信任的站\u003cbr\u003e不信任的不加\u003c/div\u003e\u003cdiv class=\"n\"\u003e來源不可信，片名、集數、播放連結都不可信\u003c/div\u003e\u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e已上線\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e側邊欄 →「追劇播放器」就是入口。\u003c/strong\u003e下面兩個資料夾「資源站」「我的追劇」已可直接使用；右側會依你選中的項目自動切換成瀏覽與播放畫面，不需要額外安裝。\u003c/div\u003e\u003c/div\u003e \u003ch2\u003e一、這套系統會做什麼\u003c/h2\u003e \u003cp\u003e「無廣告追劇中心」的想法很單純：你挑幾個\u003cstrong style=\"color:var(--ink)\"\u003e自己信任的資源站\u003c/strong\u003e加進來，之後把想追的劇加入清單，系統每天幫你去各站問一次「有沒有新集數」，有就提醒你。站掛了、格式錯了，就如實告訴你，不會自己編集數。\u003c/p\u003e \u003cdiv class=\"grid2\"\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔌 資源站\u003c/h4\u003e\u003cp\u003e提供片庫的遠端 API（蘋果 CMS 規格）。系統不會內建任何站，站由你自己決定要加哪幾個。\u003c/p\u003e\u003c/div\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e📋 追蹤清單\u003c/h4\u003e\u003cp\u003e你按「加入追蹤」才會出現在清單裡。清單記住：劇名、vod_id、來源站、最後看到哪一集。\u003c/p\u003e\u003c/div\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e🔄 每日檢查\u003c/h4\u003e\u003cp\u003e追劇更新助理每日 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e依各站 API 實際回傳比對集數，有更新才寫入「追劇筆記」通知。\u003c/p\u003e\u003c/div\u003e \u003cdiv class=\"mini\"\u003e\u003ch4\u003e▶️ 播放器\u003c/h4\u003e\u003cp\u003e已正式上線。支援站內搜尋、海報詳情、多播放源切換與 \u003ccode\u003em3u8\u003c/code\u003e 直連播放（hls.js），免廣告、進度自動記憶。\u003c/p\u003e\u003c/div\u003e \u003c/div\u003e \u003ch2\u003e二、實際操作：照著做就好\u003c/h2\u003e \u003cp\u003e下面 5 步對應你在 app 裡實際看到的版面。左側是清單、右側是內容，「追劇播放器」這個區塊同時管兩個資料夾。\u003c/p\u003e \u003col class=\"steps\"\u003e \u003cli\u003e\u003cb\u003e在側邊欄找到「追劇播放器」下的兩個資料夾\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e展開側邊欄的 \u003ccode\u003e追劇播放器\u003c/code\u003e 區段，你會看到 \u003ccode\u003e資源站\u003c/code\u003e（圖示 server）與 \u003ccode\u003e我的追劇\u003c/code\u003e（圖示 tv）兩個資料夾。點資料夾名稱進入；點資料夾內的單筆項目會在右側開啟詳情。左欄永遠是清單，右欄永遠是瀏覽/詳情/播放。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e在「資源站」新增一個你信任的 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 網址\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e進入「資源站」資料夾 → 點右上角 \u003ccode\u003e＋ 新增資源站\u003c/code\u003e（沒有任何站時，中間也會有「新增第一個資源站」虛線按鈕）。填「名稱」與完整的資源站網址（以 \u003ccode\u003ehttp(s)://\u003c/code\u003e 開頭、結尾指向 \u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的介面根網址），可選是否「啟用」。按「儲存」時系統會自動用 \u003ccode\u003eac=list\u0026amp;pg=1\u003c/code\u003e 對該網址做一次連線測試：成功顯示「連線測試成功」，失敗也會照實顯示錯誤訊息並寫入該資源站的 \u003ccode\u003elastError\u003c/code\u003e，不會靜悄悄略過。只加你信任的來源，不要貼來路不明的網址。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e在「資源站」右側瀏覽最新片單或關鍵字搜尋，點海報看詳情、挑播放源與集數、免廣告直接播放\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在左欄選中一個已新增的資源站，右側會自動載入它的最新片單（預設 \u003ccode\u003epg=1\u003c/code\u003e，每頁 24 部，有分頁與總筆數）。上方有關鍵字輸入框，輸入劇名後按「搜尋」或按 Enter，即以 \u003ccode\u003ewd=關鍵字\u003c/code\u003e 重新查詢。\u003cbr\u003e片單以海報網格呈現，每張卡顯示封面與 \u003ccode\u003evod_remarks\u003c/code\u003e（如「更新至 20 集」）。點海報會彈出「劇集詳情」對話框：上方是封面、類型/年份/地區與進度文字，中間是簡介，下方是播放源與集數。\u003cbr\u003e若該劇有多個播放源（如多組 \u003ccode\u003evod_play_from\u003c/code\u003e），會出現「播放源」下拉選單，切換後集數網格立即更新。點任一集數立即以 \u003ccode\u003eVodPlayer\u003c/code\u003e 直連播放：\u003ccode\u003em3u8\u003c/code\u003e 用 hls.js 解碼，其他直鏈直接播，免廣告；對話框內可「複製播放網址」或「在新分頁開啟」。若來源暫時連不上、或不提供此劇的播放連結，會在對話框內顯示錯誤說明。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e點「加入追蹤」後，劇集會進「我的追劇」；播放進度自動記住，右側可繼續播放、調進度、標記看完\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e在劇集詳情對話框按 \u003ccode\u003e加入追蹤\u003c/code\u003e，系統會以該劇的 \u003ccode\u003esourceId + sourceVodId\u003c/code\u003e 在「我的追劇」建立一筆追蹤，並補齊封面、類型與 \u003ccode\u003evodRemarks\u003c/code\u003e。\u003cbr\u003e之後切到「我的追劇」資料夾：左欄是你的追蹤清單（每筆顯示劇名與進度文字），點任一部劇，右側切換為該劇的專屬管理頁：\u003cbr\u003e• 上方顯示封面、狀態標籤（想追 / 追看中 / 已看完）、來源站、類型與「已看到第 N 集」。\u003cbr\u003e• 中間按鈕：\u003ccode\u003e▶ 繼續看第 N+1 集\u003c/code\u003e（自動算下一集並直接開播）、\u003ccode\u003e挑選集數\u003c/code\u003e（重開詳情選集）、\u003ccode\u003e標記為已看完\u003c/code\u003e / \u003ccode\u003e回到追看中\u003c/code\u003e。\u003cbr\u003e• 下方進度列：\u003ccode\u003e上一集 / 下一集\u003c/code\u003e 按鈕即時改寫 \u003ccode\u003ewatchedEpisode\u003c/code\u003e，右側下拉可切換 \u003ccode\u003epending / watching / finished\u003c/code\u003e 狀態；若原本是 \u003ccode\u003epending\u003c/code\u003e 且開始記錄集數，會自動轉為 \u003ccode\u003ewatching\u003c/code\u003e。\u003cbr\u003e• 在詳情對話框內直接點集數播放時，若集數大於目前記錄，也會自動把 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 更新到該集，不用手動補。\u003c/span\u003e\u003c/li\u003e \u003cli\u003e\u003cb\u003e每天 20:00 自動檢查各追蹤劇有無新集數，有更新就寫進「追劇筆記」\u003c/b\u003e\u003cbr\u003e\u003cspan\u003e追劇更新助理每天 \u003cstrong\u003e20:00（Asia/Kuala_Lumpur）\u003c/strong\u003e 逐部檢查「我的追劇」中狀態為 \u003ccode\u003ewatching / pending\u003c/code\u003e 且來源資源站為啟用的劇：對來源站打 \u003ccode\u003eac=detail\u0026amp;ids=\u0026lt;sourceVodId\u0026gt;\u003c/code\u003e，用回傳的 \u003ccode\u003evod_play_url\u003c/code\u003e 算出最新集數並比對 \u003ccode\u003evodRemarks\u003c/code\u003e。若比你的 \u003ccode\u003ewatchedEpisode\u003c/code\u003e 新，就更新該筆的 \u003ccode\u003evodRemarks\u003c/code\u003e，並在\u003cstrong\u003e「追劇筆記」\u003c/strong\u003e資料夾寫（或更新）一篇「劇集更新通知」筆記，用清單列出每部「已更新到第 N 集，你看到第 M 集」；沒有新進度就什麼都不寫。來源一時連不上會略過該部、如實記下，不會編造進度。你也可以在右側管理頁隨時按右上角 \u003ccode\u003e↻ 檢查更新\u003c/code\u003e 手動檢查一次。\u003c/span\u003e\u003c/li\u003e \u003c/ol\u003e \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e版面提示\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e左清單、右內容是固定規則。\u003c/strong\u003e「資源站」左欄選站 → 右欄瀏覽該站；「我的追劇」左欄選劇 → 右欄管該劇。兩個資料夾的右上角都有 \u003ccode\u003e＋\u003c/code\u003e 與功能按鈕（編輯 / 移除 / 檢查更新），找不到功能時先看右上角的 \u003ccode\u003ePluginTopbar\u003c/code\u003e。\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e⚠️ 安全提醒\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e只加入你信任的來源。\u003c/strong\u003e資源站回傳的片名、封面 \u003ccode\u003evod_pic\u003c/code\u003e、簡介 \u003ccode\u003evod_content\u003c/code\u003e 與播放連結 \u003ccode\u003evod_play_url\u003c/code\u003e 都是第三方提供的字串，可能含廣告跳轉或誘導連結。本系統不會替來源背書，新增前請確認：1) 站方是你認識或社群長期推薦的、2) 用瀏覽器試打回傳的 JSON 結構正常、3) 播放連結指向你預期的站點。來路不明的站一律不要加。\u003c/div\u003e\u003c/div\u003e \u003cdiv class=\"hr\"\u003e\u003c/div\u003e \u003ch2\u003e附錄：資源站介面規格（技術參考）\u003c/h2\u003e \u003cp\u003e以下為蘋果 CMS（MACCMS V10）\u003ccode\u003eapi.php/provide/vod\u003c/code\u003e 的已查證規格，整理自官方文件 \u003ccode\u003egithub.com/magicblack/maccms10 / 說明文檔/API接口說明.txt\u003c/code\u003e 並交叉比對 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e。日常使用不需要背，排錯或想理解背後在做什麼時再看。\u003c/p\u003e \u003cdiv class=\"callout ok\"\u003e\u003cspan class=\"tag\"\u003e查證說明\u003c/span\u003e\u003cdiv\u003e\u003cstrong\u003e本附錄的介面規格已上網查證\u003c/strong\u003e：以 MACCMS V10 官方文件為準，ac / 參數 / 回傳欄位皆依此整理，非臆測。\u003c/div\u003e\u003c/div\u003e \u003ch3\u003eAC 動作\u003c/h3\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003eac\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003cth\u003e別名（部分站兼容）\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e取影片列表（分頁、可篩選）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideolist\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e取影片詳情（含播放連結）\u003c/td\u003e\u003ctd\u003e\u003ccode\u003evideodetail\u003c/code\u003e / \u003ccode\u003evideo\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cp\u003e官方文件寫 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，但實務上許多資源站為了兼容舊採集器，也同時接受 \u003ccode\u003evideolist\u003c/code\u003e / \u003ccode\u003evideodetail\u003c/code\u003e。建議優先送 \u003ccode\u003elist\u003c/code\u003e / \u003ccode\u003edetail\u003c/code\u003e，失敗再試別名。\u003c/p\u003e \u003cp\u003e標準位置：\u003ccode\u003e/api.php/provide/vod/\u003c/code\u003e。多數站同時也接受 \u003ccode\u003e/api.php/provide/vod/at/json/\u003c/code\u003e 這種路徑式寫法。回傳預設 \u003ccode\u003eJSON\u003c/code\u003e，加 \u003ccode\u003e\u0026amp;at=xml\u003c/code\u003e 可改回 XML（本系統只用 JSON）。\u003c/p\u003e \u003ch3\u003e常用參數\u003c/h3\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e適用\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003et\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e分類 ID（\u003ccode\u003etype_id\u003c/code\u003e）。例：\u003ccode\u003et=1\u003c/code\u003e 只取該分類。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003epg\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e頁碼，從 1 開始。例：\u003ccode\u003epg=3\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003ewd\u003c/td\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003e搜尋關鍵字（片名模糊搜尋）。例：\u003ccode\u003ewd=慶餘年\u003c/code\u003e 需 URL-encode。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eids\u003c/td\u003e\u003ctd\u003edetail\u003c/td\u003e\u003ctd\u003e指定影片 ID，多個用逗號分隔。例：\u003ccode\u003eids=123,456\u003c/code\u003e。最常用於「加入追蹤時抓詳情」。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eh\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e只取 N 小時內有更新的資料。例：\u003ccode\u003eh=24\u003c/code\u003e 取 24 小時內更新的（每日檢查用）。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eat\u003c/td\u003e\u003ctd\u003elist / detail\u003c/td\u003e\u003ctd\u003e回傳格式：\u003ccode\u003ejson\u003c/code\u003e（預設）或 \u003ccode\u003exml\u003c/code\u003e。例：\u003ccode\u003eat=json\u003c/code\u003e。\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003ch3\u003e常用請求範例\u003c/h3\u003e \u003cdiv class=\"codeblock\"\u003e \u003cdiv\u003e\u003cspan class=\"c\"\u003e# 列表第 1 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;pg=1\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 搜尋「慶餘年」\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;wd=%E6%85%B6%E9%A4%98%E5%B9%B4\u0026amp;pg=1\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 分類 t=2 的第 5 頁\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;t=2\u0026amp;pg=5\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取 24 小時內更新\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=list\u0026amp;h=24\u0026amp;pg=1\u003c/div\u003e \u003cdiv style=\"margin-top:10px\"\u003e\u003cspan class=\"c\"\u003e# 取某幾部劇的詳情（含播放連結）\u003c/span\u003e\u003cbr\u003e/api.php/provide/vod/?ac=detail\u0026amp;ids=123,456\u003c/div\u003e \u003c/div\u003e \u003ch3\u003e回傳 JSON 結構\u003c/h3\u003e \u003cp\u003e頂層固定欄位：\u003c/p\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e型別\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003ecode\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e1 = 成功，其餘為失敗\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003emsg\u003c/td\u003e\u003ctd\u003estring\u003c/td\u003e\u003ctd\u003e訊息，例如「數據列表」\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003epage\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e當前頁碼\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003epagecount\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總頁數\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003elimit\u003c/td\u003e\u003ctd\u003estring|number\u003c/td\u003e\u003ctd\u003e每頁筆數（有些站回字串 \"20\"）\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003etotal\u003c/td\u003e\u003ctd\u003enumber\u003c/td\u003e\u003ctd\u003e總筆數\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003elist\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e影片陣列，見下表\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003eclass\u003c/td\u003e\u003ctd\u003earray\u003c/td\u003e\u003ctd\u003e分類清單（部分站在 list 回傳時附帶）\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cp\u003e\u003ccode\u003elist\u003c/code\u003e 內每筆影片常用欄位：\u003c/p\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e欄位\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003cth\u003e用途\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_id\u003c/td\u003e\u003ctd\u003e影片唯一 ID\u003c/td\u003e\u003ctd\u003e追蹤主鍵\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_name\u003c/td\u003e\u003ctd\u003e片名\u003c/td\u003e\u003ctd\u003e顯示與搜尋\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003etype_id / type_name\u003c/td\u003e\u003ctd\u003e分類 ID / 分類名稱\u003c/td\u003e\u003ctd\u003e篩選\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_en\u003c/td\u003e\u003ctd\u003e英文別名 / 拼音\u003c/td\u003e\u003ctd\u003e次要顯示\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_time\u003c/td\u003e\u003ctd\u003e最後更新時間（\"YYYY-MM-DD HH:mm:ss\"）\u003c/td\u003e\u003ctd\u003e判斷新集\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_remarks\u003c/td\u003e\u003ctd\u003e更新狀態文字，如「更新至 20 集」「完結」\u003c/td\u003e\u003ctd\u003e快速判斷\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_pic\u003c/td\u003e\u003ctd\u003e封面圖 URL\u003c/td\u003e\u003ctd\u003e海報\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_area / vod_lang / vod_year\u003c/td\u003e\u003ctd\u003e地區 / 語言 / 年份\u003c/td\u003e\u003ctd\u003e篩選與顯示\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_actor / vod_director\u003c/td\u003e\u003ctd\u003e主演 / 導演\u003c/td\u003e\u003ctd\u003e顯示\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_content\u003c/td\u003e\u003ctd\u003e簡介（多為 HTML）\u003c/td\u003e\u003ctd\u003e詳情頁\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_serial\u003c/td\u003e\u003ctd\u003e連載狀態相關（站方定義不一）\u003c/td\u003e\u003ctd\u003e參考\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_play_from\u003c/td\u003e\u003ctd\u003e播放來源分組名，以 \u003ccode\u003e$$$\u003c/code\u003e 分隔多來源\u003c/td\u003e\u003ctd\u003e解析播放\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003evod_play_url\u003c/td\u003e\u003ctd\u003e每組的集數清單，組間以 \u003ccode\u003e$$$\u003c/code\u003e 對應，組內用 \u003ccode\u003e#\u003c/code\u003e 分隔集數，單集格式 \u003ccode\u003e標題$URL\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e解析集數\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cdiv class=\"codeblock\"\u003e \u003cdiv\u003e\u003cspan class=\"c\"\u003e// list 回應（節錄）\u003c/span\u003e\u003cbr\u003e{ \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 23, \"limit\": \"20\", \"total\": 449,\u003cbr\u003e  \"list\": [\u003cbr\u003e    { \"vod_id\": 493, \"vod_name\": \"測試劇\", \"type_id\": 9, \"type_name\": \"連續劇\",\u003cbr\u003e      \"vod_time\": \"2026-09-01 20:12:00\", \"vod_remarks\": \"更新至 12 集\",\u003cbr\u003e      \"vod_play_from\": \"hls$$$mp4\",\u003cbr\u003e      \"vod_play_url\": \"第01集$https://cdn.example.com/1.m3u8#第02集$https://cdn.example.com/2.m3u8$$$第01集$https://cdn.example.com/1.mp4#第02集$https://cdn.example.com/2.mp4\" }\u003cbr\u003e  ]\u003cbr\u003e}\u003c/div\u003e \u003cdiv style=\"margin-top:12px\"\u003e\u003cspan class=\"c\"\u003e// detail 回應多含 vod_pic / vod_content / vod_play_from / vod_play_url 完整版\u003c/span\u003e\u003cbr\u003e{ \"code\": 1, \"msg\": \"數據列表\", \"page\": 1, \"pagecount\": 1, \"limit\": \"20\", \"total\": 1,\u003cbr\u003e  \"list\": [{ \"vod_id\": 123, \"vod_name\": \"慶餘年\", \"vod_pic\": \"https://...jpg\",\u003cbr\u003e    \"vod_content\": \"\u0026lt;p\u0026gt;簡介…\u0026lt;/p\u0026gt;\", \"vod_play_from\": \"hls\",\u003cbr\u003e    \"vod_play_url\": \"第01集$https://.../1.m3u8#第02集$https://.../2.m3u8\" }]\u003cbr\u003e}\u003c/div\u003e \u003c/div\u003e \u003ch3\u003e播放連結解析規則（重點）\u003c/h3\u003e \u003cp\u003e\u003ccode\u003evod_play_from\u003c/code\u003e 與 \u003ccode\u003evod_play_url\u003c/code\u003e 是一一對應的兩條以 \u003ccode\u003e$$$\u003c/code\u003e 分隔的字串：\u003c/p\u003e \u003cdiv class=\"codeblock\"\u003e vod_play_from = \"youku$$$hls\"  \u0026nbsp;\u003cspan class=\"c\"\u003e// 2 組來源\u003c/span\u003e\u003cbr\u003e vod_play_url  = \"第01集$https://youku/...#第02集$https://youku/...$$$第01集$https://cdn/.../1.m3u8#第02集$https://cdn/.../2.m3u8\" \u003cspan class=\"c\" style=\"display:block;margin-top:8px\"\u003e// 拆法：先按 $$$ 拆成組 → 每組按 # 拆成集 → 每集按 $ 拆成 [標題, URL]\u003c/span\u003e \u003cspan class=\"c\"\u003e// 注意：標題或 URL 中若含 $ 或 #，站方通常會做轉義；解析失敗應視為「來源格式異常」\u003c/span\u003e \u003c/div\u003e \u003cp\u003e統計目前集數時，數 \u003ccode\u003e#\u003c/code\u003e 的段數即可；\u003ccode\u003evod_remarks\u003c/code\u003e 只是站方寫的文字（「更新至 N 集」），以實際解析出的段數為準。\u003c/p\u003e \u003ch2\u003e常見坑與排錯\u003c/h2\u003e \u003ctable\u003e \u003ctbody\u003e\u003ctr\u003e\u003cth\u003e現象\u003c/th\u003e\u003cth\u003e原因與處理\u003c/th\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e瀏覽器打 \u003ccode\u003eac=list\u003c/code\u003e 回空白或 403\u003c/td\u003e\u003ctd\u003e站方可能擋非白名單 UA / 需 Referer，或已關閉對外採集。換一個信任站或聯絡站方。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e\u003ccode\u003ecode != 1\u003c/code\u003e 或 \u003ccode\u003elist\u003c/code\u003e 為空\u003c/td\u003e\u003ctd\u003e參數錯誤或該分類/關鍵字無資料。檢查 \u003ccode\u003et\u003c/code\u003e 是否存在、\u003ccode\u003ewd\u003c/code\u003e 是否正確 encode。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_play_url\u003c/code\u003e 為空但有 \u003ccode\u003evod_remarks\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e站方只更新文字、尚未上片源；等下一輪 \u003ccode\u003eh=24\u003c/code\u003e 再檢查。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e\u003ccode\u003evod_time\u003c/code\u003e 格式不一\u003c/td\u003e\u003ctd\u003e部分站回 Unix 時間戳，部分回字串。程式端同時兼容兩種。\u003c/td\u003e\u003c/tr\u003e \u003ctr\u003e\u003ctd\u003e同一劇在不同站 \u003ccode\u003evod_id\u003c/code\u003e 不同\u003c/td\u003e\u003ctd\u003e正常，\u003ccode\u003evod_id\u003c/code\u003e 是站內自增主鍵。跨站去重請用 \u003ccode\u003evod_name + vod_year\u003c/code\u003e 輔助判斷。\u003c/td\u003e\u003c/tr\u003e \u003c/tbody\u003e\u003c/table\u003e \u003cdiv class=\"hr\"\u003e\u003c/div\u003e \u003cdiv class=\"foot\"\u003e最後更新：2026-09-02 · 追劇播放器已正式上線，本文對應現行版面 · 附錄依據 MACCMS V10 官方 API 文件與 \u003ccode\u003emaccms.plus / maccms.la\u003c/code\u003e 採集介面文件整理 · 資料來源僅供對接參考，實際以各資源站回傳為準\u003c/div\u003e \u003c/div\u003e","createdAt":1788361940984,"deletedAt":null,"displayMode":"artifact","embedRenders":{},"id":"57d675e5afa24d7179cc3456","isNew":false,"isPublic":true,"itemType":"NOTE","name":"追劇上手指南 — 無廣告追劇中心與資源站介面規格","parents":{"5ad36dcfda4189c90991ccf2":1788361940984},"preParentID":null,"updatedAt":1788495458506,"updatedBy":{"userId":"6a983a0c0215b385286e05","userName":"VINCENT SOH"},"version":10,"websiteContent":"[{\"originUrl\":\"https://cdn.example.com/1.m3u8#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn.example.com/2.m3u8$$$\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn.example.com/1.mp4#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn.example.com/2.mp4\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://...jpg\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://.../1.m3u8#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://.../2.m3u8\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://youku/...#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://youku/...$$$\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn/.../1.m3u8#\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://cdn/.../2.m3u8\",\"title\":null,\"content\":null,\"imageUrl\":null}]"}]}