From 4caf179bcad9a907ca67c2afb689d9d8c0a8e3e1 Mon Sep 17 00:00:00 2001 From: qq27800734 <27800734@qq.com> Date: Sun, 20 Sep 2026 16:00:32 +0000 Subject: [PATCH] Publish mteam v1.0.1 --- adapters/mteam/adapter.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/adapters/mteam/adapter.js b/adapters/mteam/adapter.js index 7b34b48..7536953 100644 --- a/adapters/mteam/adapter.js +++ b/adapters/mteam/adapter.js @@ -180,8 +180,10 @@ function parseSearch(items) { publisher: it.author || '', tags: tags, doubanUrl: it.douban || '', + doubanId: (function(){ var m = String(it.douban || '').match(/douban\.com\/subject\/(\d+)/i); return m ? m[1] : ''; })(), doubanRating: rating, imdbUrl: it.imdb || '', + imdbId: (function(){ var m = String(it.imdb || '').match(/imdb\.com\/title\/(tt\d+)/i); return m ? m[1] : ''; })(), cnSub: cnSub, standard: it.standard || '', detailUrl: it.id !== undefined && it.id !== null ? 'detail/' + String(it.id) : '', @@ -307,19 +309,42 @@ function sync(input) { } // ===================== 能力: download(下载种子) ===================== -// ctx: { baseUrl, apiKey, downloadUrl?(可选) | id/detailId, downloadPath?(可选, 默认 /api/torrent/download) } +// ctx: { baseUrl, apiKey, downloadUrl?(可选) | id/detailId } +// M-Team API 不暴露直接下载接口(swagger 里没有 /torrent/download), 必须两步: +// 1) POST /api/torrent/genDlToken?id={detailId} → 拿到 Result.data (下载 URL 或 token) +// 2) GET 下载 URL (通常是 CDN) // 返回 { downloadUrl, url, bytes, size } 或 { error, url? }。 function download(input) { var ctx = __asCtx(input); var base = __resolveBase(ctx); + var apiKey = ctx && (ctx.apiKey || ctx.xApiKey); var detailId = ctx && (ctx.id || ctx.detailId) ? String(ctx.id || ctx.detailId) : ''; var url = null; if (ctx && ctx.downloadUrl) { url = String(ctx.downloadUrl); if (url.indexOf('http') !== 0) url = base + (url.charAt(0) === '/' ? url : '/' + url); } else if (detailId) { - var path = (ctx && ctx.downloadPath) || '/api/torrent/download'; - url = base + path + '?id=' + encodeURIComponent(detailId); + // 先 genDlToken 拿下载 URL / token + var tokenPath = '/api/torrent/genDlToken?id=' + encodeURIComponent(detailId); + var tokenRoot = __apiPost(base, tokenPath, {}, apiKey); + if (tokenRoot === null) return { error: 'gen_dl_token_failed_no_response', url: base + tokenPath }; + + // genDlToken 返回 Result, T 可能是 string (完整下载 URL) 或对象 + var tokenData = (tokenRoot.data !== undefined ? tokenRoot.data : tokenRoot); + var dlUrl = null; + if (typeof tokenData === 'string' && tokenData.length > 0) { + dlUrl = tokenData; + } else if (tokenData && typeof tokenData === 'object') { + dlUrl = tokenData.url || tokenData.downloadUrl || tokenData.link || tokenData.token; + } + if (!dlUrl) { + // 把原始响应带回来供 C# 端日志诊断真实格式 + var raw = ''; + try { raw = typeof JSON !== 'undefined' ? JSON.stringify(tokenRoot) : String(tokenRoot); } catch(e) { raw = String(tokenRoot); } + if (raw.length > 500) raw = raw.substring(0, 500) + '...'; + return { error: 'gen_dl_token_failed_no_download_url', url: base + tokenPath, rawResponse: raw }; + } + url = String(dlUrl); } else { return { error: 'no_detail_id' }; }