Publish mteam v1.0.1
This commit is contained in:
@@ -180,8 +180,10 @@ function parseSearch(items) {
|
|||||||
publisher: it.author || '',
|
publisher: it.author || '',
|
||||||
tags: tags,
|
tags: tags,
|
||||||
doubanUrl: it.douban || '',
|
doubanUrl: it.douban || '',
|
||||||
|
doubanId: (function(){ var m = String(it.douban || '').match(/douban\.com\/subject\/(\d+)/i); return m ? m[1] : ''; })(),
|
||||||
doubanRating: rating,
|
doubanRating: rating,
|
||||||
imdbUrl: it.imdb || '',
|
imdbUrl: it.imdb || '',
|
||||||
|
imdbId: (function(){ var m = String(it.imdb || '').match(/imdb\.com\/title\/(tt\d+)/i); return m ? m[1] : ''; })(),
|
||||||
cnSub: cnSub,
|
cnSub: cnSub,
|
||||||
standard: it.standard || '',
|
standard: it.standard || '',
|
||||||
detailUrl: it.id !== undefined && it.id !== null ? 'detail/' + String(it.id) : '',
|
detailUrl: it.id !== undefined && it.id !== null ? 'detail/' + String(it.id) : '',
|
||||||
@@ -307,19 +309,42 @@ function sync(input) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ===================== 能力: download(下载种子) =====================
|
// ===================== 能力: 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? }。
|
// 返回 { downloadUrl, url, bytes, size } 或 { error, url? }。
|
||||||
function download(input) {
|
function download(input) {
|
||||||
var ctx = __asCtx(input);
|
var ctx = __asCtx(input);
|
||||||
var base = __resolveBase(ctx);
|
var base = __resolveBase(ctx);
|
||||||
|
var apiKey = ctx && (ctx.apiKey || ctx.xApiKey);
|
||||||
var detailId = ctx && (ctx.id || ctx.detailId) ? String(ctx.id || ctx.detailId) : '';
|
var detailId = ctx && (ctx.id || ctx.detailId) ? String(ctx.id || ctx.detailId) : '';
|
||||||
var url = null;
|
var url = null;
|
||||||
if (ctx && ctx.downloadUrl) {
|
if (ctx && ctx.downloadUrl) {
|
||||||
url = String(ctx.downloadUrl);
|
url = String(ctx.downloadUrl);
|
||||||
if (url.indexOf('http') !== 0) url = base + (url.charAt(0) === '/' ? url : '/' + url);
|
if (url.indexOf('http') !== 0) url = base + (url.charAt(0) === '/' ? url : '/' + url);
|
||||||
} else if (detailId) {
|
} else if (detailId) {
|
||||||
var path = (ctx && ctx.downloadPath) || '/api/torrent/download';
|
// 先 genDlToken 拿下载 URL / token
|
||||||
url = base + path + '?id=' + encodeURIComponent(detailId);
|
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>, 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 {
|
} else {
|
||||||
return { error: 'no_detail_id' };
|
return { error: 'no_detail_id' };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user