[2026-04-18 01:57:21] [0.5.1] [INFO] js_plugin_manager.py:78: Node.js process started successfully [2026-04-18 01:57:21] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:21] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:21] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:21] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:22] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448641952"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:22] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:22] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:22] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448641952: False [2026-04-18 01:57:22] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:81: JS Plugin Manager initialized successfully [2026-04-18 01:57:23] [0.5.1] [INFO] js_plugin_manager.py:1711: 自动转换未启用,不启动定时任务 [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:92: JS Adapter initialized successfully [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:618: update_config_from_setting ok. data:Config(account='******', password='******', mi_did='419359157', cookie='', verbose=False, music_path='music', temp_path='music/tmp', download_path='music/download', conf_path='conf', cache_dir='music/cache', hostname='http://34.21.156.125', port=8090, public_port=58090, proxy='', loudnorm='', search_prefix='bilisearch:', ffmpeg_location='./ffmpeg/bin', get_duration_type='ffprobe', active_cmd='play,set_play_type_rnd,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop,play_next,play_prev,set_play_type_one,set_play_type_all,set_play_type_sin,set_play_type_seq,gen_music_list,add_to_favorites,del_from_favorites,cmd_del_music,online_play,singer_play', exclude_dirs='@eaDir,tmp', ignore_tag_dirs='', music_path_depth=10, disable_httpauth=True, httpauth_username='******', httpauth_password='******', music_list_url='', music_list_json='[{"name": "_online_lx_周杰伦-Jay 『网易云精选』", "musics": [{"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5rip5bKa44CB5ZC05a6X5a6qIiwgIm5hbWUiOiAi5bGL6aG2IiwgImFsYnVtTmFtZSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAiYWxidW1JZCI6ICI1MTIxNzUiLCAic29uZ21pZCI6ICJ3eV81MjU3MTM4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84MUJzeHhob21KNGFKWll2RWJ5UGt3PT0vMTA5OTUxMTY1NjcxMTgyNjg0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYxLjU5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYxLjU5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI1NzEzOCIsICJ0aXRsZSI6ICLlsYvpobYiLCAiZHVyYXRpb24iOiAiMDU6MTkiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgea4qeWymuOAgeWQtOWul+WuqiIsICJhbGJ1bSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvODFCc3h4aG9tSjRhSlpZdkVieVBrdz09LzEwOTk1MTE2NTY3MTE4MjY4NC5qcGcifQ==", "name": "屋顶-周杰伦、温岚、吴宗宪", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQ2VjaWxpYSIsICJuYW1lIjogIuiKseOBrua1tyAo5Ly05aWPKSIsICJhbGJ1bU5hbWUiOiAi6Iqx44Gu5rW3IiwgImFsYnVtSWQiOiAiMTUyNjIxNTA1IiwgInNvbmdtaWQiOiAid3lfMTk4NzI4NzMyMiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjUyIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjM5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTMuNDcgTUIifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiMTMuNDcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNS4zOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTg3Mjg3MzIyIiwgInRpdGxlIjogIuiKseOBrua1tyAo5Ly05aWPKSIsICJkdXJhdGlvbiI6ICIwNTo1MiIsICJhcnRpc3QiOiAiQ2VjaWxpYSIsICJhbGJ1bSI6ICLoirHjga7mtbciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGcifQ==", "name": "花の海 (伴奏)-Cecilia", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZKi55uU5bCP5YWs5Li744CB5bCP6I2J6I+MIiwgIm5hbWUiOiAi57uZ5oiR5LiA6aaW5q2M55qE5pe26Ze0ICjlpbPlo7DlkIjllLEpIiwgImFsYnVtTmFtZSI6ICLnu5nmiJHkuIDpppbmrYznmoTml7bpl7QgKOWls+WjsOWQiOWUsSkiLCAiYWxidW1JZCI6ICIxNDk2NDk1NjEiLCAic29uZ21pZCI6ICJ3eV8xOTcxODU3MTg2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDEiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9CdDMyVndQZjBCUTRBX28wNXhFeVRnPT0vMTA5OTUxMTY5NjkwNDA1MTUwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNjggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjIwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjYuODggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjYuODggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS4yMCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjY4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NzE4NTcxODYiLCAidGl0bGUiOiAi57uZ5oiR5LiA6aaW5q2M55qE5pe26Ze0ICjlpbPlo7DlkIjllLEpIiwgImR1cmF0aW9uIjogIjA0OjAxIiwgImFydGlzdCI6ICLpkqLnm5TlsI/lhazkuLvjgIHlsI/ojYnoj4wiLCAiYWxidW0iOiAi57uZ5oiR5LiA6aaW5q2M55qE5pe26Ze0ICjlpbPlo7DlkIjllLEpIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0J0MzJWd1BmMEJRNEFfbzA1eEV5VGc9PS8xMDk5NTExNjk2OTA0MDUxNTAuanBnIn0=", "name": "给我一首歌的时间 (女声合唱)-钢盔小公主、小草菌", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTGloX1DlsI/niLEiLCAibmFtZSI6ICLmmI7mmI7lsLEiLCAiYWxidW1OYW1lIjogIuaYjuaYjuWwsSjmt7Hmg4XniYgpIiwgImFsYnVtSWQiOiAiMjUzMTQ3OTMzIiwgInNvbmdtaWQiOiAid3lfMjY0NDM2MTM1MyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjIzIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvVmg2SlB1cFgwVzQwUU5DUkNvelZYZz09LzEwOTk1MTE3MDEyOTIzNDY1Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjAyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuMDQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC4yNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyNC4yNSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC4wNCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjAyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzI2NDQzNjEzNTMiLCAidGl0bGUiOiAi5piO5piO5bCxIiwgImR1cmF0aW9uIjogIjA0OjIzIiwgImFydGlzdCI6ICJMaWhfUOWwj+eIsSIsICJhbGJ1bSI6ICLmmI7mmI7lsLEo5rex5oOF54mIKSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9WaDZKUHVwWDBXNDBRTkNSQ296VlhnPT0vMTA5OTUxMTcwMTI5MjM0NjU2LmpwZyJ9", "name": "明明就-Lih_P小爱", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUkVFQlgiLCAibmFtZSI6ICLog6HmgJ3lj4jkubHmg7MiLCAiYWxidW1OYW1lIjogIuiDoeaAneWPiOS5seaDsyIsICJhbGJ1bUlkIjogIjM2NjE5OTg2MiIsICJzb25nbWlkIjogInd5XzMzNTkwNDE0NjQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjoyMyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzVsVFZZTHlYVFRSdlBDajB0NHJTckE9PS8xMDk5NTExNzI4ODIyNDIxNzkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4xOCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuNDYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOC44NiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOC44NiBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1LjQ2IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuMTggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzM1OTA0MTQ2NCIsICJ0aXRsZSI6ICLog6HmgJ3lj4jkubHmg7MiLCAiZHVyYXRpb24iOiAiMDI6MjMiLCAiYXJ0aXN0IjogIlJFRUJYIiwgImFsYnVtIjogIuiDoeaAneWPiOS5seaDsyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC81bFRWWUx5WFRUUnZQQ2owdDRyU3JBPT0vMTA5OTUxMTcyODgyMjQyMTc5LmpwZyJ9", "name": "胡思又乱想-REEBX", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQ2VjaWxpYSIsICJuYW1lIjogIuiKseOBrua1tyIsICJhbGJ1bU5hbWUiOiAi6Iqx44Gu5rW3IiwgImFsYnVtSWQiOiAiMTUyNjIxNTA1IiwgInNvbmdtaWQiOiAid3lfMTk5Njk1NDcxOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjMwIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjA1IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuNjIgTUIifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiMTIuNjIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNS4wNSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTk2OTU0NzE4IiwgInRpdGxlIjogIuiKseOBrua1tyIsICJkdXJhdGlvbiI6ICIwNTozMCIsICJhcnRpc3QiOiAiQ2VjaWxpYSIsICJhbGJ1bSI6ICLoirHjga7mtbciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGcifQ==", "name": "花の海-Cecilia", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUGlhbm8gRWNob2VzIiwgIm5hbWUiOiAi6Kqq5LqG5YaN6KaLIChQaWFubyBWZXIuKSIsICJhbGJ1bU5hbWUiOiAiSmF5IENob3XjgJzjg5TjgqLjg47jgafogbTjgY/lkI3mm7Lpm4YiLCAiYWxidW1JZCI6ICIxNzAyNTk3NjciLCAic29uZ21pZCI6ICJ3eV8yMDY2NjcxMTc1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzYiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9wNFYycDRrVDdnR2dEQ2R4cFlXQU5RPT0vMTA5OTUxMTY4NzYwOTczMDYzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41MyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE1LjAwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE1LjAwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjUzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjA2NjY3MTE3NSIsICJ0aXRsZSI6ICLoqqrkuoblho3oposgKFBpYW5vIFZlci4pIiwgImR1cmF0aW9uIjogIjA0OjM2IiwgImFydGlzdCI6ICJQaWFubyBFY2hvZXMiLCAiYWxidW0iOiAiSmF5IENob3XjgJzjg5TjgqLjg47jgafogbTjgY/lkI3mm7Lpm4YiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcDRWMnA0a1Q3Z0dnRENkeHBZV0FOUT09LzEwOTk1MTE2ODc2MDk3MzA2My5qcGcifQ==", "name": "說了再見 (Piano Ver.)-Piano Echoes", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YWG6bijIiwgIm5hbWUiOiAi6Lev54GvIiwgImFsYnVtTmFtZSI6ICLot6/nga8iLCAiYWxidW1JZCI6ICIzNDk2NzAyMDQiLCAic29uZ21pZCI6ICJ3eV8zMzE1NzUxNDQ3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6NTAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9WOVJ4TDk3bVAyVWpWTkFpMkczb3VnPT0vMTA5OTUxMTcyMjUyMDE1MTAzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNTIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4LjgwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjYuNDMgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjQ3LjM4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNDcuMzggTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjYuNDMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOC44MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjUyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMzMTU3NTE0NDciLCAidGl0bGUiOiAi6Lev54GvIiwgImR1cmF0aW9uIjogIjAzOjUwIiwgImFydGlzdCI6ICLlhYbpuKMiLCAiYWxidW0iOiAi6Lev54GvIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1Y5UnhMOTdtUDJValZOQWkyRzNvdWc9PS8xMDk5NTExNzIyNTIwMTUxMDMuanBnIn0=", "name": "路灯-兆鸣", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP6Zi/5LmQIiwgIm5hbWUiOiAi5pif5pyf5LqU55qE56ys5Lmd6IqC6L2m5Y6iIiwgImFsYnVtTmFtZSI6ICLmmJ/mnJ/kupTnmoTnrKzkuZ3oioLovabljqIiLCAiYWxidW1JZCI6ICIzNTcyMzcxMDQiLCAic29uZ21pZCI6ICJ3eV8zMzM2MjM5MTYzIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDQiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9CU0FodzdoZlRST3VjbGhWdTVZWjJBPT0vMTA5OTUxMTcyNTQ3MDU3OTg2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNzMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjMxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjkuODIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjkuODIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS4zMSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjczIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMzMzYyMzkxNjMiLCAidGl0bGUiOiAi5pif5pyf5LqU55qE56ys5Lmd6IqC6L2m5Y6iIiwgImR1cmF0aW9uIjogIjA0OjA0IiwgImFydGlzdCI6ICLlsI/pmL/kuZAiLCAiYWxidW0iOiAi5pif5pyf5LqU55qE56ys5Lmd6IqC6L2m5Y6iIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0JTQWh3N2hmVFJPdWNsaFZ1NVlaMkE9PS8xMDk5NTExNzI1NDcwNTc5ODYuanBnIn0=", "name": "星期五的第九节车厢-小阿乐", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6LaF6LaF77yI5ZGo5rC46LaF77yJ44CB6b6Z54yrIiwgIm5hbWUiOiAi6Zuq5Zyw6YeM55u454ixIiwgImFsYnVtTmFtZSI6ICLpm6rlnLDph4znm7jniLEiLCAiYWxidW1JZCI6ICIxNTk4NDI0NTMiLCAic29uZ21pZCI6ICJ3eV8xOTc4MjYwNTU3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MTUiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9iYzVXNUxockZZVlI3TmNGRm1HUFBBPT0vMTA5OTUxMTY4MzA2OTE4NzA2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuOTggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjQ1IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjIuMjkgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjM5Ljk0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiMzkuOTQgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjIuMjkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy40NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjk4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NzgyNjA1NTciLCAidGl0bGUiOiAi6Zuq5Zyw6YeM55u454ixIiwgImR1cmF0aW9uIjogIjAzOjE1IiwgImFydGlzdCI6ICLotoXotoXvvIjlkajmsLjotoXvvInjgIHpvpnnjKsiLCAiYWxidW0iOiAi6Zuq5Zyw6YeM55u454ixIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2JjNVc1TGhyRllWUjdOY0ZGbUdQUEE9PS8xMDk5NTExNjgzMDY5MTg3MDYuanBnIn0=", "name": "雪地里相爱-超超(周永超)、龙猫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5pmv5LqmIiwgIm5hbWUiOiAi54ix5oOF5bqf5p+0ICjov5nkuKrlhqzlpKnkvJrlhrflkJcpIiwgImFsYnVtTmFtZSI6ICLmsZ/ljZfmgbbkvZzliaflpoLmnpzov5nlsLHmmK/niLHmg4Xlup/mn7QiLCAiYWxidW1JZCI6ICIxOTk0MTcxODAiLCAic29uZ21pZCI6ICJ3eV8yMTY2NjQ5NjYwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mT1ltbWJ0ZUVHZ0RNdklfUnZBTWJBPT0vMTA5OTUxMTY5Njg3NjU4NDE1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIzLjAzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy45MSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjkxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjMuMDMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS4yMSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMTY2NjQ5NjYwIiwgInRpdGxlIjogIueIseaDheW6n+aftCAo6L+Z5Liq5Yas5aSp5Lya5Ya35ZCXKSIsICJkdXJhdGlvbiI6ICIwMToxOSIsICJhcnRpc3QiOiAi5pmv5LqmIiwgImFsYnVtIjogIuaxn+WNl+aBtuS9nOWJp+WmguaenOi/meWwseaYr+eIseaDheW6n+aftCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mT1ltbWJ0ZUVHZ0RNdklfUnZBTWJBPT0vMTA5OTUxMTY5Njg3NjU4NDE1LmpwZyJ9", "name": "爱情废柴 (这个冬天会冷吗)-景亦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5qiC6aOf6ICFIiwgIm5hbWUiOiAi6Ieq5rihIiwgImFsYnVtTmFtZSI6ICLoh6rmuKEiLCAiYWxidW1JZCI6ICIzNjc1MDI2MjIiLCAic29uZ21pZCI6ICJ3eV8zMzYyMzY2ODc0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTMiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9SWkN1aUtGSHNPQWlWQk9vUGRPeXN3PT0vMTA5OTUxMTcyOTMyMzM5NTYwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4xOSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5Ljc5IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICI1Ni41NSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjU2LjU1IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjI5Ljc5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjE5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzM2MjM2Njg3NCIsICJ0aXRsZSI6ICLoh6rmuKEiLCAiZHVyYXRpb24iOiAiMDQ6NTMiLCAiYXJ0aXN0IjogIuaogumjn+iAhSIsICJhbGJ1bSI6ICLoh6rmuKEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvUlpDdWlLRkhzT0FpVkJPb1BkT3lzdz09LzEwOTk1MTE3MjkzMjMzOTU2MC5qcGcifQ==", "name": "自渡-樂食者", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O6L2p5a6HIiwgIm5hbWUiOiAi5p2l5LiN5Y+KIiwgImFsYnVtTmFtZSI6ICLmiJHku6znmoTmlYXkuosiLCAiYWxidW1JZCI6ICIzNTkyNTc5NjkiLCAic29uZ21pZCI6ICJ3eV8zMzU5Nzk5MjQ3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6NTAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9nT0xqcnZiVDN3VzRTQ2VnLXNQZ09RPT0vMTA5OTUxMTcyNzU3MzE1Mzk1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNTIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4LjgxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjMuMzcgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjQ0LjUzIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNDQuNTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjMuMzcgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOC44MSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjUyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMzNTk3OTkyNDciLCAidGl0bGUiOiAi5p2l5LiN5Y+KIiwgImR1cmF0aW9uIjogIjAzOjUwIiwgImFydGlzdCI6ICLmnY7ovanlrociLCAiYWxidW0iOiAi5oiR5Lus55qE5pWF5LqLIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2dPTGpydmJUM3dXNFNDZWctc1BnT1E9PS8xMDk5NTExNzI3NTczMTUzOTUuanBnIn0=", "name": "来不及-李轩宇", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP6I2J6I+M44CB6ZKi55uU5bCP5YWs5Li7IiwgIm5hbWUiOiAi566A5Y2V54ixICjlpbPlo7DlkIjllLEpIiwgImFsYnVtTmFtZSI6ICLnroDljZXniLHlj43mlrnlkJHnmoTpkp8iLCAiYWxidW1JZCI6ICIxODQ1NTk5NDciLCAic29uZ21pZCI6ICJ3eV8yMTIyMTA4OTgyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MjciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC8yTlVVWXdoaW9WcmNjbGZqRFBPdllBPT0vMTA5OTUxMTY5Mjk2NTIzMTg5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMDggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC4yMCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI2LjMxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI2LjMxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjIwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMDggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjEyMjEwODk4MiIsICJ0aXRsZSI6ICLnroDljZXniLEgKOWls+WjsOWQiOWUsSkiLCAiZHVyYXRpb24iOiAiMDQ6MjciLCAiYXJ0aXN0IjogIuWwj+iNieiPjOOAgemSoueblOWwj+WFrOS4uyIsICJhbGJ1bSI6ICLnroDljZXniLHlj43mlrnlkJHnmoTpkp8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvMk5VVVl3aGlvVnJjY2xmakRQT3ZZQT09LzEwOTk1MTE2OTI5NjUyMzE4OS5qcGcifQ==", "name": "简单爱 (女声合唱)-小草菌、钢盔小公主", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUkVFQlgiLCAibmFtZSI6ICLmgqzltJYiLCAiYWxidW1OYW1lIjogIuaCrOW0liIsICJhbGJ1bUlkIjogIjM2Nzk5NDU3NiIsICJzb25nbWlkIjogInd5XzMzNjM1MTU1OTMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjozMyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0tDaDFKRENKQ2dzQTdjUl9vclNreVE9PS8xMDk5NTExNzI5NDYwMDY5NDQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4zNCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuODUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxNC4wMSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxNC4wMSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1Ljg1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuMzQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzM2MzUxNTU5MyIsICJ0aXRsZSI6ICLmgqzltJYiLCAiZHVyYXRpb24iOiAiMDI6MzMiLCAiYXJ0aXN0IjogIlJFRUJYIiwgImFsYnVtIjogIuaCrOW0liIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9LQ2gxSkRDSkNnc0E3Y1Jfb3JTa3lRPT0vMTA5OTUxMTcyOTQ2MDA2OTQ0LmpwZyJ9", "name": "悬崖-REEBX", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O6I2j5rWp44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi6buYIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAyMeS4reWbveWlveWjsOmfsyDnrKwx5pyfIiwgImFsYnVtSWQiOiAiMTM1MDEwMjg4IiwgInNvbmdtaWQiOiAid3lfMTg4ODM1NDIzMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAyOjEzIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcGxlUWpLT0kyNmZTZW5rVUdpcERMdz09LzEwOTk1MTE2NjUzNzMwMDgzMi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyLjAzIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNS4wOSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjI0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjI0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUuMDkgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi4wMyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODg4MzU0MjMwIiwgInRpdGxlIjogIum7mCAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDI6MTMiLCAiYXJ0aXN0IjogIuadjuiNo+a1qeOAgeWRqOadsOS8piIsICJhbGJ1bSI6ICIyMDIx5Lit5Zu95aW95aOw6Z+zIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcGxlUWpLT0kyNmZTZW5rVUdpcERMdz09LzEwOTk1MTE2NjUzNzMwMDgzMi5qcGcifQ==", "name": "默 (Live)-李荣浩、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiVE9Q55m76ZmG5bCR5bm0LeW8oOazveemuSIsICJuYW1lIjogIuetieS9oOS4i+ivviIsICJhbGJ1bU5hbWUiOiAiIiwgImFsYnVtSWQiOiAiIiwgInNvbmdtaWQiOiAid3lfMjEyMDY4MTgxMSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjMxIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvVjdDR1VDM3M2TXhUaWh0amtNRWlsdz09LzEwOTk1MTE2OTI4NDQ3OTA3Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjQwIE1CIn1dLCAiX3R5cGVzIjogeyIxMjhrIjogeyJzaXplIjogIjEuNDAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjEyMDY4MTgxMSIsICJ0aXRsZSI6ICLnrYnkvaDkuIvor74iLCAiZHVyYXRpb24iOiAiMDE6MzEiLCAiYXJ0aXN0IjogIlRPUOeZu+mZhuWwkeW5tC3lvKDms73nprkiLCAiYWxidW0iOiAiIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1Y3Q0dVQzNzNk14VGlodGprTUVpbHc9PS8xMDk5NTExNjkyODQ0NzkwNzYuanBnIn0=", "name": "等你下课-TOP登陆少年-张泽禹", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5Y+R6LSi5qa06I6yIiwgIm5hbWUiOiAi6YCA5ZCOIiwgImFsYnVtTmFtZSI6ICLpgIDlkI4iLCAiYWxidW1JZCI6ICIxODk3Mzg1MTAiLCAic29uZ21pZCI6ICJ3eV8yMTM4Mzc2MjUxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MjAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9YVXR0R01wMy1qZ3R6T1kzUXptOUlRPT0vMTA5OTUxMTY5NDM0OTEzNjA0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5Ljk1IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjkuOTUgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45OCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMTM4Mzc2MjUxIiwgInRpdGxlIjogIumAgOWQjiIsICJkdXJhdGlvbiI6ICIwNDoyMCIsICJhcnRpc3QiOiAi5Y+R6LSi5qa06I6yIiwgImFsYnVtIjogIumAgOWQjiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9YVXR0R01wMy1qZ3R6T1kzUXptOUlRPT0vMTA5OTUxMTY5NDM0OTEzNjA0LmpwZyJ9", "name": "退后-发财榴莲", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUkVFQlgiLCAibmFtZSI6ICLkvaDmiJEiLCAiYWxidW1OYW1lIjogIuS9oOaIkSIsICJhbGJ1bUlkIjogIjI4NDA4ODg5MCIsICJzb25nbWlkIjogInd5XzI3NDM1MTY5OTIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjozMiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2J2UWtRQlFEVk9CYTlEMHRPT1hWYVE9PS8xMDk5NTExNzE5NzY0NjgzNjguanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4zMiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuODAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxNC41NiBNQiJ9LCB7InR5cGUiOiAiZmxhYzI0Yml0IiwgInNpemUiOiAiMjguNDkgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMyNGJpdCI6IHsic2l6ZSI6ICIyOC40OSBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIxNC41NiBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1LjgwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuMzIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjc0MzUxNjk5MiIsICJ0aXRsZSI6ICLkvaDmiJEiLCAiZHVyYXRpb24iOiAiMDI6MzIiLCAiYXJ0aXN0IjogIlJFRUJYIiwgImFsYnVtIjogIuS9oOaIkSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9idlFrUUJRRFZPQmE5RDB0T09YVmFRPT0vMTA5OTUxMTcxOTc2NDY4MzY4LmpwZyJ9", "name": "你我-REEBX", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi55SY5LuV6ImvIiwgIm5hbWUiOiAi6b6Z5Y236aOOIiwgImFsYnVtTmFtZSI6ICLpkqLnkLTmgYvmm7IxMDEiLCAiYWxidW1JZCI6ICI4NjczIiwgInNvbmdtaWQiOiAid3lfODkxMjUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDowNCIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1NUY290b1o0SE1KRmVwTVRwWGY3LVE9PS84Njg2MTQxODU5OTkyNC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjcyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS4zMSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE0LjgzIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE0LjgzIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMzEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy43MiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV84OTEyNSIsICJ0aXRsZSI6ICLpvpnljbfpo44iLCAiZHVyYXRpb24iOiAiMDQ6MDQiLCAiYXJ0aXN0IjogIueUmOS7leiJryIsICJhbGJ1bSI6ICLpkqLnkLTmgYvmm7IxMDEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvU1Rjb3RvWjRITUpGZXBNVHBYZjctUT09Lzg2ODYxNDE4NTk5OTI0LmpwZyJ9", "name": "龙卷风-甘仕良", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiWm9lSmFuZSIsICJuYW1lIjogIuWuh+WumeWboOebuOmBh+iAjOe+juWlvSIsICJhbGJ1bU5hbWUiOiAi5a6H5a6Z5Zug55u46YGH6ICM576O5aW9IiwgImFsYnVtSWQiOiAiMjgzMzQzODg5IiwgInNvbmdtaWQiOiAid3lfMjc0MTU2NTEwNiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjE1IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRER3Q2lwWFU1cmJwN1BLbDJfNDdsQT09LzEwOTk1MTE3MTk1MjI3MTYzMC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjkwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS43NSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5LjQ4IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICI1Mi45MiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjUyLjkyIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjI5LjQ4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNzUgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45MCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNzQxNTY1MTA2IiwgInRpdGxlIjogIuWuh+WumeWboOebuOmBh+iAjOe+juWlvSIsICJkdXJhdGlvbiI6ICIwNDoxNSIsICJhcnRpc3QiOiAiWm9lSmFuZSIsICJhbGJ1bSI6ICLlroflrpnlm6Dnm7jpgYfogIznvo7lpb0iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRER3Q2lwWFU1cmJwN1BLbDJfNDdsQT09LzEwOTk1MTE3MTk1MjI3MTYzMC5qcGcifQ==", "name": "宇宙因相遇而美好-ZoeJane", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YiY6IqzIiwgIm5hbWUiOiAi6Z2S6Iqx55O3IiwgImFsYnVtTmFtZSI6ICLlho3phonkuIDmrKEu57K+6YCJ5LqMIiwgImFsYnVtSWQiOiAiMjU4MTkiLCAic29uZ21pZCI6ICJ3eV8yNTkxMzgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDoyOCIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2NMdW94UEVNNlJuSjQxaTFNeXVRcVE9PS81NTUyNTMzNzIwMzg4NjIuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4xMCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjI2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzAuNDggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzAuNDggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuMjYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4xMCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNTkxMzgiLCAidGl0bGUiOiAi6Z2S6Iqx55O3IiwgImR1cmF0aW9uIjogIjA0OjI4IiwgImFydGlzdCI6ICLliJjoirMiLCAiYWxidW0iOiAi5YaN6YaJ5LiA5qyhLueyvumAieS6jCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9jTHVveFBFTTZSbko0MWkxTXl1UXFRPT0vNTU1MjUzMzcyMDM4ODYyLmpwZyJ9", "name": "青花瓷-刘芳", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP5ou/6ZOBTGlsIExBVFRFIiwgIm5hbWUiOiAi5YWz6Zuo5aauIiwgImFsYnVtTmFtZSI6ICLmrKLvvIzmhIkiLCAiYWxidW1JZCI6ICIyNzkzMTg4MzYiLCAic29uZ21pZCI6ICJ3eV8yNzM1MzMzMjQ4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9Ja1BKdkhId2g4dUlkUkp5NS1CS3dRPT0vMTA5OTUxMTcxNTExMzcxMzE2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuODEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjUyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDMuMTggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNDMuMTggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS41MiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjgxIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzI3MzUzMzMyNDgiLCAidGl0bGUiOiAi5YWz6Zuo5aauIiwgImR1cmF0aW9uIjogIjA0OjA5IiwgImFydGlzdCI6ICLlsI/mi7/pk4FMaWwgTEFUVEUiLCAiYWxidW0iOiAi5qyi77yM5oSJIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0lrUEp2SEh3aDh1SWRSSnk1LUJLd1E9PS8xMDk5NTExNzE1MTEzNzEzMTYuanBnIn0=", "name": "关雨妮-小拿铁Lil LATTE", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6K645b+X5a6JIiwgIm5hbWUiOiAi5a6J6Z2ZIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5a6J5ZOl5a+55ZSx6Z+z5LmQ5LyaIiwgImFsYnVtSWQiOiAiMTUyMDgwMTI1IiwgInNvbmdtaWQiOiAid3lfMTk4MzY4NTcwOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjEwIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvU3hNQlY5ODBWQk52d0RlTXRNNE1zUT09LzEwOTk1MTE2NzkwMDQ3MjcxMC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyLjkwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNy4yNSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE5LjI0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE5LjI0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjcuMjUgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi45MCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTgzNjg1NzA4IiwgInRpdGxlIjogIuWuiemdmSAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDM6MTAiLCAiYXJ0aXN0IjogIuiuuOW/l+WuiSIsICJhbGJ1bSI6ICLlronlk6Xlr7nllLHpn7PkuZDkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvU3hNQlY5ODBWQk52d0RlTXRNNE1zUT09LzEwOTk1MTE2NzkwMDQ3MjcxMC5qcGcifQ==", "name": "安静 (Live)-许志安", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p6X5b+X54KrIiwgIm5hbWUiOiAi54Of6Iqx5piT5Ya3IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5oiR5piv5q2M5omL56ys5LiA5a2jIOesrDbmnJ8iLCAiYWxidW1JZCI6ICIyMjk4MDExIiwgInNvbmdtaWQiOiAid3lfMjU3MjMxNTciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNToxNiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3RvdU84S2JYb3k5SzFZTnU3aHZoM1E9PS8yMjU4Mzk2ODgzNDU0MTA5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4wOCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI2LjYwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI2LjYwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjA4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODMgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjU3MjMxNTciLCAidGl0bGUiOiAi54Of6Iqx5piT5Ya3IChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNToxNiIsICJhcnRpc3QiOiAi5p6X5b+X54KrIiwgImFsYnVtIjogIuaIkeaYr+atjOaJi+esrOS4gOWtoyDnrKw25pyfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3RvdU84S2JYb3k5SzFZTnU3aHZoM1E9PS8yMjU4Mzk2ODgzNDU0MTA5LmpwZyJ9", "name": "烟花易冷 (Live)-林志炫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6aaZ6aaZIiwgIm5hbWUiOiAi5Lic6aOO56C0IiwgImFsYnVtTmFtZSI6ICLpppnpppnntKvnvZflhbAiLCAiYWxidW1JZCI6ICIzNDkwNjQ1NCIsICJzb25nbWlkIjogInd5XzQzNTAwNDc3NCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjM4IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvQ1VteG42Y25TcGNwM29PX2xXaDhOdz09LzEwOTk1MTE2NzkxNzIzNDg4Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjE3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuOTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzNi4yNyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzNi4yNyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi45MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI1LjE3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQzNTAwNDc3NCIsICJ0aXRsZSI6ICLkuJzpo47noLQiLCAiZHVyYXRpb24iOiAiMDU6MzgiLCAiYXJ0aXN0IjogIummmemmmSIsICJhbGJ1bSI6ICLpppnpppnntKvnvZflhbAiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvQ1VteG42Y25TcGNwM29PX2xXaDhOdz09LzEwOTk1MTE2NzkxNzIzNDg4Ni5qcGcifQ==", "name": "东风破-香香", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi56iL5qmZIiwgIm5hbWUiOiAi5LiN6K+lKGZlYXTlsKTkuIDlnagpIiwgImFsYnVtTmFtZSI6ICLmiJHnmoTnv7vllLEiLCAiYWxidW1JZCI6ICIxNTc4OTMwNTYiLCAic29uZ21pZCI6ICJ3eV8yMTE2Nzc4ODQwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NDkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9pdHJ6MkktS0gxZUluWkpXSVEwcWd3PT0vMTA5OTUxMTY5MjU0MTYwMTU4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4wNSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjU3LjM3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjU3LjM3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjA1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjExNjc3ODg0MCIsICJ0aXRsZSI6ICLkuI3or6UoZmVhdOWwpOS4gOWdqCkiLCAiZHVyYXRpb24iOiAiMDQ6NDkiLCAiYXJ0aXN0IjogIueoi+apmSIsICJhbGJ1bSI6ICLmiJHnmoTnv7vllLEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvaXRyejJJLUtIMWVJblpKV0lRMHFndz09LzEwOTk1MTE2OTI1NDE2MDE1OC5qcGcifQ==", "name": "不该(feat尤一坨)-程橙", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiWWl4aW4iLCAibmFtZSI6ICLovajov7kiLCAiYWxidW1OYW1lIjogImxpdmUt5aSN5Yi7IiwgImFsYnVtSWQiOiAiMTk0MTcwMjA2IiwgInNvbmdtaWQiOiAid3lfMjE1MTMzMTAxMiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjIyIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvUmZJRVNlbUJZcFRiM1ZGeG8yLVlWUT09LzEwOTk1MTE2OTU0ODE1NTk4MC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjkxIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuMjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI2NS43OSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI2NS43OSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi4yOSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjkxIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxNTEzMzEwMTIiLCAidGl0bGUiOiAi6L2o6L+5IiwgImR1cmF0aW9uIjogIjA1OjIyIiwgImFydGlzdCI6ICJZaXhpbiIsICJhbGJ1bSI6ICJsaXZlLeWkjeWIuyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9SZklFU2VtQllwVGIzVkZ4bzItWVZRPT0vMTA5OTUxMTY5NTQ4MTU1OTgwLmpwZyJ9", "name": "轨迹-Yixin", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5r285amz5Za144CB5piv5qKF5LiN5piv6I6TIiwgIm5hbWUiOiAi54+K55Ga5rW3IiwgImFsYnVtTmFtZSI6ICLnj4rnkZrmtbciLCAiYWxidW1JZCI6ICIxODc3NjQxMjgiLCAic29uZ21pZCI6ICJ3eV8yMTMyMDA2OTA3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MTciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9lZ3g5U1JQYkwyYW9IWVBCRDlyMnV3PT0vMTA5OTUxMTY5MzgwNjE4NTI5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjgxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjguNzkgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjUyLjI5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNTIuMjkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjguNzkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS44MSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMzIwMDY5MDciLCAidGl0bGUiOiAi54+K55Ga5rW3IiwgImR1cmF0aW9uIjogIjA0OjE3IiwgImFydGlzdCI6ICLmvbzlqbPllrXjgIHmmK/mooXkuI3mmK/ojpMiLCAiYWxidW0iOiAi54+K55Ga5rW3IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2VneDlTUlBiTDJhb0hZUEJEOXIydXc9PS8xMDk5NTExNjkzODA2MTg1MjkuanBnIn0=", "name": "珊瑚海-潼婳喵、是梅不是莓", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi54aK5pmT6ZuvIiwgIm5hbWUiOiAi5b2p6Jm544CAIiwgImFsYnVtTmFtZSI6ICLpgYfop4Hnvo7kuL0iLCAiYWxidW1JZCI6ICIzMDk0MCIsICJzb25nbWlkIjogInd5XzMxMjQ1MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjAzIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSE9sSVhIWXljLS10VVc3Z0MzWl9Jdz09LzEwOTk1MTE2NzkxNzIzMjY5OS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjYzIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTEuNTcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMC43NSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMC43NSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMS41NyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjYzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMxMjQ1MSIsICJ0aXRsZSI6ICLlvanombnjgIAiLCAiZHVyYXRpb24iOiAiMDU6MDMiLCAiYXJ0aXN0IjogIueGiuaZk+mbryIsICJhbGJ1bSI6ICLpgYfop4Hnvo7kuL0iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSE9sSVhIWXljLS10VVc3Z0MzWl9Jdz09LzEwOTk1MTE2NzkxNzIzMjY5OS5qcGcifQ==", "name": "彩虹\u3000-熊晓雯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiVEblrrbml48iLCAibmFtZSI6ICLnsonoibLmtbfmtIsiLCAiYWxidW1OYW1lIjogIiIsICJhbGJ1bUlkIjogIiIsICJzb25nbWlkIjogInd5XzIxMTY3MDYxNzkiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTo1NiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0kzRnRTOW5naDhkZmVWT1pSbUpxT2c9PS8xMDk5NTExNjkyNTM2NzMzMTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS43OCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIxLjc4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMTY3MDYxNzkiLCAidGl0bGUiOiAi57KJ6Imy5rW35rSLIiwgImR1cmF0aW9uIjogIjAxOjU2IiwgImFydGlzdCI6ICJURuWutuaXjyIsICJhbGJ1bSI6ICIiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSTNGdFM5bmdoOGRmZVZPWlJtSnFPZz09LzEwOTk1MTE2OTI1MzY3MzMxMy5qcGcifQ==", "name": "粉色海洋-TF家族", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YC46L6wIiwgIm5hbWUiOiAi5YCf5Y+jIiwgImFsYnVtTmFtZSI6ICLnv7vllLHnmoQiLCAiYWxidW1JZCI6ICIxODI5MzM3NjAiLCAic29uZ21pZCI6ICJ3eV8yMTE3MDQxNjU4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MjAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9QWGw5d3lNTTM0REVKVnpabmN0Y3ZnPT0vMTA5OTUxMTY5MjU0MDEyNTg4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjkyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjUuMjIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjUuMjIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS45MiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjk3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMTcwNDE2NTgiLCAidGl0bGUiOiAi5YCf5Y+jIiwgImR1cmF0aW9uIjogIjA0OjIwIiwgImFydGlzdCI6ICLpgLjovrAiLCAiYWxidW0iOiAi57+75ZSx55qEIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1BYbDl3eU1NMzRERUpWelpuY3Rjdmc9PS8xMDk5NTExNjkyNTQwMTI1ODguanBnIn0=", "name": "借口-逸辰", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5auj6Zuo5ZCWIiwgIm5hbWUiOiAi54+K55Ga5rW3IiwgImFsYnVtTmFtZSI6ICLnj4rnkZrmtbciLCAiYWxidW1JZCI6ICIxODYyODI2OTUiLCAic29uZ21pZCI6ICJ3eV8yMTI3Njg5MTcxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MTUiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC95OHN0UGMxSkNPelQ3OXZmRk1QZ3pBPT0vMTA5OTUxMTY5MzQ3OTc4OTg2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTAgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5Ljc1IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDkuNjkgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNDkuNjkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS43NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjkwIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMjc2ODkxNzEiLCAidGl0bGUiOiAi54+K55Ga5rW3IiwgImR1cmF0aW9uIjogIjA0OjE1IiwgImFydGlzdCI6ICLlq6Ppm6jlkJYiLCAiYWxidW0iOiAi54+K55Ga5rW3IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3k4c3RQYzFKQ096VDc5dmZGTVBnekE9PS8xMDk5NTExNjkzNDc5Nzg5ODYuanBnIn0=", "name": "珊瑚海-嫣雨吖", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Jyh56yU5bCP5pawIiwgIm5hbWUiOiAi6Zuq5Zyw6YeM55u454ixIiwgImFsYnVtTmFtZSI6ICLpm6rlnLDph4znm7jniLEg6LaF6LaF77yI5ZGo5rC46LaF77yJL+m+meeMqyDkuI3or6XvvIjpm6rlnLDph4znm7jniLHvvIzku5bku6zor7Tpm7bkuIvnmoToqpPoqIDkuI3kvJrlnY/vvIkgeHh4eC4iLCAiYWxidW1JZCI6ICIxNzcwODEzNDciLCAic29uZ21pZCI6ICJ3eV8yMDkyMDQzOTk0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6NDciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC83aERHNzFnbzVNWlpVdmJhejVDTnNRPT0vMTA5OTUxMTY4OTAzMzgzNzc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuNjQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI0LjEwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiOS42OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI5LjY4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjQuMTAgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS42NCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMDkyMDQzOTk0IiwgInRpdGxlIjogIumbquWcsOmHjOebuOeIsSIsICJkdXJhdGlvbiI6ICIwMTo0NyIsICJhcnRpc3QiOiAi6Jyh56yU5bCP5pawIiwgImFsYnVtIjogIumbquWcsOmHjOebuOeIsSDotoXotoXvvIjlkajmsLjotoXvvIkv6b6Z54yrIOS4jeivpe+8iOmbquWcsOmHjOebuOeIse+8jOS7luS7rOivtOmbtuS4i+eahOiqk+iogOS4jeS8muWdj++8iSB4eHh4LiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC83aERHNzFnbzVNWlpVdmJhejVDTnNRPT0vMTA5OTUxMTY4OTAzMzgzNzc1LmpwZyJ9", "name": "雪地里相爱-蜡笔小新", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57uI5q2MIiwgIm5hbWUiOiAi6IGK5LiN5a6M55qE5pu+57uPIiwgImFsYnVtTmFtZSI6ICLlhYnCt+mBhyIsICJhbGJ1bUlkIjogIjE1MjgwMTU5MiIsICJzb25nbWlkIjogInd5XzE5ODczNTc4MDEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTowOSIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzJwMEZYZzJBMkdkOFRSeXl4ZnRHZnc9PS8xMDk5NTExNjc5NDI3NjA2ODkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS4wNyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjIuNjcgTUIifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiMi42NyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjA3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5ODczNTc4MDEiLCAidGl0bGUiOiAi6IGK5LiN5a6M55qE5pu+57uPIiwgImR1cmF0aW9uIjogIjAxOjA5IiwgImFydGlzdCI6ICLnu4jmrYwiLCAiYWxidW0iOiAi5YWJwrfpgYciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvMnAwRlhnMkEyR2Q4VFJ5eXhmdEdmdz09LzEwOTk1MTE2Nzk0Mjc2MDY4OS5qcGcifQ==", "name": "聊不完的曾经-终歌", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi562x57SrIiwgIm5hbWUiOiAi5Lic6aOO56C0IiwgImFsYnVtTmFtZSI6ICLkuI3kvJrlk63ms6PnmoTlpbPkuroiLCAiYWxidW1JZCI6ICIzMTI4NSIsICJzb25nbWlkIjogInd5XzMxNTgxOSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjMyIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvOExQaTEtOE95cE9vZVZpRmtOS0VBQT09LzEwOTk1MTE2NzkxNzIyNzkwNi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjA4IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuNzAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMS4wOCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMS4wOCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi43MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI1LjA4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMxNTgxOSIsICJ0aXRsZSI6ICLkuJzpo47noLQiLCAiZHVyYXRpb24iOiAiMDU6MzIiLCAiYXJ0aXN0IjogIuetsee0qyIsICJhbGJ1bSI6ICLkuI3kvJrlk63ms6PnmoTlpbPkuroiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvOExQaTEtOE95cE9vZVZpRmtOS0VBQT09LzEwOTk1MTE2NzkxNzIyNzkwNi5qcGcifQ==", "name": "东风破-筱紫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi546L5Li5IiwgIm5hbWUiOiAi5YWw5Lqt5bqPIiwgImFsYnVtTmFtZSI6ICLlr4Llr57mg4XmrYwiLCAiYWxidW1JZCI6ICIzMDQxOSIsICJzb25nbWlkIjogInd5XzMwNjQzNCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjM4IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcHR6dW5ma2JTemlGZ3lFZVlNYWlzQT09LzEwOTk1MTE2NzkxNzIzNjU5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjI1IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuNjMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOS4xNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOS4xNSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC42MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjI1IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMwNjQzNCIsICJ0aXRsZSI6ICLlhbDkuq3luo8iLCAiZHVyYXRpb24iOiAiMDQ6MzgiLCAiYXJ0aXN0IjogIueOi+S4uSIsICJhbGJ1bSI6ICLlr4Llr57mg4XmrYwiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcHR6dW5ma2JTemlGZ3lFZVlNYWlzQT09LzEwOTk1MTE2NzkxNzIzNjU5Mi5qcGcifQ==", "name": "兰亭序-王丹", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6I6r5paH6JSaIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwKExpdmUpIiwgImFsYnVtTmFtZSI6ICLluKbojqvmlofolJrlm57lrrbpn7PkuZDkvJoiLCAiYWxidW1JZCI6ICIyNzU2OSIsICJzb25nbWlkIjogInd5XzI3NzcyMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjM1IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvZUJhcHhfb1pGNWRGMHR2WG1KazJDUT09Lzk4OTU2MDQ2NTEyMDE0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5LjgxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI5LjgxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjUyIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjc3NzIwIiwgInRpdGxlIjogIueIseaIkeWIq+i1sChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDozNSIsICJhcnRpc3QiOiAi6I6r5paH6JSaIiwgImFsYnVtIjogIuW4puiOq+aWh+iUmuWbnuWutumfs+S5kOS8miIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9lQmFweF9vWkY1ZEYwdHZYbUprMkNRPT0vOTg5NTYwNDY1MTIwMTQuanBnIn0=", "name": "爱我别走(Live)-莫文蔚", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6L+e6K+X6ZuFIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiU2hpZ2EgTG92ZSYgSG9wZSBVbnBsdWdnZWQgMjAxMiBMaXZlIiwgImFsYnVtSWQiOiAiMjUzMjE4MCIsICJzb25nbWlkIjogInd5XzI2NjA4NjM0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzgiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mQ0RrMEp0cFZqRlFYS290UnU4X0Z3PT0vMTA5OTUxMTYzOTg0MDE4ODAxLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC42MyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMwLjg0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMwLjg0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjYzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjY2MDg2MzQiLCAidGl0bGUiOiAi54ix5oiR5Yir6LWwIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDozOCIsICJhcnRpc3QiOiAi6L+e6K+X6ZuFIiwgImFsYnVtIjogIlNoaWdhIExvdmUmIEhvcGUgVW5wbHVnZ2VkIDIwMTIgTGl2ZSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mQ0RrMEp0cFZqRlFYS290UnU4X0Z3PT0vMTA5OTUxMTYzOTg0MDE4ODAxLmpwZyJ9", "name": "爱我别走 (Live)-连诗雅", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5aW95oOz6KaB5Y+q6Zi/5ouJ5pav5YqgIiwgIm5hbWUiOiAi5oiRbHVvbGVp5oOF57uq6Zu255+z5Y2SIiwgImFsYnVtTmFtZSI6ICLjgIrlk47lk5/kuI3plJnlk6bjgIsiLCAiYWxidW1JZCI6ICIxMzUyODYwNjAiLCAic29uZ21pZCI6ICJ3eV8xOTEzMjE2Njc2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MDgiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9LYkNRYlhvaDc0M2pZVHhOZVk0OGdnPT0vMTA5OTUxMTY2NTU4MjcyOTI4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuOTcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI0LjkyIE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjQuOTIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS45NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTEzMjE2Njc2IiwgInRpdGxlIjogIuaIkWx1b2xlaeaDhee7qumbtuefs+WNkiIsICJkdXJhdGlvbiI6ICIwMjowOCIsICJhcnRpc3QiOiAi5aW95oOz6KaB5Y+q6Zi/5ouJ5pav5YqgIiwgImFsYnVtIjogIuOAiuWTjuWTn+S4jemUmeWTpuOAiyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9LYkNRYlhvaDc0M2pZVHhOZVk0OGdnPT0vMTA5OTUxMTY2NTU4MjcyOTI4LmpwZyJ9", "name": "我luolei情绪零石卒-好想要只阿拉斯加", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5aSn5aSn5oCq5bCG5Yab44CB5oOF5LmL5a2QIiwgIm5hbWUiOiAi5pm05aSpIiwgImFsYnVtTmFtZSI6ICLpvZDlhajvvIjnkKrmnYNESu+8iSIsICJhbGJ1bUlkIjogIjEzNjU0ODgxMyIsICJzb25nbWlkIjogInd5XzE4OTc2Mzc3NTAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzozNiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzBSS2JVeFNscUpTLWFhWm16bGRQTEE9PS8xMDk5NTExNjY2NjQyNDkxOTcuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4zMSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguMjcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMi41OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyMi41OCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI4LjI3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuMzEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg5NzYzNzc1MCIsICJ0aXRsZSI6ICLmmbTlpKkiLCAiZHVyYXRpb24iOiAiMDM6MzYiLCAiYXJ0aXN0IjogIuWkp+Wkp+aAquWwhuWGm+OAgeaDheS5i+WtkCIsICJhbGJ1bSI6ICLpvZDlhajvvIjnkKrmnYNESu+8iSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC8wUktiVXhTbHFKUy1hYVptemxkUExBPT0vMTA5OTUxMTY2NjY0MjQ5MTk3LmpwZyJ9", "name": "晴天-大大怪将军、情之子", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiREogSmFjayIsICJuYW1lIjogIuS5n+WPquaYr+aAlemUmei/hyIsICJhbGJ1bU5hbWUiOiAiREogSmFjayBSZW1peCIsICJhbGJ1bUlkIjogIjEzNTM4MzAzNiIsICJzb25nbWlkIjogInd5XzE4OTIxNDU4MDQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzowNyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L242bnhOU3pqRkNQMnY1V2k2N0JWVHc9PS8xMDk5NTExNjY1NjQxMDI3NTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi44NiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMTUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzOC44NCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzOC44NCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjE1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuODYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg5MjE0NTgwNCIsICJ0aXRsZSI6ICLkuZ/lj6rmmK/mgJXplJnov4ciLCAiZHVyYXRpb24iOiAiMDM6MDciLCAiYXJ0aXN0IjogIkRKIEphY2siLCAiYWxidW0iOiAiREogSmFjayBSZW1peCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9uNm54TlN6akZDUDJ2NVdpNjdCVlR3PT0vMTA5OTUxMTY2NTY0MTAyNzUzLmpwZyJ9", "name": "也只是怕错过-DJ Jack", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP5pin44CB5a6P55SfIiwgIm5hbWUiOiAi5Y2D6YeM5LmL5aSWIiwgImFsYnVtTmFtZSI6ICLniLHmmKfnlJ8iLCAiYWxidW1JZCI6ICIzNTQ3NiIsICJzb25nbWlkIjogInd5XzM1OTI0NiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjM0IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdVBnSVd5d0FUdWptYVM5bjB6dzFzUT09LzEwOTk1MTE2NzkxNzIyODM2OC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjEwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuNzQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOS40OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOS40OCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi43NCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI1LjEwIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzM1OTI0NiIsICJ0aXRsZSI6ICLljYPph4zkuYvlpJYiLCAiZHVyYXRpb24iOiAiMDU6MzQiLCAiYXJ0aXN0IjogIuWwj+aYp+OAgeWuj+eUnyIsICJhbGJ1bSI6ICLniLHmmKfnlJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdVBnSVd5d0FUdWptYVM5bjB6dzFzUT09LzEwOTk1MTE2NzkxNzIyODM2OC5qcGcifQ==", "name": "千里之外-小昧、宏生", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5b2t576aIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwIiwgImFsYnVtTmFtZSI6ICLnu5nmiJHllLHov4fnmoTnlLflranku6wiLCAiYWxidW1JZCI6ICIyMzMwNzcyIiwgInNvbmdtaWQiOiAid3lfMjU4Mzk0NTMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo0MyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0VpQkhEeUE1RkNXUzQ0bjZsSDFid3c9PS8xMDk5NTExNjc3NjE4NTI5OTYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4zMyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjgzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjcuOTMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjcuOTMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuODMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4zMyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNTgzOTQ1MyIsICJ0aXRsZSI6ICLniLHmiJHliKvotbAiLCAiZHVyYXRpb24iOiAiMDQ6NDMiLCAiYXJ0aXN0IjogIuW9ree+miIsICJhbGJ1bSI6ICLnu5nmiJHllLHov4fnmoTnlLflranku6wiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRWlCSER5QTVGQ1dTNDRuNmxIMWJ3dz09LzEwOTk1MTE2Nzc2MTg1Mjk5Ni5qcGcifQ==", "name": "爱我别走-彭羚", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5Y2O5pmo5a6HIiwgIm5hbWUiOiAi5Y+M5oiq5qONIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5q2M5omLMjAxOCDnrKw25pyfIiwgImFsYnVtSWQiOiAiMzc1NDIzNzEiLCAic29uZ21pZCI6ICJ3eV81MzY2MjQ0NTAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNTo0NSIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2JGeEx5cmQxemgzWnA4eHNwT2NTUmc9PS8xMDk5NTExNjY1NTc5MTkwMjkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNS4yNyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEzLjE4IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDEuMDMgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjcyLjc0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNzIuNzQgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDEuMDMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTMuMTggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNS4yNyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV81MzY2MjQ0NTAiLCAidGl0bGUiOiAi5Y+M5oiq5qONIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNTo0NSIsICJhcnRpc3QiOiAi5Y2O5pmo5a6HIiwgImFsYnVtIjogIuatjOaJizIwMTgg56ysNuacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9iRnhMeXJkMXpoM1pwOHhzcE9jU1JnPT0vMTA5OTUxMTY2NTU3OTE5MDI5LmpwZyJ9", "name": "双截棍 (Live)-华晨宇", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IOG5bCP6ay85Yi654ysIiwgIm5hbWUiOiAi5LuO5YmN5LuO5YmN5pyJ5Liq5Lq654ix5L2g5b6I5LmFIiwgImFsYnVtTmFtZSI6ICLlsI/mma/kuI3mmK/kupXnmoTkuJPovpEiLCAiYWxidW1JZCI6ICIxNDM3NDIwMTciLCAic29uZ21pZCI6ICJ3eV8xOTU1OTk4MDUyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6NDAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9FT19DQy1wUGdzTzlxN3VLY0IxSnB3PT0vMTA5OTUxMTY3MzIwMjkyMDczLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjYzMy4xMCBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuNTUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxLjExIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEuMTEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS41NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI2MzMuMTAgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1NTk5ODA1MiIsICJ0aXRsZSI6ICLku47liY3ku47liY3mnInkuKrkurrniLHkvaDlvojkuYUiLCAiZHVyYXRpb24iOiAiMDA6NDAiLCAiYXJ0aXN0IjogIuiDhuWwj+msvOWIuueMrCIsICJhbGJ1bSI6ICLlsI/mma/kuI3mmK/kupXnmoTkuJPovpEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRU9fQ0MtcFBnc085cTd1S2NCMUpwdz09LzEwOTk1MTE2NzMyMDI5MjA3My5qcGcifQ==", "name": "从前从前有个人爱你很久-胆小鬼刺猬", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP5pin44CB5a6P55SfIiwgIm5hbWUiOiAi6I+K6Iqx5Y+wIiwgImFsYnVtTmFtZSI6ICLniLHmmKfnlJ8iLCAiYWxidW1JZCI6ICIzNTQ3NiIsICJzb25nbWlkIjogInd5XzM1OTIzNCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjU5IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdVBnSVd5d0FUdWptYVM5bjB6dzFzUT09LzEwOTk1MTE2NzkxNzIyODM2OC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjY1IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS4xMyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE5Ljc0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE5Ljc0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy42NSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8zNTkyMzQiLCAidGl0bGUiOiAi6I+K6Iqx5Y+wIiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICLlsI/mmKfjgIHlro/nlJ8iLCAiYWxidW0iOiAi54ix5pin55SfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3VQZ0lXeXdBVHVqbWFTOW4wencxc1E9PS8xMDk5NTExNjc5MTcyMjgzNjguanBnIn0=", "name": "菊花台-小昧、宏生", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB6JSh5aiB5rO9IiwgIm5hbWUiOiAi6a2U5pyv5LiO5q2M5puy77ya5ZGK55m95rCU55CDIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOOW5tOS4reWkrueUteinhuWPsOaYpeiKguiBlOasouaZmuS8miIsICJhbGJ1bUlkIjogIjM3NTc5MDYxIiwgInNvbmdtaWQiOiAid3lfNTM2NTcwNDUwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MzQiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC91SUZJM1p4LTNhaU1Oc0ZsQU1CeEJRPT0vMTA5OTUxMTYzMTQyMTYyMjI2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuMjcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4LjE3IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjguMTcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy4yNyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV81MzY1NzA0NTAiLCAidGl0bGUiOiAi6a2U5pyv5LiO5q2M5puy77ya5ZGK55m95rCU55CDIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwMzozNCIsICJhcnRpc3QiOiAi5ZGo5p2w5Lym44CB6JSh5aiB5rO9IiwgImFsYnVtIjogIjIwMTjlubTkuK3lpK7nlLXop4blj7DmmKXoioLogZTmrKLmmZrkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdUlGSTNaeC0zYWlNTnNGbEFNQnhCUT09LzEwOTk1MTE2MzE0MjE2MjIyNi5qcGcifQ==", "name": "魔术与歌曲:告白气球 (Live)-周杰伦、蔡威泽", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O5Zyj5p2wIiwgIm5hbWUiOiAi5a6J6Z2ZIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5q2M5omLMjAxOCDnrKw05pyfIiwgImFsYnVtSWQiOiAiMzczOTE3MTkiLCAic29uZ21pZCI6ICJ3eV81MzUwMjgwMTQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo1OSIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2ZNbzhfbXNhUE9GaEprQjNlYWh2YlE9PS8xMDk5NTExNjY1NTc4ODg2OTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjQzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzEuNDkgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjU4Ljk5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNTguOTkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMzEuNDkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuNDMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC41NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV81MzUwMjgwMTQiLCAidGl0bGUiOiAi5a6J6Z2ZIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDo1OSIsICJhcnRpc3QiOiAi5p2O5Zyj5p2wIiwgImFsYnVtIjogIuatjOaJizIwMTgg56ysNOacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mTW84X21zYVBPRmhKa0IzZWFodmJRPT0vMTA5OTUxMTY2NTU3ODg4NjkzLmpwZyJ9", "name": "安静 (Live)-李圣杰", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5Li75ZSxLumYv+ajriIsICJuYW1lIjogIuaWreS6hueahOW8pu+8iOW/g+WKqOeJiO+8iSIsICJhbGJ1bU5hbWUiOiAi54W95oOFIiwgImFsYnVtSWQiOiAiMTY3NDIyMjAyIiwgInNvbmdtaWQiOiAid3lfMjA1NTI2Njc4NCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjE5IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvVTV0ZkFrc2ctdlVueFRtZHBRLXlJZz09LzEwOTk1MTE2ODY2OTM3NTAxOS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjIyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMy4wNSBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIzLjA1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuMjIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjA1NTI2Njc4NCIsICJ0aXRsZSI6ICLmlq3kuobnmoTlvKbvvIjlv4PliqjniYjvvIkiLCAiZHVyYXRpb24iOiAiMDE6MTkiLCAiYXJ0aXN0IjogIuS4u+WUsS7pmL/mo64iLCAiYWxidW0iOiAi54W95oOFIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1U1dGZBa3NnLXZVbnhUbWRwUS15SWc9PS8xMDk5NTExNjg2NjkzNzUwMTkuanBnIn0=", "name": "断了的弦(心动版)-主唱.阿森", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiYW5naW45OCIsICJuYW1lIjogIjIwMjEuMTIuMjAiLCAiYWxidW1OYW1lIjogIuaXoOiBiiIsICJhbGJ1bUlkIjogIjEzNjgxMTUxOCIsICJzb25nbWlkIjogInd5XzE5MDU2OTI4NDciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDozMCIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2N2VHFrZWZDa1htdHdYQ2FfODFCMkE9PS8xMDk5NTExNjY2NzM4OTU5OTUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNDc4LjQxIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMS4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjQuMjMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNC4yMyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQ3OC40MSBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTA1NjkyODQ3IiwgInRpdGxlIjogIjIwMjEuMTIuMjAiLCAiZHVyYXRpb24iOiAiMDA6MzAiLCAiYXJ0aXN0IjogImFuZ2luOTgiLCAiYWxidW0iOiAi5peg6IGKIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2N2VHFrZWZDa1htdHdYQ2FfODFCMkE9PS8xMDk5NTExNjY2NzM4OTU5OTUuanBnIn0=", "name": "2021.12.20-angin98", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5byg5a6HIiwgIm5hbWUiOiAi6L+36L+t6aaZIiwgImFsYnVtTmFtZSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysNeacnyIsICJhbGJ1bUlkIjogIjI3ODY4NjQiLCAic29uZ21pZCI6ICJ3eV8yODQyNzc1MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjU1IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvb0Zwczl1OXFrdmx2bVV0VmIzYkVSdz09LzU4ODg5ODQyNzg1NjM2NjMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41MiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjI5IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzIuMjEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzIuMjEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuMjkgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC41MiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yODQyNzc1MSIsICJ0aXRsZSI6ICLov7fov63pppkiLCAiZHVyYXRpb24iOiAiMDQ6NTUiLCAiYXJ0aXN0IjogIuW8oOWuhyIsICJhbGJ1bSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysNeacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9vRnBzOXU5cWt2bHZtVXRWYjNiRVJ3PT0vNTg4ODk4NDI3ODU2MzY2My5qcGcifQ==", "name": "迷迭香-张宇", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImFsYnVtTmFtZSI6ICLnnIvmiJE3MuWPmCIsICJhbGJ1bUlkIjogIjIxMzQ5IiwgInNvbmdtaWQiOiAid3lfMjEwMDQ5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTQiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84RDJQZDdFdXZHYm9NeUUyeFdjNDdBPT0vMTA5OTUxMTcyNDUzNzEyMDI1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNTAgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4yNCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMzLjMwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMzLjMwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjI0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNTAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjEwMDQ5IiwgInRpdGxlIjogIuW4g+aLieagvOW5v+WcuiIsICJkdXJhdGlvbiI6ICIwNDo1NCIsICJhcnRpc3QiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgImFsYnVtIjogIueci+aIkTcy5Y+YIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzhEMlBkN0V1dkdib015RTJ4V2M0N0E9PS8xMDk5NTExNzI0NTM3MTIwMjUuanBnIn0=", "name": "布拉格广场-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi6aqR5aOr57K+56WeIiwgImFsYnVtTmFtZSI6ICLnnIvmiJE3MuWPmCIsICJhbGJ1bUlkIjogIjIxMzQ5IiwgInNvbmdtaWQiOiAid3lfMjEwMDYyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MTciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84RDJQZDdFdXZHYm9NeUUyeFdjNDdBPT0vMTA5OTUxMTcyNDUzNzEyMDI1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjgzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzAuNDAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzAuNDAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS44MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMDA2MiIsICJ0aXRsZSI6ICLpqpHlo6vnsr7npZ4iLCAiZHVyYXRpb24iOiAiMDQ6MTciLCAiYXJ0aXN0IjogIuiUoeS+neael+OAgeWRqOadsOS8piIsICJhbGJ1bSI6ICLnnIvmiJE3MuWPmCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84RDJQZDdFdXZHYm9NeUUyeFdjNDdBPT0vMTA5OTUxMTcyNDUzNzEyMDI1LmpwZyJ9", "name": "骑士精神-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O5YWL5Yuk44CB5a6556WW5YS/IiwgIm5hbWUiOiAi5YWL5LiN5a6557yT57uE5puyIiwgImFsYnVtTmFtZSI6ICLmiJHmmK/mrYzmiYvnrKzlm5vlraMg5Y+M5bm05beF5bOw5LyaIiwgImFsYnVtSWQiOiAiMzQ2MTE0NzQiLCAic29uZ21pZCI6ICJ3eV80MDk5MzE0ODgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNzoyMiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0stWUN6U3lIYWNWSXBob3VLdWQwU1E9PS8xMzgwOTg2NjEwODY4MTU4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjYuNzUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxNi44OCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjUwLjA5IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICI5MC43MCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjkwLjcwIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjUwLjA5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjE2Ljg4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjYuNzUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNDA5OTMxNDg4IiwgInRpdGxlIjogIuWFi+S4jeWuuee8k+e7hOabsiIsICJkdXJhdGlvbiI6ICIwNzoyMiIsICJhcnRpc3QiOiAi5p2O5YWL5Yuk44CB5a6556WW5YS/IiwgImFsYnVtIjogIuaIkeaYr+atjOaJi+esrOWbm+WtoyDlj4zlubTlt4Xls7DkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSy1ZQ3pTeUhhY1ZJcGhvdUt1ZDBTUT09LzEzODA5ODY2MTA4NjgxNTguanBnIn0=", "name": "克不容缓组曲-李克勤、容祖儿", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6XIiwgIm5hbWUiOiAi5YCS5bimIiwgImFsYnVtTmFtZSI6ICLmsYLlqZrkuovliqHmiYAg55S16KeG5Y6f5aOw5bimIiwgImFsYnVtSWQiOiAiNDg5OTg2IiwgInNvbmdtaWQiOiAid3lfNDg3NjIwMiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjI2IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRGVLR05fd1F3aWhMWlJCY0hTUS1FQT09LzEwOTk1MTE3MTMxNTg5MzE5OS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjA2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuMTYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMS44NCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMS44NCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC4xNiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjA2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ4NzYyMDIiLCAidGl0bGUiOiAi5YCS5bimIiwgImR1cmF0aW9uIjogIjA0OjI2IiwgImFydGlzdCI6ICLolKHkvp3mnpciLCAiYWxidW0iOiAi5rGC5ama5LqL5Yqh5omAIOeUteinhuWOn+WjsOW4piIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9EZUtHTl93UXdpaExaUkJjSFNRLUVBPT0vMTA5OTUxMTcxMzE1ODkzMTk5LmpwZyJ9", "name": "倒带-蔡依林", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi576k5pifIiwgIm5hbWUiOiAi5Y+v54ix5aWz5Lq6IiwgImFsYnVtTmFtZSI6ICLlqJPlqJPkuYvpn7MiLCAiYWxidW1JZCI6ICIzNDY2NzA0NSIsICJzb25nbWlkIjogInd5XzQxMDUxODE0NCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjQ5IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvM0d0TC0xbmREN1V0LUQzRDVHUEZudz09LzEzODQyODUxNDYzNTk5OTQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy41MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNzQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxNS4zOSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxNS4zOSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI4Ljc0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuNTAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNDEwNTE4MTQ0IiwgInRpdGxlIjogIuWPr+eIseWls+S6uiIsICJkdXJhdGlvbiI6ICIwMzo0OSIsICJhcnRpc3QiOiAi576k5pifIiwgImFsYnVtIjogIuWok+Wok+S5i+mfsyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC8zR3RMLTFuZEQ3VXQtRDNENUdQRm53PT0vMTM4NDI4NTE0NjM1OTk5NC5qcGcifQ==", "name": "可爱女人-群星", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiREpYOCIsICJuYW1lIjogIuS9oOW3sue7j+emu+W8gOaIkSIsICJhbGJ1bU5hbWUiOiAi5LiN6LSf6YGH6KeBIiwgImFsYnVtSWQiOiAiMTU2MTMyMDcyIiwgInNvbmdtaWQiOiAid3lfMjAwOTYxNzgzMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjU0IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvbFlPMUVJYzJQcU1oa04xTjB2clR3QT09LzEwOTk1MTE2ODEyNTQ5MTM3NS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjc0IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC4zNiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjAxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjAxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjQuMzYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS43NCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMDA5NjE3ODMwIiwgInRpdGxlIjogIuS9oOW3sue7j+emu+W8gOaIkSIsICJkdXJhdGlvbiI6ICIwMTo1NCIsICJhcnRpc3QiOiAiREpYOCIsICJhbGJ1bSI6ICLkuI3otJ/pgYfop4EiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvbFlPMUVJYzJQcU1oa04xTjB2clR3QT09LzEwOTk1MTE2ODEyNTQ5MTM3NS5qcGcifQ==", "name": "你已经离开我-DJX8", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi55m+5bed5pif54GrIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwIiwgImFsYnVtTmFtZSI6ICLlnKjnga/ngavkuIsiLCAiYWxidW1JZCI6ICIxMzg5MzU4MTUiLCAic29uZ21pZCI6ICJ3eV8xOTEyMzg2MzE0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6NTAiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9HOTB0VkVvb3dOS2c3OVYteDJWVHlRPT0vMTA5OTUxMTY2OTM3MjgxMzU5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNTEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4Ljc4IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjguNzggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy41MSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTEyMzg2MzE0IiwgInRpdGxlIjogIueIseaIkeWIq+i1sCIsICJkdXJhdGlvbiI6ICIwMzo1MCIsICJhcnRpc3QiOiAi55m+5bed5pif54GrIiwgImFsYnVtIjogIuWcqOeBr+eBq+S4iyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9HOTB0VkVvb3dOS2c3OVYteDJWVHlRPT0vMTA5OTUxMTY2OTM3MjgxMzU5LmpwZyJ9", "name": "爱我别走-百川星火", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiSmVzc2UgVCIsICJuYW1lIjogIueul+S7gOm6veeUt+S6uiAo6Yu855C054mIKSIsICJhbGJ1bU5hbWUiOiAi566X5LuA6bq955S35Lq6ICjpi7znkLTniYgpIiwgImFsYnVtSWQiOiAiMTM1Nzc0MzE5IiwgInNvbmdtaWQiOiAid3lfMTg5MjgwOTUwOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjQxIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSFNxQXlDdy04ZnpCZ1dMTXFhMUhTUT09LzEwOTk1MTE2NjU5MzE2OTA1NS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjI5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuNzMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxOC41OSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxOC41OSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC43MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjI5IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4OTI4MDk1MDgiLCAidGl0bGUiOiAi566X5LuA6bq955S35Lq6ICjpi7znkLTniYgpIiwgImR1cmF0aW9uIjogIjA0OjQxIiwgImFydGlzdCI6ICJKZXNzZSBUIiwgImFsYnVtIjogIueul+S7gOm6veeUt+S6uiAo6Yu855C054mIKSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9IU3FBeUN3LThmekJnV0xNcWExSFNRPT0vMTA5OTUxMTY2NTkzMTY5MDU1LmpwZyJ9", "name": "算什麽男人 (鋼琴版)-Jesse T", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ICFIiwgIm5hbWUiOiAi6Zu256KO55qE6K6w5b+GIiwgImFsYnVtTmFtZSI6ICLpm7YiLCAiYWxidW1JZCI6ICIxNTc1MDA1MjAiLCAic29uZ21pZCI6ICJ3eV8yMDExMzMwMzIxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6NDEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9scEEzRmNSXzZFWDBVUTdLRFJzVVBnPT0vMTA5OTUxMTY4MjE3OTM1NjkyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuNTYgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIzLjg5IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTAuNTYgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMTAuNTYgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMy44OSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjU2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIwMTEzMzAzMjEiLCAidGl0bGUiOiAi6Zu256KO55qE6K6w5b+GIiwgImR1cmF0aW9uIjogIjAxOjQxIiwgImFydGlzdCI6ICLogIUiLCAiYWxidW0iOiAi6Zu2IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2xwQTNGY1JfNkVYMFVRN0tEUnNVUGc9PS8xMDk5NTExNjgyMTc5MzU2OTIuanBnIn0=", "name": "零碎的记忆-者", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Zmq5Ly0IiwgIm5hbWUiOiAi5Y206LWw5LiN6L+b5L2g5b+D6YeMIiwgImFsYnVtTmFtZSI6ICLlsI/pmL/mraYiLCAiYWxidW1JZCI6ICIxNDIyMzI2ODQiLCAic29uZ21pZCI6ICJ3eV8xOTQyMzg4OTYxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9PWjZ3VXFXR1BjYmdaT2ttSTFYb3RRPT0vMTA5OTUxMTY3MjU3NDMwNTkyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI1Mi43MCBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjYzMS42OCBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI2MzEuNjggS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjUyLjcwIEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NDIzODg5NjEiLCAidGl0bGUiOiAi5Y206LWw5LiN6L+b5L2g5b+D6YeMIiwgImR1cmF0aW9uIjogIjAwOjE2IiwgImFydGlzdCI6ICLpmarkvLQiLCAiYWxidW0iOiAi5bCP6Zi/5q2mIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L09aNndVcVdHUGNiZ1pPa21JMVhvdFE9PS8xMDk5NTExNjcyNTc0MzA1OTIuanBnIn0=", "name": "却走不进你心里-陪伴", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YKj6IuxIiwgIm5hbWUiOiAi5Y+q5pyJ5Li65L2gICsg5LiN5bCG5bCxICsg5pyA6ZW/55qE55S15b2xICsg5YuH5pWi55qE5b+DIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOeS4reWbveWlveWjsOmfs+WbveW6hua8lOWUseS8miIsICJhbGJ1bUlkIjogIjgyMjM4MzQ5IiwgInNvbmdtaWQiOiAid3lfMTM5NTgwNzg2MCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjEwOjMzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvcDNUZm51VDVFdFZLV21uUXVoY2czQT09LzEwOTk1MTE2ODAyMzQwMjExMi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI5LjY3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMjQuMTcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI3My40NyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3My40NyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIyNC4xNyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI5LjY3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzEzOTU4MDc4NjAiLCAidGl0bGUiOiAi5Y+q5pyJ5Li65L2gICsg5LiN5bCG5bCxICsg5pyA6ZW/55qE55S15b2xICsg5YuH5pWi55qE5b+DIChMaXZlKSIsICJkdXJhdGlvbiI6ICIxMDozMyIsICJhcnRpc3QiOiAi6YKj6IuxIiwgImFsYnVtIjogIjIwMTnkuK3lm73lpb3lo7Dpn7Plm73luobmvJTllLHkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvcDNUZm51VDVFdFZLV21uUXVoY2czQT09LzEwOTk1MTE2ODAyMzQwMjExMi5qcGcifQ==", "name": "只有为你 + 不将就 + 最长的电影 + 勇敢的心 (Live)-那英", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi56iA6aWtIiwgIm5hbWUiOiAi5oiR5Lya5a2m552A5pS+5byD5L2gIOaYr+WboOS4uuaIkeWkqueIseS9oCIsICJhbGJ1bU5hbWUiOiAi57K+5b2p57ud5LymIiwgImFsYnVtSWQiOiAiMTQ5ODE1NzI2IiwgInNvbmdtaWQiOiAid3lfMTk3NDUyMjM2OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjIwIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvNkdVRmdGSnRjZlFQSXl4elM1OFlCdz09LzEwOTk1MTE2Nzc4Nzk4NDI2My5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0Ljg4IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuMjEgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOS43MyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOS43MyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi4yMSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0Ljg4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NzQ1MjIzNjkiLCAidGl0bGUiOiAi5oiR5Lya5a2m552A5pS+5byD5L2gIOaYr+WboOS4uuaIkeWkqueIseS9oCIsICJkdXJhdGlvbiI6ICIwNToyMCIsICJhcnRpc3QiOiAi56iA6aWtIiwgImFsYnVtIjogIueyvuW9qee7neS8piIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC82R1VGZ0ZKdGNmUVBJeXh6UzU4WUJ3PT0vMTA5OTUxMTY3Nzg3OTg0MjYzLmpwZyJ9", "name": "我会学着放弃你 是因为我太爱你-稀饭", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6XIiwgIm5hbWUiOiAi5L2g5oCO5LmI6L+e6K+d6YO96K+05LiN5riF5qWaIiwgImFsYnVtTmFtZSI6ICJCb3JuIHRvIEJlIGEgU3RhciDotoXnuqfnj43ol4/kuJbnuqrnsr7pgIkiLCAiYWxidW1JZCI6ICIyMTMzNiIsICJzb25nbWlkIjogInd5XzIwOTg2NyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjA4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZ1BLR1FzeDh3Z0kwR2VJaFVPNWw1QT09LzEwOTk1MTE2NTcwNTUwMjcyNS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjcwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTEuNzUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMi4xOSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMi4xOSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMS43NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjcwIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIwOTg2NyIsICJ0aXRsZSI6ICLkvaDmgI7kuYjov57or53pg73or7TkuI3muIXmpZoiLCAiZHVyYXRpb24iOiAiMDU6MDgiLCAiYXJ0aXN0IjogIuiUoeS+neaelyIsICJhbGJ1bSI6ICJCb3JuIHRvIEJlIGEgU3RhciDotoXnuqfnj43ol4/kuJbnuqrnsr7pgIkiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZ1BLR1FzeDh3Z0kwR2VJaFVPNWw1QT09LzEwOTk1MTE2NTcwNTUwMjcyNS5qcGcifQ==", "name": "你怎么连话都说不清楚-蔡依林", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Zi/5bGC5Li2IiwgIm5hbWUiOiAiVEHnmoTmrYwiLCAiYWxidW1OYW1lIjogIlRoZSByb3NlIGluIHlvdXIgaGFuZCIsICJhbGJ1bUlkIjogIjE0MjQwNTg3MSIsICJzb25nbWlkIjogInd5XzE5MzE1NDQxNDMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoyNiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0RObUhtRGI2R1FKaDE5MVNmR0dkTnc9PS8xMDk5NTExNjcxOTIyMTYwODQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4xNSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuODggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxMC4xMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxMC4xMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3Ljg4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuMTUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkzMTU0NDE0MyIsICJ0aXRsZSI6ICJUQeeahOatjCIsICJkdXJhdGlvbiI6ICIwMzoyNiIsICJhcnRpc3QiOiAi6Zi/5bGC5Li2IiwgImFsYnVtIjogIlRoZSByb3NlIGluIHlvdXIgaGFuZCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9ETm1IbURiNkdRSmgxOTFTZkdHZE53PT0vMTA5OTUxMTY3MTkyMjE2MDg0LmpwZyJ9", "name": "TA的歌-阿层丶", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5b6u55Sc55qE5bCP6aOOIiwgIm5hbWUiOiAi5pat5LqG55qE5bymIiwgImFsYnVtTmFtZSI6ICLpm6jnurfnurciLCAiYWxidW1JZCI6ICIxNjY4MjQ2NDUiLCAic29uZ21pZCI6ICJ3eV8yMDUyNTE3NDU2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MzMiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Sc3U0ekw5VnRHcXBBN3Bob2FyOC1RPT0vMTA5OTUxMTY4NjUzMzMzNzQzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMzQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1Ljg2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy4yNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjI1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUuODYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi4zNCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMDUyNTE3NDU2IiwgInRpdGxlIjogIuaWreS6hueahOW8piIsICJkdXJhdGlvbiI6ICIwMjozMyIsICJhcnRpc3QiOiAi5b6u55Sc55qE5bCP6aOOIiwgImFsYnVtIjogIumbqOe6t+e6tyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Sc3U0ekw5VnRHcXBBN3Bob2FyOC1RPT0vMTA5OTUxMTY4NjUzMzMzNzQzLmpwZyJ9", "name": "断了的弦-微甜的小风", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAieuadsOWTpSIsICJuYW1lIjogIk1hcGxlIiwgImFsYnVtTmFtZSI6ICJNYXBsZSIsICJhbGJ1bUlkIjogIjE0NTQ3NDM1MiIsICJzb25nbWlkIjogInd5XzE5NTAzNzMxNjciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo0NyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzU1NGRYZHZ0RVJqenNaRVFoQWJoQkE9PS8xMDk5NTExNjc0NzIxMzc5NTUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4zOSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjk2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDUuMzIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNDUuMzIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuOTYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4zOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTUwMzczMTY3IiwgInRpdGxlIjogIk1hcGxlIiwgImR1cmF0aW9uIjogIjA0OjQ3IiwgImFydGlzdCI6ICJ65p2w5ZOlIiwgImFsYnVtIjogIk1hcGxlIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzU1NGRYZHZ0RVJqenNaRVFoQWJoQkE9PS8xMDk5NTExNjc0NzIxMzc5NTUuanBnIn0=", "name": "Maple-z杰哥", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6K645pif57qvIiwgIm5hbWUiOiAi57uK5YCS6YmE55uS77yIMC44w5fvvIkiLCAiYWxidW1OYW1lIjogIuWSjOS9oCIsICJhbGJ1bUlkIjogIjE1NTc2NzAxOCIsICJzb25nbWlkIjogInd5XzIwMDMwMjI5MTEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoyNCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2dPUHNpN1d1TE9ZZm9FN2IzTHAxSkE9PS8xMDk5NTExNjgxMDUzMzg1MDQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMzc5LjIzIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOTQ4LjAwIEtCIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjk0OC4wMCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzNzkuMjMgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjAwMzAyMjkxMSIsICJ0aXRsZSI6ICLnu4rlgJLpiYTnm5LvvIgwLjjDl++8iSIsICJkdXJhdGlvbiI6ICIwMDoyNCIsICJhcnRpc3QiOiAi6K645pif57qvIiwgImFsYnVtIjogIuWSjOS9oCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9nT1BzaTdXdUxPWWZvRTdiM0xwMUpBPT0vMTA5OTUxMTY4MTA1MzM4NTA0LmpwZyJ9", "name": "绊倒鉄盒(0.8×)-许星纯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Zi/5bGC5Li2IiwgIm5hbWUiOiAi6YKE6Iys6JOF5rWq77yIUHYu77yJIiwgImFsYnVtTmFtZSI6ICJUSEUgR1JFQVRFU1QiLCAiYWxidW1JZCI6ICIxNDc4Nzc4OTQiLCAic29uZ21pZCI6ICJ3eV8xOTY4OTkzNDA2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9FQzRYLTVtYVBncTlXM3p0dENnMEZRPT0vMTA5OTUxMTY3NjQ4Mjk1NzMwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41NCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjQ5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjQ5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjU0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk2ODk5MzQwNiIsICJ0aXRsZSI6ICLpgoTojKzok4XmtarvvIhQdi7vvIkiLCAiZHVyYXRpb24iOiAiMDQ6MzYiLCAiYXJ0aXN0IjogIumYv+WxguS4tiIsICJhbGJ1bSI6ICJUSEUgR1JFQVRFU1QiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvRUM0WC01bWFQZ3E5VzN6dHRDZzBGUT09LzEwOTk1MTE2NzY0ODI5NTczMC5qcGcifQ==", "name": "還茬蓅浪(Pv.)-阿层丶", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5rexIiwgIm5hbWUiOiAi5YWw5Lqt5bqPIiwgImFsYnVtTmFtZSI6ICIiLCAiYWxidW1JZCI6ICIiLCAic29uZ21pZCI6ICJ3eV8xOTc0NDAzMzM2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8wRWVaN3Jmc3F1Y1BpNW5paHRRaVRnPT0vMTA5OTUxMTY3ODA1NTAyMTc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNzkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjQ3IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjkuNDcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy43OSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTc0NDAzMzM2IiwgInRpdGxlIjogIuWFsOS6reW6jyIsICJkdXJhdGlvbiI6ICIwNDowOCIsICJhcnRpc3QiOiAi5ZGo5rexIiwgImFsYnVtIjogIiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8wRWVaN3Jmc3F1Y1BpNW5paHRRaVRnPT0vMTA5OTUxMTY3ODA1NTAyMTc1LmpwZyJ9", "name": "兰亭序-周深", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YiY5a6J5LuK5aSp5LiN5ZuwIiwgIm5hbWUiOiAi5b6I54ix5oiR55qE5a6dLei2heeIseeJiCIsICJhbGJ1bU5hbWUiOiAi5rC46L+c5Zac5qyi5oiR55qE5a6dIiwgImFsYnVtSWQiOiAiMTQzNTE3MzAyIiwgInNvbmdtaWQiOiAid3lfMTkzODMwNDIxOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvWGplRXkwZlZ3MGxSRFowQVpXTnQ0dz09LzEwOTk1MTE2NzI5NDUyMTI5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyOTAuNjYgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3MjYuNTcgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjE0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMTQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNzI2LjU3IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjI5MC42NiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTM4MzA0MjE4IiwgInRpdGxlIjogIuW+iOeIseaIkeeahOWunS3otoXniLHniYgiLCAiZHVyYXRpb24iOiAiMDA6MTgiLCAiYXJ0aXN0IjogIuWImOWuieS7iuWkqeS4jeWbsCIsICJhbGJ1bSI6ICLmsLjov5zllpzmrKLmiJHnmoTlrp0iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvWGplRXkwZlZ3MGxSRFowQVpXTnQ0dz09LzEwOTk1MTE2NzI5NDUyMTI5Mi5qcGcifQ==", "name": "很爱我的宝-超爱版-刘安今天不困", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZCJ5a2Q6L+I5a2QIiwgIm5hbWUiOiAi6Zuo5reL5rm/5LqG5aSp56m6KOWls+WjsOeJiCApIiwgImFsYnVtTmFtZSI6ICLkuIDot6/lkIzooYwiLCAiYWxidW1JZCI6ICIxMjQ3Njc1MDEiLCAic29uZ21pZCI6ICJ3eV8xODMwNzM1NDAzIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MzkiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9TcVU3SjlmUDFXNW0yZGdTUlNjUTlnPT0vMTA5OTUxMTY1ODE2OTEyMDY0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjYxNC4yOSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuNTAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI2LjQxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYuNDEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS41MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI2MTQuMjkgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMDczNTQwMyIsICJ0aXRsZSI6ICLpm6jmt4vmub/kuoblpKnnqboo5aWz5aOw54mIICkiLCAiZHVyYXRpb24iOiAiMDA6MzkiLCAiYXJ0aXN0IjogIuWQieWtkOi/iOWtkCIsICJhbGJ1bSI6ICLkuIDot6/lkIzooYwiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3FVN0o5ZlAxVzVtMmRnU1JTY1E5Zz09LzEwOTk1MTE2NTgxNjkxMjA2NC5qcGcifQ==", "name": "雨淋湿了天空(女声版 )-吉子迈子", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi55+z5rOiIiwgIm5hbWUiOiAi6K+05LqG5YaN6KeBIiwgImFsYnVtTmFtZSI6ICLkvaDmi7/ku4DkuYjmhJ/lkIzouqvlj5ciLCAiYWxidW1JZCI6ICIxMjQ4ODg1MjkiLCAic29uZ21pZCI6ICJ3eV8xODMxNDM2MTU0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MDYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9vcFdCak5rSjd0bmZiUVFOVXVNUmR3PT0vMTA5OTUxMTY1ODI1MzU0ODMzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNjcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS42OSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYyLjcxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYyLjcxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjY5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNjcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMTQzNjE1NCIsICJ0aXRsZSI6ICLor7Tkuoblho3op4EiLCAiZHVyYXRpb24iOiAiMDU6MDYiLCAiYXJ0aXN0IjogIuefs+azoiIsICJhbGJ1bSI6ICLkvaDmi7/ku4DkuYjmhJ/lkIzouqvlj5ciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvb3BXQmpOa0o3dG5mYlFRTlV1TVJkdz09LzEwOTk1MTE2NTgyNTM1NDgzMy5qcGcifQ==", "name": "说了再见-石波", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQnV6YWkt5aicIiwgIm5hbWUiOiAi6Zuo5reL5rm/5LqG5aSp56m6IiwgImFsYnVtTmFtZSI6ICLov5nkuJbnlYzpgqPkuYjlpJrkurogKOeQtO+8iSIsICJhbGJ1bUlkIjogIjEzODk0ODQwNSIsICJzb25nbWlkIjogInd5XzE5MTI1MzgzNjgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTozOSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3ljbnlXbldIM1ozREh5RG9YTEtyekE9PS8xMDk5NTExNjY5Mzk2Mzg1NTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS41MiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjMuNzkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI5LjEyIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjkuMTIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMy43OSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjUyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MTI1MzgzNjgiLCAidGl0bGUiOiAi6Zuo5reL5rm/5LqG5aSp56m6IiwgImR1cmF0aW9uIjogIjAxOjM5IiwgImFydGlzdCI6ICJCdXphaS3lqJwiLCAiYWxidW0iOiAi6L+Z5LiW55WM6YKj5LmI5aSa5Lq6ICjnkLTvvIkiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveWNueVduV0gzWjNESHlEb1hMS3J6QT09LzEwOTk1MTE2NjkzOTYzODU1My5qcGcifQ==", "name": "雨淋湿了天空-Buzai-娜", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZW36Lev5oWi5oWiLSIsICJuYW1lIjogIui/measoeaIkeayoeacieWGjeetieS9oCIsICJhbGJ1bU5hbWUiOiAi5oSb5oSP6Zqo6aKo6LW3IiwgImFsYnVtSWQiOiAiMTMwNjMxNDkwIiwgInNvbmdtaWQiOiAid3lfMTg4MzE1NjI0MiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjQ5IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvY0JRbkpheUJwLXBXU01ZVi1vRm1nZz09LzEwOTk1MTE2NjE5NjkyMjA1Ny5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjY3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC4xOCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE2Ljk5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE2Ljk5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjQuMTggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS42NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODgzMTU2MjQyIiwgInRpdGxlIjogIui/measoeaIkeayoeacieWGjeetieS9oCIsICJkdXJhdGlvbiI6ICIwMTo0OSIsICJhcnRpc3QiOiAi6ZW36Lev5oWi5oWiLSIsICJhbGJ1bSI6ICLmhJvmhI/pmqjpoqjotbciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvY0JRbkpheUJwLXBXU01ZVi1vRm1nZz09LzEwOTk1MTE2NjE5NjkyMjA1Ny5qcGcifQ==", "name": "这次我没有再等你-長路慢慢-", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Lev5oWi5oWiIiwgIm5hbWUiOiAi5oiR6LCI552A55C05ZSx5L2g54ix55qE5q2MIiwgImFsYnVtTmFtZSI6ICLmnaXlubTnp4vpo47otbciLCAiYWxidW1JZCI6ICIxMzYxNTk5NDgiLCAic29uZ21pZCI6ICJ3eV8xODk1NTk1Mzk1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Nd013dkw0RnBWU1ZSYW9NanJiU2FBPT0vMTA5OTUxMTY2NjI0OTgzNTM3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI5Mi41NCBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjczMS4yOSBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEuOTEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMS45MSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3MzEuMjkgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjkyLjU0IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4OTU1OTUzOTUiLCAidGl0bGUiOiAi5oiR6LCI552A55C05ZSx5L2g54ix55qE5q2MIiwgImR1cmF0aW9uIjogIjAwOjE4IiwgImFydGlzdCI6ICLot6/mhaLmhaIiLCAiYWxidW0iOiAi5p2l5bm056eL6aOO6LW3IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L013TXd2TDRGcFZTVlJhb01qcmJTYUE9PS8xMDk5NTExNjY2MjQ5ODM1MzcuanBnIn0=", "name": "我谈着琴唱你爱的歌-路慢慢", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5a6J55CqYmFieSIsICJuYW1lIjogIuivtOS6huWGjeingSIsICJhbGJ1bU5hbWUiOiAi5LiT5bGe5oOF5q2MIiwgImFsYnVtSWQiOiAiMTI0OTgzNTEzIiwgInNvbmdtaWQiOiAid3lfMTgzMTc1OTM2OCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjMyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMGp1OEVUMUFwWlNYZldhY2M0dzQ5dz09LzEwOTk1MTE2OTQ4NDA5MTY4MC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjQyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMy41NCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIzLjU0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNDIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMTc1OTM2OCIsICJ0aXRsZSI6ICLor7Tkuoblho3op4EiLCAiZHVyYXRpb24iOiAiMDE6MzIiLCAiYXJ0aXN0IjogIuWuieeQqmJhYnkiLCAiYWxidW0iOiAi5LiT5bGe5oOF5q2MIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzBqdThFVDFBcFpTWGZXYWNjNHc0OXc9PS8xMDk5NTExNjk0ODQwOTE2ODAuanBnIn0=", "name": "说了再见-安琪baby", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiNy0iLCAibmFtZSI6ICI3LeacgOi/keacieS4jeW8gOW/g+WQlyIsICJhbGJ1bU5hbWUiOiAi6YGX5oa+5piv5LiA56eN6Ieq55Sx55qE5pa55byPIiwgImFsYnVtSWQiOiAiMTQ3MDkxMTc5IiwgInNvbmdtaWQiOiAid3lfMTk2Nzc5NDAxOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjEyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvQlpBQnZtcFpRRXdoaVkxVllvMXQ3Zz09LzEwOTk1MTE2Nzc5ODg0Mjg1NS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMDAuMDQgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1MDAuMDQgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI4NzAuMDkgS0IifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiODcwLjA5IEtCIn0sICIzMjBrIjogeyJzaXplIjogIjUwMC4wNCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMDAuMDQgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk2Nzc5NDAxOCIsICJ0aXRsZSI6ICI3LeacgOi/keacieS4jeW8gOW/g+WQlyIsICJkdXJhdGlvbiI6ICIwMDoxMiIsICJhcnRpc3QiOiAiNy0iLCAiYWxidW0iOiAi6YGX5oa+5piv5LiA56eN6Ieq55Sx55qE5pa55byPIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0JaQUJ2bXBaUUV3aGlZMVZZbzF0N2c9PS8xMDk5NTExNjc3OTg4NDI4NTUuanBnIn0=", "name": "7-最近有不开心吗-7-", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YW25a6eIiwgIm5hbWUiOiAi57qv6Z+z5LmQ6aaGLembqOS4i+aVtOWknO+8iOWFtuWuniByZW1peO+8iSIsICJhbGJ1bU5hbWUiOiAi57qq5b+1IiwgImFsYnVtSWQiOiAiMTQzOTM2OTgxIiwgInNvbmdtaWQiOiAid3lfMTk1Mzk4MzczMyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvLVVLaUR6dW15eG9vVEtuQ0t6ZGgzUT09LzEwOTk1MTE2NzMzNjgzMTk4Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNTUuNTUgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4ODguODIgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxLjY0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEuNjQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiODg4LjgyIEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM1NS41NSBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTUzOTgzNzMzIiwgInRpdGxlIjogIue6r+mfs+S5kOmmhi3pm6jkuIvmlbTlpJzvvIjlhbblrp4gcmVtaXjvvIkiLCAiZHVyYXRpb24iOiAiMDA6MjIiLCAiYXJ0aXN0IjogIuWFtuWuniIsICJhbGJ1bSI6ICLnuqrlv7UiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvLVVLaUR6dW15eG9vVEtuQ0t6ZGgzUT09LzEwOTk1MTE2NzMzNjgzMTk4Mi5qcGcifQ==", "name": "纯音乐馆-雨下整夜(其实 remix)-其实", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6bm/5pmXIiwgIm5hbWUiOiAi5LiW55WM5pyr5pelIiwgImFsYnVtTmFtZSI6ICLkuJbnlYzmnKvml6UiLCAiYWxidW1JZCI6ICI4MDgyODU2NSIsICJzb25nbWlkIjogInd5XzEzODI3NjU3OTYiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDoyNyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3hEN1ZVc3JnRGJHY094cXZsbDFCUFE9PS8xMDk5NTExNjY2NzM0MjY4OTcuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4wOCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjIwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzAuMDQgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzAuMDQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuMjAgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4wOCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xMzgyNzY1Nzk2IiwgInRpdGxlIjogIuS4lueVjOacq+aXpSIsICJkdXJhdGlvbiI6ICIwNDoyNyIsICJhcnRpc3QiOiAi6bm/5pmXIiwgImFsYnVtIjogIuS4lueVjOacq+aXpSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC94RDdWVXNyZ0RiR2NPeHF2bGwxQlBRPT0vMTA5OTUxMTY2NjczNDI2ODk3LmpwZyJ9", "name": "世界末日-鹿晗", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YW25a6eIiwgIm5hbWUiOiAi57qv6Z+z5LmQ6aaGLXNoZOW5uOemj+WRou+8iOWFtuWuniByZW1peO+8iSIsICJhbGJ1bU5hbWUiOiAi54ix5oSPIiwgImFsYnVtSWQiOiAiMTQzNjY5NjI4IiwgInNvbmdtaWQiOiAid3lfMTkzOTYxOTgxMyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE1IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvYlB1V1NDZ1RDclYwTEN2dE9KcFhUQT09LzEwOTk1MTE2NzMxMTQ4Njk3NC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMzguMDAgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1OTQuOTQgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI5NTEuNjMgS0IifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiOTUxLjYzIEtCIn0sICIzMjBrIjogeyJzaXplIjogIjU5NC45NCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMzguMDAgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkzOTYxOTgxMyIsICJ0aXRsZSI6ICLnuq/pn7PkuZDppoYtc2hk5bm456aP5ZGi77yI5YW25a6eIHJlbWl477yJIiwgImR1cmF0aW9uIjogIjAwOjE1IiwgImFydGlzdCI6ICLlhbblrp4iLCAiYWxidW0iOiAi54ix5oSPIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2JQdVdTQ2dUQ3JWMExDdnRPSnBYVEE9PS8xMDk5NTExNjczMTE0ODY5NzQuanBnIn0=", "name": "纯音乐馆-shd幸福呢(其实 remix)-其实", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5YiY5qyiIiwgIm5hbWUiOiAi5LiA56yR6ICM6L+HICsg5L2g55qE6IOM5YyFIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNTc1NzA5MSIsICJzb25nbWlkIjogInd5XzQ5MDYwMjMyMyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAyOjQ3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuNTYgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2LjM5IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTcuOTEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMTcuOTEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNi4zOSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjU2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ5MDYwMjMyMyIsICJ0aXRsZSI6ICLkuIDnrJHogIzov4cgKyDkvaDnmoTog4zljIUgKExpdmUpIiwgImR1cmF0aW9uIjogIjAyOjQ3IiwgImFydGlzdCI6ICLlkajmnbDkvKbjgIHliJjmrKIiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyJ9", "name": "一笑而过 + 你的背包 (Live)-周杰伦、刘欢", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YW25a6eIiwgIm5hbWUiOiAi57qv6Z+z5LmQ6aaGLeetiW5p5LiL6K++IiwgImFsYnVtTmFtZSI6ICLniLHmhI8iLCAiYWxidW1JZCI6ICIxNDM2Njk2MjgiLCAic29uZ21pZCI6ICJ3eV8xOTM5NjEzMzQzIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9iUHVXU0NnVENyVjBMQ3Z0T0pwWFRBPT0vMTA5OTUxMTY3MzExNDg2OTc0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIzNS41NSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjU4OC44MiBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEuMTAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMS4xMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1ODguODIgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjM1LjU1IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5Mzk2MTMzNDMiLCAidGl0bGUiOiAi57qv6Z+z5LmQ6aaGLeetiW5p5LiL6K++IiwgImR1cmF0aW9uIjogIjAwOjE1IiwgImFydGlzdCI6ICLlhbblrp4iLCAiYWxidW0iOiAi54ix5oSPIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2JQdVdTQ2dUQ3JWMExDdnRPSnBYVEE9PS8xMDk5NTExNjczMTE0ODY5NzQuanBnIn0=", "name": "纯音乐馆-等ni下课-其实", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB6ZmI6aKW5oGp44CB6IKW6YKm5aau44CB5pyx5paH5am3IiwgIm5hbWUiOiAi5LmM5YWL5Li95Li9IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDEz5pyfIiwgImFsYnVtSWQiOiAiMzY0MTI2MzMiLCAic29uZ21pZCI6ICJ3eV81MDk3ODE2NTEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoxMyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3lEOXZicHVJTEgtdHFOUklhUDY0MGc9PS8xMDk5NTExNjMwMzgyOTIxNzYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi45NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMzggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMy4xMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyMy4xMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjM4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuOTUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTA5NzgxNjUxIiwgInRpdGxlIjogIuS5jOWFi+S4veS4vSAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDM6MTMiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgemZiOmiluaBqeOAgeiClumCpuWmruOAgeacseaWh+WptyIsICJhbGJ1bSI6ICLkuK3lm73mlrDmrYzlo7DnrKzkuozlraMg56ysMTPmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveUQ5dmJwdUlMSC10cU5SSWFQNjQwZz09LzEwOTk1MTE2MzAzODI5MjE3Ni5qcGcifQ==", "name": "乌克丽丽 (Live)-周杰伦、陈颖恩、肖邦妮、朱文婷", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bq+5r6E5bqG44CB5ZGo5p2w5Lym44CB6LCi6ZyG6ZSL44CB5p2O5YGlIiwgIm5hbWUiOiAi6K6p5oiR5LiA5qyh54ix5Liq5aSfICsg5Zug5Li654ix5omA5Lul54ixICsg5oqa5LuZ5rmWICsg562J5L2g5LiL6K++ICsg6ZyN5YWD55SyICsg5LiH6YeM6ZW/5Z+O5rC45LiN5YCSIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOOS4reWbveWlveWjsOmfsyDnrKwx5pyfIiwgImFsYnVtSWQiOiAiNzE3NDczNjYiLCAic29uZ21pZCI6ICJ3eV84NjYwNDkzNTkiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIxMTo1MiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzR3Z2RpSjN0Y3hGQUpuSXhJdm1PblE9PS8xMDk5NTExNjM0MDk3NjUyNzYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMTAuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyNy4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjg1LjU0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjg1LjU0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjI3LjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEwLjg3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5Xzg2NjA0OTM1OSIsICJ0aXRsZSI6ICLorqnmiJHkuIDmrKHniLHkuKrlpJ8gKyDlm6DkuLrniLHmiYDku6XniLEgKyDmiprku5nmuZYgKyDnrYnkvaDkuIvor74gKyDpnI3lhYPnlLIgKyDkuIfph4zplb/ln47msLjkuI3lgJIgKExpdmUpIiwgImR1cmF0aW9uIjogIjExOjUyIiwgImFydGlzdCI6ICLlur7mvoTluobjgIHlkajmnbDkvKbjgIHosKLpnIbplIvjgIHmnY7lgaUiLCAiYWxidW0iOiAiMjAxOOS4reWbveWlveWjsOmfsyDnrKwx5pyfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzR3Z2RpSjN0Y3hGQUpuSXhJdm1PblE9PS8xMDk5NTExNjM0MDk3NjUyNzYuanBnIn0=", "name": "让我一次爱个够 + 因为爱所以爱 + 抚仙湖 + 等你下课 + 霍元甲 + 万里长城永不倒 (Live)-庾澄庆、周杰伦、谢霆锋、李健", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YKj6Iux44CB5ZGo5p2w5Lym44CB5YiY5qyi44CB6ZmI5aWV6L+FIiwgIm5hbWUiOiAi5rKn5rW35LiA5aOw56yRIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNTc1NzA5MSIsICJzb25nbWlkIjogInd5XzQ5MDYwMjMyOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAyOjU3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuNzEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2Ljc4IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjEuNDggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjEuNDggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNi43OCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjcxIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ5MDYwMjMyOCIsICJ0aXRsZSI6ICLmsqfmtbfkuIDlo7DnrJEgKExpdmUpIiwgImR1cmF0aW9uIjogIjAyOjU3IiwgImFydGlzdCI6ICLpgqPoi7HjgIHlkajmnbDkvKbjgIHliJjmrKLjgIHpmYjlpZXov4UiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyJ9", "name": "沧海一声笑 (Live)-那英、周杰伦、刘欢、陈奕迅", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB6YKj6IuxIiwgIm5hbWUiOiAi5Zug5Li654ix5oOFIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNTc1NzA5MSIsICJzb25nbWlkIjogInd5XzQ5MDU5NTMxNSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjIyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuMDggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjcxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjEuMTQgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjEuMTQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy43MSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjA4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ5MDU5NTMxNSIsICJ0aXRsZSI6ICLlm6DkuLrniLHmg4UgKExpdmUpIiwgImR1cmF0aW9uIjogIjAzOjIyIiwgImFydGlzdCI6ICLlkajmnbDkvKbjgIHpgqPoi7EiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyJ9", "name": "因为爱情 (Live)-周杰伦、那英", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YKj6Iux44CB5rGq5bOw44CB5bq+5r6E5bqG44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5Y+q5pyJ5Li65L2gICsg5a6J6Z2ZICsg5LiN566h5pyJ5aSa6IumICsg5ruhICsg5oiR6KaB5aSP5aSpIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOwIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNDc4MzE5OSIsICJzb25nbWlkIjogInd5XzQyMTE2MDg4OCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjExOjIwIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvTGhONjE5bTVKbFotWV9nVUZrd0gxZz09LzMzOTQxOTI0MTA5NTkyNjMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMTAuMzkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyNS45NiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjc2LjEwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjc2LjEwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjI1Ljk2IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEwLjM5IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQyMTE2MDg4OCIsICJ0aXRsZSI6ICLlj6rmnInkuLrkvaAgKyDlronpnZkgKyDkuI3nrqHmnInlpJroi6YgKyDmu6EgKyDmiJHopoHlpI/lpKkgKExpdmUpIiwgImR1cmF0aW9uIjogIjExOjIwIiwgImFydGlzdCI6ICLpgqPoi7HjgIHmsarls7DjgIHlur7mvoTluobjgIHlkajmnbDkvKYiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOwIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvTGhONjE5bTVKbFotWV9nVUZrd0gxZz09LzMzOTQxOTI0MTA5NTkyNjMuanBnIn0=", "name": "只有为你 + 安静 + 不管有多苦 + 满 + 我要夏天 (Live)-那英、汪峰、庾澄庆、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5a6/5ra144CB5byg56We5YS/IiwgIm5hbWUiOiAi5bGL6aG2IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOOS4reWbveWlveWjsOmfsyDmvrPpl6jmvJTllLHkvJoiLCAiYWxidW1JZCI6ICI3Mzg3NjgxNiIsICJzb25nbWlkIjogInd5XzEzMTc0OTQ0MzQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNToxMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0Lzcyb1dqRjIzYkRiWDBaWFQweVVDdkE9PS8xMDk5NTExNjM2MDQ3MjQwNzcuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC43OCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjk0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzQuMTggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzQuMTggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuOTQgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC43OCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xMzE3NDk0NDM0IiwgInRpdGxlIjogIuWxi+mhtiAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDU6MTIiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgeWuv+a2teOAgeW8oOelnuWEvyIsICJhbGJ1bSI6ICIyMDE45Lit5Zu95aW95aOw6Z+zIOa+s+mXqOa8lOWUseS8miIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC83Mm9XakYyM2JEYlgwWlhUMHlVQ3ZBPT0vMTA5OTUxMTYzNjA0NzI0MDc3LmpwZyJ9", "name": "屋顶 (Live)-周杰伦、宿涵、张神儿", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5p2O56GV44CB5byg6ZGrIiwgIm5hbWUiOiAi5oOz5L2g5bCx5YaZ5L+hIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDEz5pyfIiwgImFsYnVtSWQiOiAiMzY0MTI2MzMiLCAic29uZ21pZCI6ICJ3eV81MDk3ODE2NTUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzo1OCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3lEOXZicHVJTEgtdHFOUklhUDY0MGc9PS8xMDk5NTExNjMwMzgyOTIxNzYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTEgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNi4xMyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyNi4xMyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI5LjExIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuNjQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTA5NzgxNjU1IiwgInRpdGxlIjogIuaDs+S9oOWwseWGmeS/oSAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDM6NTgiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgeadjuehleOAgeW8oOmRqyIsICJhbGJ1bSI6ICLkuK3lm73mlrDmrYzlo7DnrKzkuozlraMg56ysMTPmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveUQ5dmJwdUlMSC10cU5SSWFQNjQwZz09LzEwOTk1MTE2MzAzODI5MjE3Ni5qcGcifQ==", "name": "想你就写信 (Live)-周杰伦、李硕、张鑫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiYmVpdG9uZyIsICJuYW1lIjogImJlaXRvbmct6buYLemCo+iLse+8iHgwLjjvvInvvIhiZWl0b25nIHJlbWl477yJIiwgImFsYnVtTmFtZSI6ICLpq5jnuqfmhJ/mhaLpgJ8iLCAiYWxidW1JZCI6ICIxNDQ5ODE4NTAiLCAic29uZ21pZCI6ICJ3eV8xOTQ3NjIzMjIyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NDAiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9IYzZPVHdTdmVsdTNBR2pVcUVWbC1nPT0vMTA5OTUxMTY3NDE2MTA4Mjc0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC43MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjA4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjA4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjcyIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk0NzYyMzIyMiIsICJ0aXRsZSI6ICJiZWl0b25nLem7mC3pgqPoi7HvvIh4MC4477yJ77yIYmVpdG9uZyByZW1peO+8iSIsICJkdXJhdGlvbiI6ICIwNDo0MCIsICJhcnRpc3QiOiAiYmVpdG9uZyIsICJhbGJ1bSI6ICLpq5jnuqfmhJ/mhaLpgJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSGM2T1R3U3ZlbHUzQUdqVXFFVmwtZz09LzEwOTk1MTE2NzQxNjEwODI3NC5qcGcifQ==", "name": "beitong-默-那英(x0.8)(beitong remix)-beitong", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YiY54+CIiwgIm5hbWUiOiAi5Y+v54ix5aWz5Lq6IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5aW95aOw6Z+z5rex5Zyz5ryU5ZSx5LyaIiwgImFsYnVtSWQiOiAiODQ5MjM0NzUiLCAic29uZ21pZCI6ICJ3eV8xNDE2MDE1MDU3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MzEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC83OVJENXlTa2RYSHVXc2pZLTQtQ0dnPT0vMTA5OTUxMTY0NjE4ODYwNzIzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMzEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1Ljc4IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy4zNiBNQiJ9LCB7InR5cGUiOiAiZmxhYzI0Yml0IiwgInNpemUiOiAiMTQuMzIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMyNGJpdCI6IHsic2l6ZSI6ICIxNC4zMiBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICI3LjM2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUuNzggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi4zMSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xNDE2MDE1MDU3IiwgInRpdGxlIjogIuWPr+eIseWls+S6uiAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDI6MzEiLCAiYXJ0aXN0IjogIuWImOePgiIsICJhbGJ1bSI6ICLlpb3lo7Dpn7Pmt7HlnLPmvJTllLHkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvNzlSRDV5U2tkWEh1V3NqWS00LUNHZz09LzEwOTk1MTE2NDYxODg2MDcyMy5qcGcifQ==", "name": "可爱女人 (Live)-刘珂", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JGj5p2w5a6JIiwgIm5hbWUiOiAi54mb5LuU5b6I5b+ZIiwgImFsYnVtTmFtZSI6ICIj5oiR5piv6JGj5p2w5a6JIiwgImFsYnVtSWQiOiAiNzk1ODk1NTgiLCAic29uZ21pZCI6ICJ3eV8xMzY5NTc2MDU1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MzQiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9pa0xYNGlKR1oxVm81WW5yR3hmNzdRPT0vMTA5OTUxMTY0MTIyMjcyOTE3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMzYgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1LjkwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTkuMDYgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjMzLjIyIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiMzMuMjIgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMTkuMDYgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS45MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjM2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzEzNjk1NzYwNTUiLCAidGl0bGUiOiAi54mb5LuU5b6I5b+ZIiwgImR1cmF0aW9uIjogIjAyOjM0IiwgImFydGlzdCI6ICLokaPmnbDlrokiLCAiYWxidW0iOiAiI+aIkeaYr+iRo+adsOWuiSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9pa0xYNGlKR1oxVm81WW5yR3hmNzdRPT0vMTA5OTUxMTY0MTIyMjcyOTE3LmpwZyJ9", "name": "牛仔很忙-董杰安", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAia2V4aWwiLCAibmFtZSI6ICLpu5goSmF5MC44eCkiLCAiYWxidW1OYW1lIjogInNsb3ciLCAiYWxidW1JZCI6ICIxNDU3MjQwODciLCAic29uZ21pZCI6ICJ3eV8xOTU3MjU0NTk2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6NDciLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9xVGhwenNGc3R3UGRXTzRhVWs5MGF3PT0vMTA5OTUxMTY3NDkwMzc0NDI4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuNTUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2LjM4IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjYuMzggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi41NSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTU3MjU0NTk2IiwgInRpdGxlIjogIum7mChKYXkwLjh4KSIsICJkdXJhdGlvbiI6ICIwMjo0NyIsICJhcnRpc3QiOiAia2V4aWwiLCAiYWxidW0iOiAic2xvdyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9xVGhwenNGc3R3UGRXTzRhVWs5MGF3PT0vMTA5OTUxMTY3NDkwMzc0NDI4LmpwZyJ9", "name": "默(Jay0.8x)-kexil", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZizIiwgIm5hbWUiOiAiSmF5LeS4iemfs+WNs+WFtCIsICJhbGJ1bU5hbWUiOiAiSmF5IiwgImFsYnVtSWQiOiAiMTQ1NzcwMjg4IiwgInNvbmdtaWQiOiAid3lfMTk1MjEyNzA5NiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjU3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSktnSGQ0M0U5MmlLc0FGcXhQUTdEQT09LzEwOTk1MTE2NzUzOTkwMjQyOC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjc5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC40OCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI0LjQ4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNzkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1MjEyNzA5NiIsICJ0aXRsZSI6ICJKYXkt5LiJ6Z+z5Y2z5YW0IiwgImR1cmF0aW9uIjogIjAxOjU3IiwgImFydGlzdCI6ICLpmLMiLCAiYWxidW0iOiAiSmF5IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0pLZ0hkNDNFOTJpS3NBRnF4UFE3REE9PS8xMDk5NTExNjc1Mzk5MDI0MjguanBnIn0=", "name": "Jay-三音即兴-阳", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p6X5bOvIiwgIm5hbWUiOiAi6ZyN5YWD55SyKExpdmUpIiwgImFsYnVtTmFtZSI6ICLls6/vvI7mg4Xml6DpmZDmvJTllLHkvJpMZXQncyBHZXQgV2V0IExpdmUiLCAiYWxidW1JZCI6ICIxMTExNyIsICJzb25nbWlkIjogInd5XzExMzE2NyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjMyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvRXpZeS1sa3BYQXlxaW9sa3N3WXR3QT09LzEwOTk1MTE2NjcxMjIyMjQ5Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjI0IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOC4xMCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjIyLjkwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIyLjkwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguMTAgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy4yNCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xMTMxNjciLCAidGl0bGUiOiAi6ZyN5YWD55SyKExpdmUpIiwgImR1cmF0aW9uIjogIjAzOjMyIiwgImFydGlzdCI6ICLmnpfls68iLCAiYWxidW0iOiAi5bOv77yO5oOF5peg6ZmQ5ryU5ZSx5LyaTGV0J3MgR2V0IFdldCBMaXZlIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0V6WXktbGtwWEF5cWlvbGtzd1l0d0E9PS8xMDk5NTExNjY3MTIyMjI0OTYuanBnIn0=", "name": "霍元甲(Live)-林峯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImFsYnVtTmFtZSI6ICLniLHoiJ7ngqsg55ub6KOF6Iie5puy57K+6YCJIiwgImFsYnVtSWQiOiAiMzQ0MjkwOTEiLCAic29uZ21pZCI6ICJ3eV80MDAxNjI3MDMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo1NCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzZoaVYtM20taGRUTk9oOHBjbFpJRWc9PS8xMDk5NTExNjU5ODY3MzA4MzkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjI0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzMuMzAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzMuMzAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuMjQgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC41MCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV80MDAxNjI3MDMiLCAidGl0bGUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImR1cmF0aW9uIjogIjA0OjU0IiwgImFydGlzdCI6ICLolKHkvp3mnpfjgIHlkajmnbDkvKYiLCAiYWxidW0iOiAi54ix6Iie54KrIOebm+ijheiInuabsueyvumAiSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC82aGlWLTNtLWhkVE5PaDhwY2xaSUVnPT0vMTA5OTUxMTY1OTg2NzMwODM5LmpwZyJ9", "name": "布拉格广场-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5rW355uXIiwgImFsYnVtTmFtZSI6ICJKLVRvcOWGoOWGm+eyvumAiSIsICJhbGJ1bUlkIjogIjIxMzMwIiwgInNvbmdtaWQiOiAid3lfMjA5NzM1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9EcW1KUVFkcFcwamN0N3YtQzFrUXJ3PT0vMTA5OTUxMTY1NzA1NDk4ODkwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMwLjU1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMwLjU1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjUyIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjA5NzM1IiwgInRpdGxlIjogIua1t+eblyIsICJkdXJhdGlvbiI6ICIwNDozNSIsICJhcnRpc3QiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgImFsYnVtIjogIkotVG9w5Yag5Yab57K+6YCJIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0RxbUpRUWRwVzBqY3Q3di1DMWtRcnc9PS8xMDk5NTExNjU3MDU0OTg4OTAuanBnIn0=", "name": "海盗-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57qq6ZKn54CaIChCcnlhbiBDaGkpIiwgIm5hbWUiOiAi5aSc5puyICjpkqLnkLTniYgpIFvljp/llLE6IOWRqOadsOS8pl0iLCAiYWxidW1OYW1lIjogIumSoueQtOaUvuadvui9u+WQrCDmtYHooYzovbvpn7PkuZAg5Y2O6K+t57uP5YW4IiwgImFsYnVtSWQiOiAiMTQ0NjgxMzI4IiwgInNvbmdtaWQiOiAid3lfMTk0NTg5NTcyOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjUzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjU2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOC45MSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjExLjE3IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICIzMS4yMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjMxLjIwIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjExLjE3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguOTEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy41NiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTQ1ODk1NzI4IiwgInRpdGxlIjogIuWknOabsiAo6ZKi55C054mIKSBb5Y6f5ZSxOiDlkajmnbDkvKZdIiwgImR1cmF0aW9uIjogIjAzOjUzIiwgImFydGlzdCI6ICLnuqrpkqfngJogKEJyeWFuIENoaSkiLCAiYWxidW0iOiAi6ZKi55C05pS+5p2+6L275ZCsIOa1geihjOi9u+mfs+S5kCDljY7or63nu4/lhbgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGcifQ==", "name": "夜曲 (钢琴版) [原唱: 周杰伦]-纪钧瀚 (Bryan Chi)", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O546f44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5YiA6ams5pemIiwgImFsYnVtTmFtZSI6ICJQcm9taXNlIiwgImFsYnVtSWQiOiAiMjU0NzUiLCAic29uZ21pZCI6ICJ3eV8yNTUwMjAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoxMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2REZ0hEV2xKQUZ3a01OcmpiUUV4SUE9PS8xMDk5NTExNjU5NTk0NDY1OTYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi45MyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMzMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMi43NCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyMi43NCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjMzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuOTMgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjU1MDIwIiwgInRpdGxlIjogIuWIgOmprOaXpiIsICJkdXJhdGlvbiI6ICIwMzoxMiIsICJhcnRpc3QiOiAi5p2O546f44CB5ZGo5p2w5LymIiwgImFsYnVtIjogIlByb21pc2UiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZERnSERXbEpBRndrTU5yamJRRXhJQT09LzEwOTk1MTE2NTk1OTQ0NjU5Ni5qcGcifQ==", "name": "刀马旦-李玟、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57qq6ZKn54CaIChCcnlhbiBDaGkpIiwgIm5hbWUiOiAi56i76aaZICjpkqLnkLTniYgpIFvljp/llLE6IOWRqOadsOS8pl0iLCAiYWxidW1OYW1lIjogIumSoueQtOaUvuadvui9u+WQrCDmtYHooYzovbvpn7PkuZAg5Y2O6K+t57uP5YW4IiwgImFsYnVtSWQiOiAiMTQ0NjgxMzI4IiwgInNvbmdtaWQiOiAid3lfMTk0NTg5NTcyNSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjE2IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyLjk5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNy40OCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEwLjc2IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICIyNy40NSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjI3LjQ1IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjEwLjc2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjcuNDggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi45OSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTQ1ODk1NzI1IiwgInRpdGxlIjogIueou+mmmSAo6ZKi55C054mIKSBb5Y6f5ZSxOiDlkajmnbDkvKZdIiwgImR1cmF0aW9uIjogIjAzOjE2IiwgImFydGlzdCI6ICLnuqrpkqfngJogKEJyeWFuIENoaSkiLCAiYWxidW0iOiAi6ZKi55C05pS+5p2+6L275ZCsIOa1geihjOi9u+mfs+S5kCDljY7or63nu4/lhbgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGcifQ==", "name": "稻香 (钢琴版) [原唱: 周杰伦]-纪钧瀚 (Bryan Chi)", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iyc5ouJIiwgIm5hbWUiOiAi5pyA6ZW/55qE55S15b2xIiwgImFsYnVtTmFtZSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysOOacnyIsICJhbGJ1bUlkIjogIjI3ODY4NjciLCAic29uZ21pZCI6ICJ3eV8yODQyNzc3MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjE3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvbjlEMVJfekxfWGFLVzl6Zlc4czJ0QT09LzU5MjA4NzAxMTU3NTQyNjkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC44NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEyLjEyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjkuNTAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjkuNTAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTIuMTIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC44NSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yODQyNzc3MSIsICJ0aXRsZSI6ICLmnIDplb/nmoTnlLXlvbEiLCAiZHVyYXRpb24iOiAiMDU6MTciLCAiYXJ0aXN0IjogIuiMnOaLiSIsICJhbGJ1bSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysOOacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9uOUQxUl96TF9YYUtXOXpmVzhzMnRBPT0vNTkyMDg3MDExNTc1NDI2OS5qcGcifQ==", "name": "最长的电影-茜拉", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O546f44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5YiA6ams5pemIiwgImFsYnVtTmFtZSI6ICJZb3UgJiBJIOe7j+WFuOWFqOe6quW9lSBQYXJ0IElJIiwgImFsYnVtSWQiOiAiNzk4ODU1NjciLCAic29uZ21pZCI6ICJ3eV8xMzcyODQ3MTU2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MTIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9ReWIxT0JscjVjd0cxVGg2Wmh3Vlp3PT0vMTA5OTUxMTY1OTg2Njk3OTE4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuOTMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjMzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjIuNzQgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjIuNzQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy4zMyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzEzNzI4NDcxNTYiLCAidGl0bGUiOiAi5YiA6ams5pemIiwgImR1cmF0aW9uIjogIjAzOjEyIiwgImFydGlzdCI6ICLmnY7njp/jgIHlkajmnbDkvKYiLCAiYWxidW0iOiAiWW91ICYgSSDnu4/lhbjlhajnuqrlvZUgUGFydCBJSSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9ReWIxT0JscjVjd0cxVGg2Wmh3Vlp3PT0vMTA5OTUxMTY1OTg2Njk3OTE4LmpwZyJ9", "name": "刀马旦-李玟、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2o6bmk5p2+IiwgIm5hbWUiOiAi5Y+v54ix5aWz5Lq677yIcHJvZCBieSBSRVZJVkFMIE1VU0lD77yJIiwgImFsYnVtTmFtZSI6ICLlj6/niLHlpbPkuroiLCAiYWxidW1JZCI6ICIxNDEzODkxNDgiLCAic29uZ21pZCI6ICJ3eV8xOTI1OTM5NjQ5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MDUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9nWDBvSFYwaGxXb1RodW13NkJHby1BPT0vMTA5OTUxMTY3MTIxODIxMTE4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuODIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjA2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjEuOTAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjEuOTAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy4wNiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjgyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MjU5Mzk2NDkiLCAidGl0bGUiOiAi5Y+v54ix5aWz5Lq677yIcHJvZCBieSBSRVZJVkFMIE1VU0lD77yJIiwgImR1cmF0aW9uIjogIjAzOjA1IiwgImFydGlzdCI6ICLmnajpuaTmnb4iLCAiYWxidW0iOiAi5Y+v54ix5aWz5Lq6IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2dYMG9IVjBobFdvVGh1bXc2QkdvLUE9PS8xMDk5NTExNjcxMjE4MjExMTguanBnIn0=", "name": "可爱女人(prod by REVIVAL MUSIC)-杨鹤松", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O5oSP5ra1IiwgIm5hbWUiOiAi5LiA6LW36ZW/5aSn55qE57qm5a6aIiwgImFsYnVtTmFtZSI6ICLooYzmmKXmoaXkuIrmnIjlpoLpkqkiLCAiYWxidW1JZCI6ICIxNDU3OTk4MTQiLCAic29uZ21pZCI6ICJ3eV8xOTU2NDcwMDU0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC84b0d3NlRPUjNWb3BhUk5LM180VTZ3PT0vMTA5OTUxMTY3NDk3NDQ3ODc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI4NC4yOSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcxMC42NyBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI3MTAuNjcgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjg0LjI5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NTY0NzAwNTQiLCAidGl0bGUiOiAi5LiA6LW36ZW/5aSn55qE57qm5a6aIiwgImR1cmF0aW9uIjogIjAwOjE4IiwgImFydGlzdCI6ICLmnY7mhI/mtrUiLCAiYWxidW0iOiAi6KGM5pil5qGl5LiK5pyI5aaC6ZKpIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzhvR3c2VE9SM1ZvcGFSTkszXzRVNnc9PS8xMDk5NTExNjc0OTc0NDc4NzUuanBnIn0=", "name": "一起长大的约定-李意涵", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IqxIiwgIm5hbWUiOiAi6buY77yIeDAuOO+8iSIsICJhbGJ1bU5hbWUiOiAiU+KdpO+4j1IiLCAiYWxidW1JZCI6ICIxNDQ5ODIzNTQiLCAic29uZ21pZCI6ICJ3eV8xOTUyNTAxMjc5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6MTciLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9DWVRjbFptWXdrMlhYbDdfYTlUWThRPT0vMTA5OTUxMTY3ODIxMzEwOTM3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuMTkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyLjk3IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy40MCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjQwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjIuOTcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS4xOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTUyNTAxMjc5IiwgInRpdGxlIjogIum7mO+8iHgwLjjvvIkiLCAiZHVyYXRpb24iOiAiMDE6MTciLCAiYXJ0aXN0IjogIuiKsSIsICJhbGJ1bSI6ICJT4p2k77iPUiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9DWVRjbFptWXdrMlhYbDdfYTlUWThRPT0vMTA5OTUxMTY3ODIxMzEwOTM3LmpwZyJ9", "name": "默(x0.8)-花", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAibmFpdmVvdXMiLCAibmFtZSI6ICLor7Tkuoblho3op4Eo5Lyk5oSf5aWz5aOw54mIKSIsICJhbGJ1bU5hbWUiOiAi5b+D5Yqo5oC75piv5oWi5Y2K5ouNIiwgImFsYnVtSWQiOiAiMTI0OTkzNzQ2IiwgInNvbmdtaWQiOiAid3lfMTgzMTgwMzAxNSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjMyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMTNBX3NyY01lR1k3R2h0SHFZc2N6UT09LzEwOTk1MTE2OTUxMDMzMzQ5NC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1MDIuNDkgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxLjIzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNi4wOSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI2LjA5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEuMjMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNTAyLjQ5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4MzE4MDMwMTUiLCAidGl0bGUiOiAi6K+05LqG5YaN6KeBKOS8pOaEn+Wls+WjsOeJiCkiLCAiZHVyYXRpb24iOiAiMDA6MzIiLCAiYXJ0aXN0IjogIm5haXZlb3VzIiwgImFsYnVtIjogIuW/g+WKqOaAu+aYr+aFouWNiuaLjSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8xM0Ffc3JjTWVHWTdHaHRIcVlzY3pRPT0vMTA5OTUxMTY5NTEwMzMzNDk0LmpwZyJ9", "name": "说了再见(伤感女声版)-naiveous", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRWxldmVuIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLmsLjkuI3lpLHogZTnmoTniLEuIiwgImFsYnVtSWQiOiAiMTM0ODcwMjMwIiwgInNvbmdtaWQiOiAid3lfMTg4ODczNDc1NyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjA4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvTDQzZUU1SC10VDF3Wkw3Z2xqWUttUT09LzEwOTk1MTE2NjUyNDQ1MTEyNy5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjA0IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMi42MCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIyLjYwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuMDQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg4ODczNDc1NyIsICJ0aXRsZSI6ICLpu5giLCAiZHVyYXRpb24iOiAiMDE6MDgiLCAiYXJ0aXN0IjogIkVsZXZlbiIsICJhbGJ1bSI6ICLmsLjkuI3lpLHogZTnmoTniLEuIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0w0M2VFNUgtdFQxd1pMN2dsallLbVE9PS8xMDk5NTExNjY1MjQ0NTExMjcuanBnIn0=", "name": "默-Eleven", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5by55ZCJ5LuW55qEU29zbyIsICJuYW1lIjogIuaIkeiQveazqu+8iOe/u+iHqiDlkajogIHluIjvvIkiLCAiYWxidW1OYW1lIjogIuaKlumfs+S8tOWlj+WQiOmbhiIsICJhbGJ1bUlkIjogIjEyNTYxMzY2OCIsICJzb25nbWlkIjogInd5XzE4MzY2MDU3MTIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTowMSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1RvMVY2VmRxVGx1WXBod04tNE91X0E9PS8xMDk5NTExNjU4NjYyNDkxNzUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiOTYwLjA0IEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMi4zNCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYuMzUgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNi4zNSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIyLjM0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjk2MC4wNCBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODM2NjA1NzEyIiwgInRpdGxlIjogIuaIkeiQveazqu+8iOe/u+iHqiDlkajogIHluIjvvIkiLCAiZHVyYXRpb24iOiAiMDE6MDEiLCAiYXJ0aXN0IjogIuW8ueWQieS7lueahFNvc28iLCAiYWxidW0iOiAi5oqW6Z+z5Ly05aWP5ZCI6ZuGIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1RvMVY2VmRxVGx1WXBod04tNE91X0E9PS8xMDk5NTExNjU4NjYyNDkxNzUuanBnIn0=", "name": "我落泪(翻自 周老师)-弹吉他的Soso", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57qq6ZKn54CaIChCcnlhbiBDaGkpIiwgIm5hbWUiOiAi5pm05aSpICjpkqLnkLTniYgpIFvljp/llLE6IOWRqOadsOS8pl0iLCAiYWxidW1OYW1lIjogIumSoueQtOaUvuadvui9u+WQrCDmtYHooYzovbvpn7PkuZAg5Y2O6K+t57uP5YW4IiwgImFsYnVtSWQiOiAiMTQ0NjgxMzI4IiwgInNvbmdtaWQiOiAid3lfMTk0NTg5NDc4OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjU4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjYzIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS4wOCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEwLjc0IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICIzMS4xMiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjMxLjEyIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjEwLjc0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMDggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy42MyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTQ1ODk0Nzg5IiwgInRpdGxlIjogIuaZtOWkqSAo6ZKi55C054mIKSBb5Y6f5ZSxOiDlkajmnbDkvKZdIiwgImR1cmF0aW9uIjogIjAzOjU4IiwgImFydGlzdCI6ICLnuqrpkqfngJogKEJyeWFuIENoaSkiLCAiYWxidW0iOiAi6ZKi55C05pS+5p2+6L275ZCsIOa1geihjOi9u+mfs+S5kCDljY7or63nu4/lhbgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGcifQ==", "name": "晴天 (钢琴版) [原唱: 周杰伦]-纪钧瀚 (Bryan Chi)", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZizIiwgIm5hbWUiOiAi6buY77yIMC45eO+8iSIsICJhbGJ1bU5hbWUiOiAi4pmhIiwgImFsYnVtSWQiOiAiMTQ2MDE2MjMxIiwgInNvbmdtaWQiOiAid3lfMTk1MzMxODMxOSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjM1IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvRWZ6NUF4WHBDQ251aWMyYVdzeDVUUT09LzEwOTk1MTE2NzUzOTg5OTQxNy5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjQ2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMy42NSBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNDYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1MzMxODMxOSIsICJ0aXRsZSI6ICLpu5jvvIgwLjl477yJIiwgImR1cmF0aW9uIjogIjAxOjM1IiwgImFydGlzdCI6ICLpmLMiLCAiYWxidW0iOiAi4pmhIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0VmejVBeFhwQ0NudWljMmFXc3g1VFE9PS8xMDk5NTExNjc1Mzk4OTk0MTcuanBnIn0=", "name": "默(0.9x)-阳", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iqx5aSn5L6g44CBTGlueeeQs+WmriIsICJuYW1lIjogIuWRqOa4uCIsICJhbGJ1bU5hbWUiOiAi5ZGo5ri46K6wIiwgImFsYnVtSWQiOiAiODY1OTkwMTAiLCAic29uZ21pZCI6ICJ3eV8xNDMyNzQ3NzgxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC96ZUJuQlRBbjdwTktVanBlU0U3a1FnPT0vMTA5OTUxMTY0ODI0MDUwNDYyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMxLjA4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMxLjA4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTQzMjc0Nzc4MSIsICJ0aXRsZSI6ICLlkajmuLgiLCAiZHVyYXRpb24iOiAiMDQ6NTIiLCAiYXJ0aXN0IjogIuiKseWkp+S+oOOAgUxpbnnnkLPlpq4iLCAiYWxidW0iOiAi5ZGo5ri46K6wIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3plQm5CVEFuN3BOS1VqcGVTRTdrUWc9PS8xMDk5NTExNjQ4MjQwNTA0NjIuanBnIn0=", "name": "周游-花大侠、Liny琳妮", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5oiR5Lus5YiG5byAIOacrOadpeWwseS4jeW6lOivpSIsICJhbGJ1bU5hbWUiOiAi5pei54S255WZ5LiN5L2P6YKj5bCx5b6X5pS+5LiLIiwgImFsYnVtSWQiOiAiMTM4OTQwNTQyIiwgInNvbmdtaWQiOiAid3lfMTkxNDE0MjExOSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3pHSGNhZGt2eFZTWW5GV3ZYMDN3Zz09LzEwOTk1MTE2NjkzNzkxMzkyMi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNTMuOTIgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4ODQuNzQgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjM3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMzcgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiODg0Ljc0IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM1My45MiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTE0MTQyMTE5IiwgInRpdGxlIjogIuaIkeS7rOWIhuW8gCDmnKzmnaXlsLHkuI3lupTor6UiLCAiZHVyYXRpb24iOiAiMDA6MjIiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3pHSGNhZGt2eFZTWW5GV3ZYMDN3Zz09LzEwOTk1MTE2NjkzNzkxMzkyMi5qcGcifQ==", "name": "我们分开 本来就不应该-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IOh5qCL5qCLIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLmipbpn7Pnv7vllLHlkIjpm4YiLCAiYWxidW1JZCI6ICI5MTg5NDE3NyIsICJzb25nbWlkIjogInd5XzE0NjM0NTE4ODciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoxMyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1ZxVjVRU1dIQ244Y1ZmcEpDUDZydUE9PS8xMDk5NTExNjUxMTA4MTQ0NDAuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMjA5LjAyIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNTIyLjQ5IEtCIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMS42MCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxLjYwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUyMi40OSBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMDkuMDIgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTQ2MzQ1MTg4NyIsICJ0aXRsZSI6ICLpu5giLCAiZHVyYXRpb24iOiAiMDA6MTMiLCAiYXJ0aXN0IjogIuiDoeagi+agiyIsICJhbGJ1bSI6ICLmipbpn7Pnv7vllLHlkIjpm4YiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvVnFWNVFTV0hDbjhjVmZwSkNQNnJ1QT09LzEwOTk1MTE2NTExMDgxNDQ0MC5qcGcifQ==", "name": "默-胡栋栋", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5LiA55u05LiO5oiR5bm26IKp6ICM6KGMIiwgImFsYnVtTmFtZSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAiYWxidW1JZCI6ICIxMzg5NDA1NDIiLCAic29uZ21pZCI6ICJ3eV8xOTEyNDM5MTUwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTkiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9TekdIY2Fka3Z4VlNZbkZXdlgwM3dnPT0vMTA5OTUxMTY2OTM3OTEzOTIyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMwMi40OSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjc1Ni4xNyBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEuODMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMS44MyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3NTYuMTcgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMzAyLjQ5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MTI0MzkxNTAiLCAidGl0bGUiOiAi5LiA55u05LiO5oiR5bm26IKp6ICM6KGMIiwgImR1cmF0aW9uIjogIjAwOjE5IiwgImFydGlzdCI6ICLoh7PmraTpl7QiLCAiYWxidW0iOiAi5pei54S255WZ5LiN5L2P6YKj5bCx5b6X5pS+5LiLIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1N6R0hjYWRrdnhWU1luRld2WDAzd2c9PS8xMDk5NTExNjY5Mzc5MTM5MjIuanBnIn0=", "name": "一直与我并肩而行-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRG9scGhpbsKwIiwgIm5hbWUiOiAi5pep5a6JIiwgImFsYnVtTmFtZSI6ICLlkajmnbDkurvku5EiLCAiYWxidW1JZCI6ICIxNDA2MjgyMjYiLCAic29uZ21pZCI6ICJ3eV8xOTIxNTgwOTcxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9qNEJQNUVFWC1WVEZnT0NnVG50blJBPT0vMTA5OTUxMTY3MDY2MTQ1NTc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjE3Ny4xOSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjQ0Mi45MCBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI0NDIuOTAgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMTc3LjE5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MjE1ODA5NzEiLCAidGl0bGUiOiAi5pep5a6JIiwgImR1cmF0aW9uIjogIjAwOjExIiwgImFydGlzdCI6ICJEb2xwaGluwrAiLCAiYWxidW0iOiAi5ZGo5p2w5Lq75LuRIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2o0QlA1RUVYLVZURmdPQ2dUbnRuUkE9PS8xMDk5NTExNjcwNjYxNDU1NzUuanBnIn0=", "name": "早安-Dolphin°", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5Yir5oOz5aSq5aSaIOiwgemZquWcqOS9oOi6q+i+ueS9oOWwseWlveWlveaEm+iwgSIsICJhbGJ1bU5hbWUiOiAi5rKh5pyJ5LuA5LmI5piv5a6M576O77yM5oC75Lya5pyJ56OV56OV57uK57uKIiwgImFsYnVtSWQiOiAiMTM4MTYzOTkzIiwgInNvbmdtaWQiOiAid3lfMTkwODA2NjUxNCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE0IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMzIuNzAgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1ODEuNjggS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI4NjAuNTYgS0IifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiODYwLjU2IEtCIn0sICIzMjBrIjogeyJzaXplIjogIjU4MS42OCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMzIuNzAgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkwODA2NjUxNCIsICJ0aXRsZSI6ICLliKvmg7PlpKrlpJog6LCB6Zmq5Zyo5L2g6Lqr6L655L2g5bCx5aW95aW95oSb6LCBIiwgImR1cmF0aW9uIjogIjAwOjE0IiwgImFydGlzdCI6ICLoh7PmraTpl7QiLCAiYWxidW0iOiAi5rKh5pyJ5LuA5LmI5piv5a6M576O77yM5oC75Lya5pyJ56OV56OV57uK57uKIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0d3bWdUaGJKY0d4RjNsS3VuS3BzY0E9PS8xMDk5NTExNjY4NjgyNzQ3MTEuanBnIn0=", "name": "别想太多 谁陪在你身边你就好好愛谁-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRy5FLk0u6YKT57Sr5qOLIiwgIm5hbWUiOiAi6b6Z5Y236aOOIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5oiR5piv5q2M5omL56ys5LqM5a2jIOesrDnmnJ8iLCAiYWxidW1JZCI6ICIyNzg2ODY4IiwgInNvbmdtaWQiOiAid3lfMjg0Mjc3NzUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDozMSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2RLNnR3dUZZS0tCZGUxckRtRFZiUFE9PS81OTgxMzQzMjU1MjYxNDQ5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMTUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC4zNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5LjU2IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI5LjU2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjM3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMTUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjg0Mjc3NzUiLCAidGl0bGUiOiAi6b6Z5Y236aOOIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDozMSIsICJhcnRpc3QiOiAiRy5FLk0u6YKT57Sr5qOLIiwgImFsYnVtIjogIuaIkeaYr+atjOaJi+esrOS6jOWtoyDnrKw55pyfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2RLNnR3dUZZS0tCZGUxckRtRFZiUFE9PS81OTgxMzQzMjU1MjYxNDQ5LmpwZyJ9", "name": "龙卷风 (Live)-G.E.M.邓紫棋", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi54ix5rKh5pyJ5pa55ZCRIOS9oOWcqOWTquWEvyDniLHlsLHlnKjlk6oiLCAiYWxidW1OYW1lIjogIuayoeacieS7gOS5iOaYr+WujOe+ju+8jOaAu+S8muacieejleejlee7iue7iiIsICJhbGJ1bUlkIjogIjEzODE2Mzk5MyIsICJzb25nbWlkIjogInd5XzE5MDgwODA2NjgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoyMyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0d3bWdUaGJKY0d4RjNsS3VuS3BzY0E9PS8xMDk5NTExNjY4NjgyNzQ3MTEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMzY1Ljc2IEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOTE0LjMzIEtCIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMS4yNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxLjI1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkxNC4zMyBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzNjUuNzYgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkwODA4MDY2OCIsICJ0aXRsZSI6ICLniLHmsqHmnInmlrnlkJEg5L2g5Zyo5ZOq5YS/IOeIseWwseWcqOWTqiIsICJkdXJhdGlvbiI6ICIwMDoyMyIsICJhcnRpc3QiOiAi6Iez5q2k6Ze0IiwgImFsYnVtIjogIuayoeacieS7gOS5iOaYr+WujOe+ju+8jOaAu+S8muacieejleejlee7iue7iiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyJ9", "name": "爱没有方向 你在哪儿 爱就在哪-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5rSL5qGU5qKXIiwgIm5hbWUiOiAi6buY77yIY2ljaV/niYjvvIkiLCAiYWxidW1OYW1lIjogIuKCiiDigbrimIHvuI/igoog4oG6IiwgImFsYnVtSWQiOiAiMTQxMTAwNzMyIiwgInNvbmdtaWQiOiAid3lfMTkyNTEyMzU0NSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveWFWMTVWenp2TnNjWS1wNFVxbks0dz09LzEwOTk1MTE2NzEwMjM4MTQwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNjQuNTQgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5MTEuMjkgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjQxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuNDEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOTExLjI5IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM2NC41NCBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTI1MTIzNTQ1IiwgInRpdGxlIjogIum7mO+8iGNpY2lf54mI77yJIiwgImR1cmF0aW9uIjogIjAwOjIzIiwgImFydGlzdCI6ICLmtIvmoZTmopciLCAiYWxidW0iOiAi4oKKIOKBuuKYge+4j+KCiiDigboiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveWFWMTVWenp2TnNjWS1wNFVxbks0dz09LzEwOTk1MTE2NzEwMjM4MTQwMS5qcGcifQ==", "name": "默(cici_版)-洋桔梗", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IuP5Lqm5rSLTXVzaWMiLCAibmFtZSI6ICLniLHmiJHlt7Lnu4/liIbkuI3muIUiLCAiYWxidW1OYW1lIjogIuWPpeWPpeaXoOS9oCDlj6Xlj6XlhpnkvaAuIiwgImFsYnVtSWQiOiAiOTU3NTUzMzAiLCAic29uZ21pZCI6ICJ3eV8xNDgyMjgzNjY5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9jbkgzOERKRElaV2ZuQmxkRk8xdEt3PT0vMTA5OTUxMTY1NzMxNjMzNTY5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI0My40MiBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjYwOC40OCBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI2MDguNDggS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjQzLjQyIEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0ODIyODM2NjkiLCAidGl0bGUiOiAi54ix5oiR5bey57uP5YiG5LiN5riFIiwgImR1cmF0aW9uIjogIjAwOjE1IiwgImFydGlzdCI6ICLoi4/kuqbmtItNdXNpYyIsICJhbGJ1bSI6ICLlj6Xlj6Xml6DkvaAg5Y+l5Y+l5YaZ5L2gLiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9jbkgzOERKRElaV2ZuQmxkRk8xdEt3PT0vMTA5OTUxMTY1NzMxNjMzNTY5LmpwZyJ9", "name": "爱我已经分不清-苏亦洋Music", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5rKh5pyJ5LuA5LmI5a6M576OIOaAu+S8muacieejleejlee7iue7iiIsICJhbGJ1bU5hbWUiOiAi5rKh5pyJ5LuA5LmI5piv5a6M576O77yM5oC75Lya5pyJ56OV56OV57uK57uKIiwgImFsYnVtSWQiOiAiMTM4MTYzOTkzIiwgInNvbmdtaWQiOiAid3lfMTkwODA2NzE1NSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNjkuMDIgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5MjIuNDkgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxLjkxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEuOTEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOTIyLjQ5IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM2OS4wMiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTA4MDY3MTU1IiwgInRpdGxlIjogIuayoeacieS7gOS5iOWujOe+jiDmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAiZHVyYXRpb24iOiAiMDA6MjMiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGcifQ==", "name": "没有什么完美 总会有磕磕绊绊-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YOt6Z2Z6ZuvIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLotbfpo47kuoYiLCAiYWxidW1JZCI6ICIxMzQwMzgyNTIiLCAic29uZ21pZCI6ICJ3eV8xODgyNzcwNTc4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6MDgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9uRlY3QmVmb0lrSzBBYkYxYl9jcWlnPT0vMTA5OTUxMTY2NDcwMTU4NDQ1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuMDQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyLjYxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy45MiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjkyIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjIuNjEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS4wNCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODgyNzcwNTc4IiwgInRpdGxlIjogIum7mCIsICJkdXJhdGlvbiI6ICIwMTowOCIsICJhcnRpc3QiOiAi6YOt6Z2Z6ZuvIiwgImFsYnVtIjogIui1t+mjjuS6hiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9uRlY3QmVmb0lrSzBBYkYxYl9jcWlnPT0vMTA5OTUxMTY2NDcwMTU4NDQ1LmpwZyJ9", "name": "默-郭静雯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5rKh5Lq65Lya562J5L2g5b6I5LmFIiwgImFsYnVtTmFtZSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAiYWxidW1JZCI6ICIxMzgxNjM5OTMiLCAic29uZ21pZCI6ICJ3eV8xOTA5NDIxNTk0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MjEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMzMC4yNSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjgyNS41NSBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjkwNC44MSBLQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI5MDQuODEgS0IifSwgIjMyMGsiOiB7InNpemUiOiAiODI1LjU1IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjMzMC4yNSBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTA5NDIxNTk0IiwgInRpdGxlIjogIuayoeS6uuS8muetieS9oOW+iOS5hSIsICJkdXJhdGlvbiI6ICIwMDoyMSIsICJhcnRpc3QiOiAi6Iez5q2k6Ze0IiwgImFsYnVtIjogIuayoeacieS7gOS5iOaYr+WujOe+ju+8jOaAu+S8muacieejleejlee7iue7iiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyJ9", "name": "没人会等你很久-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5bm45aW95oCd5b+15peg5aOwIiwgImFsYnVtTmFtZSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAiYWxidW1JZCI6ICIxMzg5NDA1NDIiLCAic29uZ21pZCI6ICJ3eV8xOTE2ODU5NDc5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6NDUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9TekdIY2Fka3Z4VlNZbkZXdlgwM3dnPT0vMTA5OTUxMTY2OTM3OTEzOTIyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjcxNS41NSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuNzUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI1LjU1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjUuNTUgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS43NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI3MTUuNTUgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkxNjg1OTQ3OSIsICJ0aXRsZSI6ICLlubjlpb3mgJ3lv7Xml6Dlo7AiLCAiZHVyYXRpb24iOiAiMDA6NDUiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3pHSGNhZGt2eFZTWW5GV3ZYMDN3Zz09LzEwOTk1MTE2NjkzNzkxMzkyMi5qcGcifQ==", "name": "幸好思念无声-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi576k5pifIiwgIm5hbWUiOiAi6b6Z5Y236aOOIiwgImFsYnVtTmFtZSI6ICLmtYHmmJ8u5Y+M5aa5LuWUmyIsICJhbGJ1bUlkIjogIjUxMjk1NyIsICJzb25nbWlkIjogInd5XzUyNzAzMDIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoyNCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0Lzk5WkFMVDBMYjV3UE1IN0oxZTU5S1E9PS81NTc0NTIzOTUyOTQ0MTIuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4xMiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuODAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMy4wMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMy4wMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjgwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuMTIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI3MDMwMiIsICJ0aXRsZSI6ICLpvpnljbfpo44iLCAiZHVyYXRpb24iOiAiMDM6MjQiLCAiYXJ0aXN0IjogIue+pOaYnyIsICJhbGJ1bSI6ICLmtYHmmJ8u5Y+M5aa5LuWUmyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC85OVpBTFQwTGI1d1BNSDdKMWU1OUtRPT0vNTU3NDUyMzk1Mjk0NDEyLmpwZyJ9", "name": "龙卷风-群星", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5LiN5piv5omA5pyJ55qE55u46YGH6YO95Lya5pyJ57uT5p6cIiwgImFsYnVtTmFtZSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAiYWxidW1JZCI6ICIxMzgxNjM5OTMiLCAic29uZ21pZCI6ICJ3eV8xOTA4MzA0MzE1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MjYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQyMC44NiBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuMDMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjY3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuNjcgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS4wMyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0MjAuODYgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkwODMwNDMxNSIsICJ0aXRsZSI6ICLkuI3mmK/miYDmnInnmoTnm7jpgYfpg73kvJrmnInnu5PmnpwiLCAiZHVyYXRpb24iOiAiMDA6MjYiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGcifQ==", "name": "不是所有的相遇都会有结果-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRmx1b3hldGluZSIsICJuYW1lIjogIueypOivrSAj6Z2R6Iqx55O3ICPlvLnllLEg6Iqs6IqsIiwgImFsYnVtTmFtZSI6ICLlm54g5b+GIiwgImFsYnVtSWQiOiAiMTQxMzY3MzkwIiwgInNvbmdtaWQiOiAid3lfMTkyNzM2ODUwMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZlNORjVuY2dTa2ZoY1dybDRmLWNhQT09LzEwOTk1MTE2NzExODY3MTY0Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyNjguNTQgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2NzEuMjkgS0IifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiNjcxLjI5IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjI2OC41NCBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTI3MzY4NTAwIiwgInRpdGxlIjogIueypOivrSAj6Z2R6Iqx55O3ICPlvLnllLEg6Iqs6IqsIiwgImR1cmF0aW9uIjogIjAwOjE3IiwgImFydGlzdCI6ICJGbHVveGV0aW5lIiwgImFsYnVtIjogIuWbniDlv4YiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZlNORjVuY2dTa2ZoY1dybDRmLWNhQT09LzEwOTk1MTE2NzExODY3MTY0Ni5qcGcifQ==", "name": "粤语 #靑花瓷 #弹唱 芬芬-Fluoxetine", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTGVvLiIsICJuYW1lIjogIueugOW8mOS6pi3pu5jvvIhMZW8uIHJlbWl477yJIiwgImFsYnVtTmFtZSI6ICJMJ2Ftb3VyLiIsICJhbGJ1bUlkIjogIjE0MDM0MjQ4MyIsICJzb25nbWlkIjogInd5XzE5MjIwMDU3NTUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDo1MCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0tnZnp3bXNMbER5RW5mS3BOdkQtbnc9PS8xMDk5NTExNjcwNDYzNjU2NzEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNzkwLjkyIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMS45MyBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIxLjkzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjc5MC45MiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTIyMDA1NzU1IiwgInRpdGxlIjogIueugOW8mOS6pi3pu5jvvIhMZW8uIHJlbWl477yJIiwgImR1cmF0aW9uIjogIjAwOjUwIiwgImFydGlzdCI6ICJMZW8uIiwgImFsYnVtIjogIkwnYW1vdXIuIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0tnZnp3bXNMbER5RW5mS3BOdkQtbnc9PS8xMDk5NTExNjcwNDYzNjU2NzEuanBnIn0=", "name": "简弘亦-默(Leo. remix)-Leo.", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImFsYnVtTmFtZSI6ICLlt6jmmJ/ph5Hmm7It5ZCI5ZSx56+HIiwgImFsYnVtSWQiOiAiMzAxNzI5OCIsICJzb25nbWlkIjogInd5XzI5MzkzNjQxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTMiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9UbEZBSjBieFZKVlp5VzlVTV81U2lRPT0vMTA5OTUxMTY2OTI2NjkyMzI0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4yMSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjU3Ljc2IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjU3Ljc2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjIxIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjkzOTM2NDEiLCAidGl0bGUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImR1cmF0aW9uIjogIjA0OjUzIiwgImFydGlzdCI6ICLolKHkvp3mnpfjgIHlkajmnbDkvKYiLCAiYWxidW0iOiAi5beo5pif6YeR5puyLeWQiOWUseevhyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9UbEZBSjBieFZKVlp5VzlVTV81U2lRPT0vMTA5OTUxMTY2OTI2NjkyMzI0LmpwZyJ9", "name": "布拉格广场-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTWljaGFlbCBUYWkiLCAibmFtZSI6ICLlsI/pm6jlr6vnq4vlj6/nmb0gSSB8IFhpYW8gWXUncyBUaGVtZSBJIChmcm9tIFwiU2VjcmV0XCIpIiwgImFsYnVtTmFtZSI6ICLkuI3og73oqqrnmoTnp5jlr4YgXCJTZWNyZXRcIiAmIFBvcCAtIFBpYW5vIENvbGxlY3Rpb24iLCAiYWxidW1JZCI6ICI4Nzg5MDU2MyIsICJzb25nbWlkIjogInd5XzE0Mzk3NDEwODQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjoyMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4xOCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuNDUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI2LjM1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYuMzUgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS40NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjE4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0Mzk3NDEwODQiLCAidGl0bGUiOiAi5bCP6Zuo5a+r56uL5Y+v55m9IEkgfCBYaWFvIFl1J3MgVGhlbWUgSSAoZnJvbSBcIlNlY3JldFwiKSIsICJkdXJhdGlvbiI6ICIwMjoyMiIsICJhcnRpc3QiOiAiTWljaGFlbCBUYWkiLCAiYWxidW0iOiAi5LiN6IO96Kqq55qE56eY5a+GIFwiU2VjcmV0XCIgJiBQb3AgLSBQaWFubyBDb2xsZWN0aW9uIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIn0=", "name": "小雨寫立可白 I | Xiao Yu\'s Theme I (from \\"Secret\\")-Michael Tai", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTWljaGFlbCBUYWkiLCAibmFtZSI6ICLot6/lsI/pm6ggfCBMdSBYaWFvIFl1IChmcm9tIFwiU2VjcmV0XCIpIiwgImFsYnVtTmFtZSI6ICLkuI3og73oqqrnmoTnp5jlr4YgXCJTZWNyZXRcIiAmIFBvcCAtIFBpYW5vIENvbGxlY3Rpb24iLCAiYWxidW1JZCI6ICI4Nzg5MDU2MyIsICJzb25nbWlkIjogInd5XzE0Mzk3MzkxMDIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzowNSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi44NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMDkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI5LjE5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjkuMTkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy4wOSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjg0IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0Mzk3MzkxMDIiLCAidGl0bGUiOiAi6Lev5bCP6ZuoIHwgTHUgWGlhbyBZdSAoZnJvbSBcIlNlY3JldFwiKSIsICJkdXJhdGlvbiI6ICIwMzowNSIsICJhcnRpc3QiOiAiTWljaGFlbCBUYWkiLCAiYWxidW0iOiAi5LiN6IO96Kqq55qE56eY5a+GIFwiU2VjcmV0XCIgJiBQb3AgLSBQaWFubyBDb2xsZWN0aW9uIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIn0=", "name": "路小雨 | Lu Xiao Yu (from \\"Secret\\")-Michael Tai", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5rGf576O55CqIiwgIm5hbWUiOiAi5pif5pm0IiwgImFsYnVtTmFtZSI6ICLnvo7kuZDlnLAiLCAiYWxidW1JZCI6ICIyNDgwNCIsICJzb25nbWlkIjogInd5XzI0NzU4MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjE5IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvdUZXT09HSzJIaVJsZHR4eG1sSXBDUT09LzEwOTk1MTE2NjU2MjgzOTcyNi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjk2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS45MSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI4LjE4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI4LjE4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuOTEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45NiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNDc1ODEiLCAidGl0bGUiOiAi5pif5pm0IiwgImR1cmF0aW9uIjogIjA0OjE5IiwgImFydGlzdCI6ICLmsZ/nvo7nkKoiLCAiYWxidW0iOiAi576O5LmQ5ZywIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3VGV09PR0sySGlSbGR0eHhtbElwQ1E9PS8xMDk5NTExNjY1NjI4Mzk3MjYuanBnIn0=", "name": "星晴-江美琪", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iqx5aSn5L6gIiwgIm5hbWUiOiAi5piG5Lym5bGxIiwgImFsYnVtTmFtZSI6ICLmmIbkvKblsbEiLCAiYWxidW1JZCI6ICI4MzgxMjczMyIsICJzb25nbWlkIjogInd5XzE0MDcyMjI3NTUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMToyMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3RBYlFxckJveHA0d05kOGpSTlZ5cGc9PS8xMDk5NTExNjQ1MjQ0MDQ5OTUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS4yNiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjMuMTUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI3LjE1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjcuMTUgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMy4xNSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjI2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0MDcyMjI3NTUiLCAidGl0bGUiOiAi5piG5Lym5bGxIiwgImR1cmF0aW9uIjogIjAxOjIyIiwgImFydGlzdCI6ICLoirHlpKfkvqAiLCAiYWxidW0iOiAi5piG5Lym5bGxIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3RBYlFxckJveHA0d05kOGpSTlZ5cGc9PS8xMDk5NTExNjQ1MjQ0MDQ5OTUuanBnIn0=", "name": "昆伦山-花大侠", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAia2luZ+mHkemRqyIsICJuYW1lIjogIuWkj+WkqeeahOmjji1raW5n6YeR6ZGr5pS557yW54mIIiwgImFsYnVtTmFtZSI6ICLlpI/lpKnnmoTpo47vvIhraW5n6YeR6ZGr5pS557yW54mI77yJIiwgImFsYnVtSWQiOiAiMTI2OTQxNzYyIiwgInNvbmdtaWQiOiAid3lfMTg0MjU2MTM0OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjE5IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvc0VCb05neU5KeUJFcHBaR0RuT09yQT09LzEwOTk1MTE2NTk1MTYzNTE4MC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjk3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS45MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjUwLjM4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjUwLjM4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuOTIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODQyNTYxMzQ5IiwgInRpdGxlIjogIuWkj+WkqeeahOmjji1raW5n6YeR6ZGr5pS557yW54mIIiwgImR1cmF0aW9uIjogIjA0OjE5IiwgImFydGlzdCI6ICJraW5n6YeR6ZGrIiwgImFsYnVtIjogIuWkj+WkqeeahOmjju+8iGtpbmfph5HpkavmlLnnvJbniYjvvIkiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvc0VCb05neU5KeUJFcHBaR0RuT09yQT09LzEwOTk1MTE2NTk1MTYzNTE4MC5qcGcifQ==", "name": "夏天的风-king金鑫改编版-king金鑫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5pq06LqB6Zi/6I+cIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLpu5giLCAiYWxidW1JZCI6ICIxMzU1ODE0MDYiLCAic29uZ21pZCI6ICJ3eV8xODkxNzQzNTYwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MTIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9RMXhSWW04cnF5dHFra0JrYWNkaHF3PT0vMTA5OTUxMTY2NTgxNTE0MDU1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMDIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1LjA0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjIuMjMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjIuMjMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS4wNCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjAyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4OTE3NDM1NjAiLCAidGl0bGUiOiAi6buYIiwgImR1cmF0aW9uIjogIjAyOjEyIiwgImFydGlzdCI6ICLmmrTouoHpmL/oj5wiLCAiYWxidW0iOiAi6buYIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1ExeFJZbThycXl0cWtrQmthY2RocXc9PS8xMDk5NTExNjY1ODE1MTQwNTUuanBnIn0=", "name": "默-暴躁阿菜", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YyX562xIiwgIm5hbWUiOiAi6Zuo5reL5rm/5LqG5aSp56m6KERK54mIKSIsICJhbGJ1bU5hbWUiOiAiRGEgRGEgRGEiLCAiYWxidW1JZCI6ICIxMjU4MTIxMzciLCAic29uZ21pZCI6ICJ3eV8xODM2MTEzNjg4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MTkiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC92S1JfNmxaNFNEaUZNR3YxeG11bkdBPT0vMTA5OTUxMTY1ODc2MzE2Mjg3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMTQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1LjM0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjMuNzEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjMuNzEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS4zNCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjE0IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4MzYxMTM2ODgiLCAidGl0bGUiOiAi6Zuo5reL5rm/5LqG5aSp56m6KERK54mIKSIsICJkdXJhdGlvbiI6ICIwMjoxOSIsICJhcnRpc3QiOiAi5YyX562xIiwgImFsYnVtIjogIkRhIERhIERhIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3ZLUl82bFo0U0RpRk1HdjF4bXVuR0E9PS8xMDk5NTExNjU4NzYzMTYyODcuanBnIn0=", "name": "雨淋湿了天空(DJ版)-北筱", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi56ev6Zuo5LqRMTk5OOOAgVZpY3RvcuKYhuOAgeW/jeaEm+S5i+WKjeOAgVJlYTFjIiwgIm5hbWUiOiAi5ZGo5p2w5LymXFxKYXkgY2hvdSIsICJhbGJ1bU5hbWUiOiAi5L6d5pen6IyD54m56KW/IiwgImFsYnVtSWQiOiAiMTM5MDI3ODUzIiwgInNvbmdtaWQiOiAid3lfMTkxMjk3NTg3OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjI3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvdEJ0M3BZNUF6Y01tY2tIVXRTWGtXdz09LzEwOTk1MTE2Njk0ODExMDI3OC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjE3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNy45MyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjIyLjE3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIyLjE3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjcuOTMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy4xNyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTEyOTc1ODc5IiwgInRpdGxlIjogIuWRqOadsOS8plxcSmF5IGNob3UiLCAiZHVyYXRpb24iOiAiMDM6MjciLCAiYXJ0aXN0IjogIuenr+mbqOS6kTE5OTjjgIFWaWN0b3LimIbjgIHlv43mhJvkuYvlio3jgIFSZWExYyIsICJhbGJ1bSI6ICLkvp3ml6fojIPnibnopb8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvdEJ0M3BZNUF6Y01tY2tIVXRTWGtXdz09LzEwOTk1MTE2Njk0ODExMDI3OC5qcGcifQ==", "name": "周杰伦\\\\Jay chou-积雨云1998、Victor☆、忍愛之劍、Rea1c", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiWGxpbmMiLCAibmFtZSI6ICLkuIvpm6jlpKkiLCAiYWxidW1OYW1lIjogIuaXoOS4juS8puavlCIsICJhbGJ1bUlkIjogIjEzOTgwNDIxNiIsICJzb25nbWlkIjogInd5XzE5MTcxNjA3NzEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDoxNCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0FkQzRLUy1sUjdnVkZJVzJBQmE1TXc9PS8xMDk5NTExNjcwMTg0Njc0OTIuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy44OCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMC45OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMC45OCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI5LjY5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuODggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkxNzE2MDc3MSIsICJ0aXRsZSI6ICLkuIvpm6jlpKkiLCAiZHVyYXRpb24iOiAiMDQ6MTQiLCAiYXJ0aXN0IjogIlhsaW5jIiwgImFsYnVtIjogIuaXoOS4juS8puavlCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9BZEM0S1MtbFI3Z1ZGSVcyQUJhNU13PT0vMTA5OTUxMTY3MDE4NDY3NDkyLmpwZyJ9", "name": "下雨天-Xlinc", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5rS75Zyo5qKmIiwgIm5hbWUiOiAi54yc5q2M5ZCNNCIsICJhbGJ1bU5hbWUiOiAi54yc5q2M5ZCN57O75YiXIiwgImFsYnVtSWQiOiAiMTM1Njg5OTE3IiwgInNvbmdtaWQiOiAid3lfMTg5MjM1Nzk5OCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjEyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMV9mZEIwM3pIbUtzOHdyUXBVNGpWdz09LzEwOTk1MTE2NjU4NzE2OTA2OS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxODguNjcgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI0NzEuNjEgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjEwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMTAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNDcxLjYxIEtCIn0sICIxMjhrIjogeyJzaXplIjogIjE4OC42NyBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODkyMzU3OTk4IiwgInRpdGxlIjogIueMnOatjOWQjTQiLCAiZHVyYXRpb24iOiAiMDA6MTIiLCAiYXJ0aXN0IjogIua0u+WcqOaipiIsICJhbGJ1bSI6ICLnjJzmrYzlkI3ns7vliJciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMV9mZEIwM3pIbUtzOHdyUXBVNGpWdz09LzEwOTk1MTE2NjU4NzE2OTA2OS5qcGcifQ==", "name": "猜歌名4-活在梦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRErph47pqawiLCAibmFtZSI6ICLniLflj6rmmK/mgJXplJnov4fvvIhESuWSmum8k+eJiO+8iSIsICJhbGJ1bU5hbWUiOiAi54ix5oGo5ZCE5LiA5Y2KIiwgImFsYnVtSWQiOiAiMTMwMTg1NjAyIiwgInNvbmdtaWQiOiAid3lfMTg2MDEyMjE4MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjAwIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvQmVjeld3YlVxOGZBd000c1FCaUl2Zz09LzEwOTk1MTE2NjE2NTE2NzI2My5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI5NDEuMjcgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyLjMwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTEuMzMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMTEuMzMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMi4zMCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI5NDEuMjcgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg2MDEyMjE4MSIsICJ0aXRsZSI6ICLniLflj6rmmK/mgJXplJnov4fvvIhESuWSmum8k+eJiO+8iSIsICJkdXJhdGlvbiI6ICIwMTowMCIsICJhcnRpc3QiOiAiRErph47pqawiLCAiYWxidW0iOiAi54ix5oGo5ZCE5LiA5Y2KIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0JlY3pXd2JVcThmQXdNNHNRQmlJdmc9PS8xMDk5NTExNjYxNjUxNjcyNjMuanBnIn0=", "name": "爷只是怕错过(DJ咚鼓版)-DJ野马", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRErpmL/ovakiLCAibmFtZSI6ICLnpYHpl7vlhqXovakt562J5L2g5Zue5p2l77yI56WB6Ze75Yal6L2pIHJlbWl477yJIiwgImFsYnVtTmFtZSI6ICLogIHkurrkuI7opb/mtbflsrgiLCAiYWxidW1JZCI6ICIxMjQyMDUyNTkiLCAic29uZ21pZCI6ICJ3eV8xODMwNTY0MTU4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDY6MjIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9LdmgyRkU0ZUwzQTR1ZGY3Q3dTZVpnPT0vMTA5OTUxMTY1ODE1NjcwMzA5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjUuODQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxNC41OSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjc2Ljk0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjc2Ljk0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjE0LjU5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjUuODQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMDU2NDE1OCIsICJ0aXRsZSI6ICLnpYHpl7vlhqXovakt562J5L2g5Zue5p2l77yI56WB6Ze75Yal6L2pIHJlbWl477yJIiwgImR1cmF0aW9uIjogIjA2OjIyIiwgImFydGlzdCI6ICJESumYv+i9qSIsICJhbGJ1bSI6ICLogIHkurrkuI7opb/mtbflsrgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvS3ZoMkZFNGVMM0E0dWRmN0N3U2VaZz09LzEwOTk1MTE2NTgxNTY3MDMwOS5qcGcifQ==", "name": "祁闻冥轩-等你回来(祁闻冥轩 remix)-DJ阿轩", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IuP5Lqm5rSLTXVzaWMiLCAibmFtZSI6ICLmiJHlgYfoo4XkuI3nn6XpgZPvvIjmipHpg4HniYjvvIkiLCAiYWxidW1OYW1lIjogIue7iOaYr+WcqOWKq+mAg+maviIsICJhbGJ1bUlkIjogIjEyMjE5NTUxNCIsICJzb25nbWlkIjogInd5XzE4MTgxNzgzODIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoyNSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzIxV21iNHVBOUFUOFpYajRIa1YzSUE9PS8xMDk5NTExNjU3MDAyMzQ4NzMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMzk5LjIzIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOTk4LjAwIEtCIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjk5OC4wMCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzOTkuMjMgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgxODE3ODM4MiIsICJ0aXRsZSI6ICLmiJHlgYfoo4XkuI3nn6XpgZPvvIjmipHpg4HniYjvvIkiLCAiZHVyYXRpb24iOiAiMDA6MjUiLCAiYXJ0aXN0IjogIuiLj+S6pua0i011c2ljIiwgImFsYnVtIjogIue7iOaYr+WcqOWKq+mAg+maviIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8yMVdtYjR1QTlBVDhaWGo0SGtWM0lBPT0vMTA5OTUxMTY1NzAwMjM0ODczLmpwZyJ9", "name": "我假装不知道(抑郁版)-苏亦洋Music", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQmnlk6lCaeWTqeaxqiIsICJuYW1lIjogImFIVU96IiwgImFsYnVtTmFtZSI6ICLng63pl6jljY7or60yNjMiLCAiYWxidW1JZCI6ICIzMTIwMDg5IiwgInNvbmdtaWQiOiAid3lfMzE2NTQ2NjAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNToxNiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2Nwb1VpbnJFeGFmQkhMNU52NWlESFE9PS8xMDk5NTExNjYzNjEyMTg0NjYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC44NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEyLjA5IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjEyLjA5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzE2NTQ2NjAiLCAidGl0bGUiOiAiYUhVT3oiLCAiZHVyYXRpb24iOiAiMDU6MTYiLCAiYXJ0aXN0IjogIkJp5ZOpQmnlk6nmsaoiLCAiYWxidW0iOiAi54Ot6Zeo5Y2O6K+tMjYzIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2Nwb1VpbnJFeGFmQkhMNU52NWlESFE9PS8xMDk5NTExNjYzNjEyMTg0NjYuanBnIn0=", "name": "aHUOz-Bi哩Bi哩汪", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTmFKaU0iLCAibmFtZSI6ICLpm6jmt4vmub/kuoblpKnnqboiLCAiYWxidW1OYW1lIjogIumbqOa3i+a5v+S6huWkqeepuiIsICJhbGJ1bUlkIjogIjEyOTI1NTcxNSIsICJzb25nbWlkIjogInd5XzE4NTQ1NzQwMzkiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoxNiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1ZFb2dXdnpWd3ItUm5lVU9wQ0F1bFE9PS8xMDk5NTExNjYxMDEwNjIzNzUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMjYyLjkyIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNjU3LjIzIEtCIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMS45MiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxLjkyIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjY1Ny4yMyBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyNjIuOTIgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg1NDU3NDAzOSIsICJ0aXRsZSI6ICLpm6jmt4vmub/kuoblpKnnqboiLCAiZHVyYXRpb24iOiAiMDA6MTYiLCAiYXJ0aXN0IjogIk5hSmlNIiwgImFsYnVtIjogIumbqOa3i+a5v+S6huWkqeepuiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9WRW9nV3Z6VndyLVJuZVVPcENBdWxRPT0vMTA5OTUxMTY2MTAxMDYyMzc1LmpwZyJ9", "name": "雨淋湿了天空-NaJiM", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6LWW6JWKIiwgIm5hbWUiOiAi546v5ri46YGN5LqG5pW05Liq5pif57O777yM5om+5LiN5Yiw5q+U5L2g5pu05Lqu55qE5pif5pif44CCIiwgImFsYnVtTmFtZSI6ICLmiJHniLHkvaAg5LiN55WZ6YGX5oa+IiwgImFsYnVtSWQiOiAiMTI4ODY4OTEzIiwgInNvbmdtaWQiOiAid3lfMTg1MjU5Mzc1OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE1IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvYzRqNWtBdWtEZGhuNkpDNlZLd1VUdz09LzEwOTk1MTE2NjA3OTk4NzAyNy5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMzkuNjcgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1OTkuMTEgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjIyIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMjIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNTk5LjExIEtCIn0sICIxMjhrIjogeyJzaXplIjogIjIzOS42NyBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODUyNTkzNzU5IiwgInRpdGxlIjogIueOr+a4uOmBjeS6huaVtOS4quaYn+ezu++8jOaJvuS4jeWIsOavlOS9oOabtOS6rueahOaYn+aYn+OAgiIsICJkdXJhdGlvbiI6ICIwMDoxNSIsICJhcnRpc3QiOiAi6LWW6JWKIiwgImFsYnVtIjogIuaIkeeIseS9oCDkuI3nlZnpgZfmhr4iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvYzRqNWtBdWtEZGhuNkpDNlZLd1VUdz09LzEwOTk1MTE2NjA3OTk4NzAyNy5qcGcifQ==", "name": "环游遍了整个星系,找不到比你更亮的星星。-赖蕊", "type": "music"}]}, {"name": "_online_webPush", "musics": [{"name": "晴天-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2Njc0XHU1OTI5IiwgImFsYnVtTmFtZSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1JZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MjkiLCAic29uZ0lkIjogOTc3NzMsICJhbGJ1bU1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJzdHJNZWRpYU1pZCI6ICIwMDNRdWkxcTJ1MVpobyIsICJzb25nbWlkIjogIjAwMzlNblliMHF4WWhWIiwgImltZyI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDBNa01uaTE5Q2xLRy5qcGciLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjEyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuMjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI1Mi44MyBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICI0LjEyIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjI5IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjUyLjgzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogIjAwMzlNblliMHF4WWhWIiwgInRpdGxlIjogIlx1NjY3NFx1NTkyOSIsICJkdXJhdGlvbiI6ICIwNDoyOSIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIlx1NTNmNlx1NjBlMFx1N2Y4ZSIsICJwbGF0Zm9ybSI6ICJ0eCIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI1MDB4NTAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJscmMiOiAiIiwgImxyY1VybCI6ICIifQ==", "type": "music"}, {"name": "那天下雨了-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5MGEzXHU1OTI5XHU0ZTBiXHU5NmU4XHU0ZTg2IiwgImFsYnVtTmFtZSI6ICJcdTU5MmFcdTk2MzNcdTRlNGJcdTViNTAiLCAiYWxidW1JZCI6ICIwMDQxV1ZmaDJ2dGxKRSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDMiLCAic29uZ0lkIjogNjQ5NTU2MzYyLCAiYWxidW1NaWQiOiAiMDA0MVdWZmgydnRsSkUiLCAic3RyTWVkaWFNaWQiOiAiMDA0NFNhRmgwYXB1UjIiLCAic29uZ21pZCI6ICIwMDQ0U2FGaDBhcHVSMiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy40MSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNTIgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI0Ni4yMiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjQxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNTIgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDYuMjIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDA0NFNhRmgwYXB1UjIiLCAidGl0bGUiOiAiXHU5MGEzXHU1OTI5XHU0ZTBiXHU5NmU4XHU0ZTg2IiwgImR1cmF0aW9uIjogIjAzOjQzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1OTJhXHU5NjMzXHU0ZTRiXHU1YjUwIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "搁浅-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFsYnVtTmFtZSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAiYWxidW1JZCI6ICIwMDNERlJ6RDE5MktLRCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MDAiLCAic29uZ0lkIjogMTAyMDY1NzUwLCAiYWxidW1NaWQiOiAiMDAzREZSekQxOTJLS0QiLCAic3RyTWVkaWFNaWQiOiAiMDA0VWxLOXgwamV1b3ciLCAic29uZ21pZCI6ICIwMDFCYnl3cTJnaWNhZSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzREZSekQxOTJLS0QuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTYgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImR1cmF0aW9uIjogIjA0OjAwIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzREZSekQxOTJLS0QuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "枫-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2N2FiIiwgImFsYnVtTmFtZSI6ICJcdTUzNDFcdTRlMDBcdTY3MDhcdTc2ODRcdTg0MjdcdTkwYTYiLCAiYWxidW1JZCI6ICIwMDI0YmppTDJhb2N4VCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MzUiLCAic29uZ0lkIjogNzE4NDc5LCAiYWxidW1NaWQiOiAiMDAyNGJqaUwyYW9jeFQiLCAic3RyTWVkaWFNaWQiOiAiMDA0NE02VW4wUlhwaDIiLCAic29uZ21pZCI6ICIwMDNLdFloZzRmck5YQyIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyNGJqaUwyYW9jeFQuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4yMSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjUyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjkuMTggTUIifV0sICJfdHlwZXMiOiB7IjEyOGsiOiB7InNpemUiOiAiNC4yMSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC41MiBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIyOS4xOCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDNLdFloZzRmck5YQyIsICJ0aXRsZSI6ICJcdTY3YWIiLCAiZHVyYXRpb24iOiAiMDQ6MzUiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTUzNDFcdTRlMDBcdTY3MDhcdTc2ODRcdTg0MjdcdTkwYTYiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "稻香-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3YTNiXHU5OTk5IiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDMiLCAic29uZ0lkIjogNDQ5MjA1LCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAyMHdKRG8zY3gwajMiLCAic29uZ21pZCI6ICIwMDNhQVlybTNHRTBBYyIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy40MSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC44MSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjQxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuODEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImR1cmF0aW9uIjogIjAzOjQzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "花海-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU4MmIxXHU2ZDc3IiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MjQiLCAic29uZ0lkIjogNDQ5MTk4LCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAzb2tXdm8xcVp1OWMiLCAic29uZ21pZCI6ICIwMDNjSTUybzRkYUpKTCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4wNCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjEwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjguMzAgTUIifV0sICJfdHlwZXMiOiB7IjEyOGsiOiB7InNpemUiOiAiNC4wNCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC4xMCBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIyOC4zMCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDNjSTUybzRkYUpKTCIsICJ0aXRsZSI6ICJcdTgyYjFcdTZkNzciLCAiZHVyYXRpb24iOiAiMDQ6MjQiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "青花瓷-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "退后-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5MDAwXHU1NDBlIiwgImFsYnVtTmFtZSI6ICJcdTRmOWRcdTcxMzZcdTgzMDNcdTcyNzlcdTg5N2YiLCAiYWxidW1JZCI6ICIwMDJqTEdXZTE2VGYxSCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MjEiLCAic29uZ0lkIjogMTAyMDY2NDQ5LCAiYWxidW1NaWQiOiAiMDAyakxHV2UxNlRmMUgiLCAic3RyTWVkaWFNaWQiOiAiMDAzbVd3NDMwVWdZa2UiLCAic29uZ21pZCI6ICIwMDFMMWxxbTRVQWR5byIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyakxHV2UxNlRmMUguanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy45OSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuOTggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOC42MyBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjk5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuOTggTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjguNjMgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImR1cmF0aW9uIjogIjA0OjIxIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyakxHV2UxNlRmMUguanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "七里香-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtTmFtZSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAiYWxidW1JZCI6ICIwMDNERlJ6RDE5MktLRCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6NTkiLCAic29uZ0lkIjogMTAyMDY1NzU2LCAiYWxidW1NaWQiOiAiMDAzREZSekQxOTJLS0QiLCAic3RyTWVkaWFNaWQiOiAiMDAxMkV6MGExdEZjT0kiLCAic29uZ21pZCI6ICIwMDRaOElocjBKSXU1cyIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzREZSekQxOTJLS0QuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjQyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzQuMTkgTUIifV0sICJfdHlwZXMiOiB7IjEyOGsiOiB7InNpemUiOiAiNC41NyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMS40MiBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIzNC4xOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDRaOElocjBKSXU1cyIsICJ0aXRsZSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAiZHVyYXRpb24iOiAiMDQ6NTkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "夜曲-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU1OTFjXHU2NmYyIiwgImFsYnVtTmFtZSI6ICJcdTUzNDFcdTRlMDBcdTY3MDhcdTc2ODRcdTg0MjdcdTkwYTYiLCAiYWxidW1JZCI6ICIwMDI0YmppTDJhb2N4VCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDYiLCAic29uZ0lkIjogNzE4NDc3LCAiYWxidW1NaWQiOiAiMDAyNGJqaUwyYW9jeFQiLCAic3RyTWVkaWFNaWQiOiAiMDAyNGpyc28yOHA4VkEiLCAic29uZ21pZCI6ICIwMDF6TVFyNzFGMVFvOCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyNGJqaUwyYW9jeFQuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy40NiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNjYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNS40NSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjQ2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNjYgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjUuNDUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImR1cmF0aW9uIjogIjAzOjQ2IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyNGJqaUwyYW9jeFQuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "我落泪情绪零碎-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2MjExXHU4NDNkXHU2Y2VhXHU2MGM1XHU3ZWVhXHU5NmY2XHU3ODhlIiwgImFsYnVtTmFtZSI6ICJcdThkZThcdTY1ZjZcdTRlZTMiLCAiYWxidW1JZCI6ICIwMDBidmlCbDRGalRwTyIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MTciLCAic29uZ0lkIjogNjgwMjg0LCAiYWxidW1NaWQiOiAiMDAwYnZpQmw0RmpUcE8iLCAic3RyTWVkaWFNaWQiOiAiMDAxWmVvMVA0YTVqMHYiLCAic29uZ21pZCI6ICIwMDIyYjdPWDJTVFU4NiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAwYnZpQmw0RmpUcE8uanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy45NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuODQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNy41MCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjk0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuODQgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjcuNTAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAyMmI3T1gyU1RVODYiLCAidGl0bGUiOiAiXHU2MjExXHU4NDNkXHU2Y2VhXHU2MGM1XHU3ZWVhXHU5NmY2XHU3ODhlIiwgImR1cmF0aW9uIjogIjA0OjE3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU4ZGU4XHU2NWY2XHU0ZWUzIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAwYnZpQmw0RmpUcE8uanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "红尘客栈-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3ZWEyXHU1YzE4XHU1YmEyXHU2ODA4IiwgImFsYnVtTmFtZSI6ICJcdTUzNDFcdTRlOGNcdTY1YjBcdTRmNWMiLCAiYWxidW1JZCI6ICIwMDNPdzg1RTNwbm9xaSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MzQiLCAic29uZ0lkIjogNTE3NzY4MCwgImFsYnVtTWlkIjogIjAwM093ODVFM3Bub3FpIiwgInN0ck1lZGlhTWlkIjogIjAwMGQ1VlhhMW1GSzRHIiwgInNvbmdtaWQiOiAiMDAzeHY0dzMxM3RaSFYiLCAiaW1nIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI1MDB4NTAwTTAwMDAwM093ODVFM3Bub3FpLmpwZyIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMTggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC40NiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI3LjIwIE1CIn1dLCAiX3R5cGVzIjogeyIxMjhrIjogeyJzaXplIjogIjQuMTggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuNDYgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjcuMjAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzeHY0dzMxM3RaSFYiLCAidGl0bGUiOiAiXHU3ZWEyXHU1YzE4XHU1YmEyXHU2ODA4IiwgImR1cmF0aW9uIjogIjA0OjM0IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1MzQxXHU0ZThjXHU2NWIwXHU0ZjVjIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzT3c4NUUzcG5vcWkuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "蒲公英的约定-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU4NGIyXHU1MTZjXHU4MmYxXHU3Njg0XHU3ZWE2XHU1YjlhIiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MDciLCAic29uZ0lkIjogMTAyMzQwOTY1LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNDBvNnEzSnZmenIiLCAic29uZ21pZCI6ICIwMDRZaTVCRDNrc29BTiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy43NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNDMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNS41NCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjc3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNDMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjUuNTQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDA0WWk1QkQza3NvQU4iLCAidGl0bGUiOiAiXHU4NGIyXHU1MTZjXHU4MmYxXHU3Njg0XHU3ZWE2XHU1YjlhIiwgImR1cmF0aW9uIjogIjA0OjA3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "手写的从前-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2MjRiXHU1MTk5XHU3Njg0XHU0ZWNlXHU1MjRkIiwgImFsYnVtTmFtZSI6ICJcdTU0Y2VcdTU0NjZcdWZmMGNcdTRlMGRcdTk1MTlcdTU0ZTYiLCAiYWxidW1JZCI6ICIwMDF1cWVqczNkNkVJRCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6NTciLCAic29uZ0lkIjogMTAxNzg3ODcwLCAiYWxidW1NaWQiOiAiMDAxdXFlanMzZDZFSUQiLCAic3RyTWVkaWFNaWQiOiAiMDAzTzdFMVAxNDZXSUYiLCAic29uZ21pZCI6ICIwMDJ1OFpPTTRDN1FGNCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAxdXFlanMzZDZFSUQuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjM1IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNTkuMTcgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjk4LjM5IE1CIn1dLCAiX3R5cGVzIjogeyIxMjhrIjogeyJzaXplIjogIjQuNTQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuMzUgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNTkuMTcgTUIifSwgImZsYWMyNGJpdCI6IHsic2l6ZSI6ICI5OC4zOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDJ1OFpPTTRDN1FGNCIsICJ0aXRsZSI6ICJcdTYyNGJcdTUxOTlcdTc2ODRcdTRlY2VcdTUyNGQiLCAiZHVyYXRpb24iOiAiMDQ6NTciLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTU0Y2VcdTU0NjZcdWZmMGNcdTRlMGRcdTk1MTlcdTU0ZTYiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDF1cWVqczNkNkVJRC5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "爱琴海-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3MjMxXHU3NDM0XHU2ZDc3IiwgImFsYnVtTmFtZSI6ICJcdTU5MmFcdTk2MzNcdTRlNGJcdTViNTAiLCAiYWxidW1JZCI6ICIwMDQxV1ZmaDJ2dGxKRSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6MzQiLCAic29uZ0lkIjogNjQ5NTU2MzY2LCAiYWxidW1NaWQiOiAiMDA0MVdWZmgydnRsSkUiLCAic3RyTWVkaWFNaWQiOiAiMDAzV1Byakw0ZGltRkUiLCAic29uZ21pZCI6ICIwMDNXUHJqTDRkaW1GRSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4yNyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguMTggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI0NS42NCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjI3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguMTggTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDUuNjQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzV1Byakw0ZGltRkUiLCAidGl0bGUiOiAiXHU3MjMxXHU3NDM0XHU2ZDc3IiwgImR1cmF0aW9uIjogIjAzOjM0IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1OTJhXHU5NjMzXHU0ZTRiXHU1YjUwIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "兰亭序-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU1MTcwXHU0ZWFkXHU1ZThmIiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MTMiLCAic29uZ0lkIjogNDQ5MjAxLCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAzVkxzaWswenRiSWIiLCAic29uZ21pZCI6ICIwMDEyOE4zcjJTWUtNRiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy44OCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNy4wMCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjg4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNjkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjcuMDAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxMjhOM3IyU1lLTUYiLCAidGl0bGUiOiAiXHU1MTcwXHU0ZWFkXHU1ZThmIiwgImR1cmF0aW9uIjogIjA0OjEzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "西西里-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU4OTdmXHU4OTdmXHU5MWNjIiwgImFsYnVtTmFtZSI6ICJcdTU5MmFcdTk2MzNcdTRlNGJcdTViNTAiLCAiYWxidW1JZCI6ICIwMDQxV1ZmaDJ2dGxKRSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDkiLCAic29uZ0lkIjogNjQ5NTU2MzczLCAiYWxidW1NaWQiOiAiMDA0MVdWZmgydnRsSkUiLCAic3RyTWVkaWFNaWQiOiAiMDAzRmRKWkgxd2xqTVUiLCAic29uZ21pZCI6ICIwMDNGZEpaSDF3bGpNVSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy41MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNzUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI0Ni4zMSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjUwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNzUgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDYuMzEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzRmRKWkgxd2xqTVUiLCAidGl0bGUiOiAiXHU4OTdmXHU4OTdmXHU5MWNjIiwgImR1cmF0aW9uIjogIjAzOjQ5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1OTJhXHU5NjMzXHU0ZTRiXHU1YjUwIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "给我一首歌的时间-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3ZWQ5XHU2MjExXHU0ZTAwXHU5OTk2XHU2YjRjXHU3Njg0XHU2NWY2XHU5NWY0IiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MTMiLCAic29uZ0lkIjogMTAxMDkxNDg0LCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAwdVNKZHYxbkc2dzIiLCAic29uZ21pZCI6ICIwMDRCaFFrZTRhZEhjZiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy44NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNjcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMC4wOCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjg3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNjcgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMzAuMDggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDA0QmhRa2U0YWRIY2YiLCAidGl0bGUiOiAiXHU3ZWQ5XHU2MjExXHU0ZTAwXHU5OTk2XHU2YjRjXHU3Njg0XHU2NWY2XHU5NWY0IiwgImR1cmF0aW9uIjogIjA0OjEzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "一路向北-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU0ZTAwXHU4ZGVmXHU1NDExXHU1MzE3IiwgImFsYnVtTmFtZSI6ICJKIElJSSBNUDMgUGxheWVyIiwgImFsYnVtSWQiOiAiMDAyTUFlb2IzekxYd1oiLCAic291cmNlIjogInR4IiwgImludGVydmFsIjogIjA0OjU0IiwgInNvbmdJZCI6IDUxMDU5ODYsICJhbGJ1bU1pZCI6ICIwMDJNQWVvYjN6TFh3WiIsICJzdHJNZWRpYU1pZCI6ICIwMDNqVDRTVTIyY2xFNSIsICJzb25nbWlkIjogIjAwMXhkMEhJMFg5R05xIiwgImltZyI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDJNQWVvYjN6TFh3Wi5qcGciLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjQ5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTEuMjMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI1OC43OSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICI0LjQ5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjIzIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjU4Ljc5IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogIjAwMXhkMEhJMFg5R05xIiwgInRpdGxlIjogIlx1NGUwMFx1OGRlZlx1NTQxMVx1NTMxNyIsICJkdXJhdGlvbiI6ICIwNDo1NCIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIkogSUlJIE1QMyBQbGF5ZXIiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDJNQWVvYjN6TFh3Wi5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "半岛铁盒-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU1MzRhXHU1YzliXHU5NGMxXHU3NmQyIiwgImFsYnVtTmFtZSI6ICJcdTUxNmJcdTVlYTZcdTdhN2FcdTk1ZjQiLCAiYWxidW1JZCI6ICIwMDRNR2l0TjB6RUhwYiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAic29uZ0lkIjogOTc3NjEsICJhbGJ1bU1pZCI6ICIwMDRNR2l0TjB6RUhwYiIsICJzdHJNZWRpYU1pZCI6ICIwMDE5R1hUejFPTTZXdSIsICJzb25nbWlkIjogIjAwMk9LSW94MjhhZDlhIiwgImltZyI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDRNR2l0TjB6RUhwYi5qcGciLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0Ljg4IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuMTkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzNC45MyBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICI0Ljg4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE5IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjM0LjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogIjAwMk9LSW94MjhhZDlhIiwgInRpdGxlIjogIlx1NTM0YVx1NWM5Ylx1OTRjMVx1NzZkMiIsICJkdXJhdGlvbiI6ICIwNToxOSIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIlx1NTE2Ylx1NWVhNlx1N2E3YVx1OTVmNCIsICJwbGF0Zm9ybSI6ICJ0eCIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI1MDB4NTAwTTAwMDAwNE1HaXROMHpFSHBiLmpwZyIsICJscmMiOiAiIiwgImxyY1VybCI6ICIifQ==", "type": "music"}]}, {"name": "_online_play", "musics": [{"name": "走马-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU5NjQ4XHU3YzkyIiwgIm5hbWUiOiAiXHU4ZDcwXHU5YTZjIiwgImFsYnVtTmFtZSI6ICJcdTU5ODJcdTRlNWYiLCAiYWxidW1JZCI6ICIwMDRHQXJVZTI2UFh2WiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTUiLCAic29uZ0lkIjogMTAyMDY4MjE1LCAiYWxidW1NaWQiOiAiMDA0R0FyVWUyNlBYdloiLCAic3RyTWVkaWFNaWQiOiAiMDAyejBadEszTkJLSXMiLCAic29uZ21pZCI6ICIwMDJ0bDVKWjJGRVJ4TCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0R0FyVWUyNlBYdlouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguOTkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMS44NCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjYwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguOTkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjEuODQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAydGw1SloyRkVSeEwiLCAidGl0bGUiOiAiXHU4ZDcwXHU5YTZjIiwgImR1cmF0aW9uIjogIjAzOjU1IiwgImFydGlzdCI6ICJcdTk2NDhcdTdjOTIiLCAiYWxidW0iOiAiXHU1OTgyXHU0ZTVmIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0R0FyVWUyNlBYdlouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}]}, {"name": "_online_佚名", "musics": [{"name": "陈粒 - 走马 .flac-stopintime-D", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDEzMzczMDgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9kZWZhdWx0LXNvbmctaW1hZ2Uud2VicCIsICJkdXJhdGlvbiI6IDIzNiwgInRpdGxlIjogIlx1OTY0OFx1N2M5MiAtIFx1OGQ3MFx1OWE2YyAuZmxhYyIsICJhcnRpc3QiOiAic3RvcGludGltZS1EIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJjaGVuLWxpLXpvdS1tYS1mbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9", "type": "music"}, {"name": "自然环境-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTM0MTQwLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY3MDg3LTMud2VicCIsICJkdXJhdGlvbiI6IDI0NSwgInRpdGxlIjogIlx1ODFlYVx1NzEzNlx1NzNhZlx1NTg4MyIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1OGQzNFx1OGZkMVx1NTkyN1x1NTczMCIsICJ1cmxfc2x1ZyI6ICJ6aS1yYW4taHVhbi1qaW5nIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9", "type": "music"}, {"name": "空空-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTM0MTM1LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY3MDg3LTMud2VicCIsICJkdXJhdGlvbiI6IDIyNSwgInRpdGxlIjogIlx1N2E3YVx1N2E3YSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1OGQzNFx1OGZkMVx1NTkyN1x1NTczMCIsICJ1cmxfc2x1ZyI6ICJrb25nLWtvbmciLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=", "type": "music"}, {"name": "种种-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTQ1LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDE5MSwgInRpdGxlIjogIlx1NzljZFx1NzljZCIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJ6aG9uZy16aG9uZyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "抱歉抱歉-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTM0MTI4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY3MDg3LTMud2VicCIsICJkdXJhdGlvbiI6IDIzMSwgInRpdGxlIjogIlx1NjJiMVx1NmI0OVx1NjJiMVx1NmI0OSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1OGQzNFx1OGZkMVx1NTkyN1x1NTczMCIsICJ1cmxfc2x1ZyI6ICJiYW8tcWlhbi1iYW8tcWlhbiIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "性空山-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTcxLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDIzMiwgInRpdGxlIjogIlx1NjAyN1x1N2E3YVx1NWM3MSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJ4aW5nLWtvbmctc2hhbiIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "如也-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDIyMCwgInRpdGxlIjogIlx1NTk4Mlx1NGU1ZiIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJydS15ZSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "历历万乡-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDI4NSwgInRpdGxlIjogIlx1NTM4Nlx1NTM4Nlx1NGUwN1x1NGU2MSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJsaS1saS13YW4teGlhbmciLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=", "type": "music"}, {"name": "庆祝-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNjM2LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDIyOSwgInRpdGxlIjogIlx1NWU4Nlx1Nzk1ZCIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJxaW5nLXpodSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "五言-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDMyNiwgInRpdGxlIjogIlx1NGU5NFx1OGEwMCIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJ3dS15YW4iLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=", "type": "music"}]}]', custom_play_list_json='', disable_download=False, key_word_dict={'下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_play_type_rnd', '单曲播放': 'set_play_type_sin', '顺序播放': 'set_play_type_seq', '分钟后关机': 'stop_after_minute', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '删除歌曲': 'cmd_del_music', '播放本地歌曲': 'playlocal', '本地播放歌曲': 'playlocal', '播放歌曲': 'play', '放歌曲': 'play', '在线播放': 'online_play', '播放歌手': 'singer_play', '关机': 'stop', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '播放列表': 'play_music_list', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '单曲播放', '顺序播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '删除歌曲', '播放本地歌曲', '本地播放歌曲', '播放歌曲', '放歌曲', '在线播放', '播放歌手', '暂停', '停止', '停止播放', '播放歌单', '测试自定义口令', '测试链接'], use_music_api=True, use_music_audio_id='1582971365183456177', use_music_id='355454500', log_file='xiaomusic.log.txt', fuzzy_match_cutoff=0.6, enable_fuzzy_match=True, stop_tts_msg='收到,再见', enable_config_example=False, keywords_playlocal='播放本地歌曲,本地播放歌曲', keywords_play='播放歌曲,放歌曲', keywords_online_play='在线播放', keywords_singer_play='播放歌手', keywords_stop='关机,暂停,停止,停止播放', keywords_playlist='播放列表,播放歌单', user_key_word_dict={'测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, enable_force_stop=False, devices={'419359157': Device(did='419359157', device_id='3e792e41-53c6-439f-95da-2fd68f4e61da', hardware='LX05', name='小爱音箱Play', play_type=1, cur_music='枫-周杰伦', cur_playlist='_online_webPush', playlist2music={'全部': '东风破-香香', '_online_webPush': '枫-周杰伦', '_online_lx_周杰伦-Jay 『网易云精选』': '安静 (Live)-李圣杰', '_online_play': '走马-陈粒', '_online_佚名': '陈粒 - 走马 .flac-stopintime-D'})}, group_list='', remove_id3tag=False, convert_to_mp3=False, delay_sec=0, continue_play=False, enable_file_watch=False, file_watch_debounce=10, pull_ask_sec=1, enable_pull_ask=True, auto_convert=False, crontab_json='', enable_yt_dlp_cookies=False, enable_save_tag=False, enable_analytics=True, get_ask_by_mina=False, play_type_one_tts_msg='已经设置为单曲循环', play_type_all_tts_msg='已经设置为全部循环', play_type_rnd_tts_msg='已经设置为随机播放', play_type_sin_tts_msg='已经设置为单曲播放', play_type_seq_tts_msg='已经设置为顺序播放', recently_added_playlist_len=50, enable_cmd_del_music=False, web_music_proxy=True, edge_tts_voice='zh-CN-XiaoyiNeural', enable_auto_clean_temp=True, qrcode_timeout=120) [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:621: 语音控制已启动, 用【分钟后关机/下一首/上一首/单曲循环/全部循环/随机播放/单曲播放/顺序播放/关机/刷新列表/播放列表第/播放列表/加入收藏/收藏歌曲/取消收藏/删除歌曲/播放本地歌曲/本地播放歌曲/播放歌曲/放歌曲/在线播放/播放歌手/暂停/停止/停止播放/播放歌单/测试自定义口令/测试链接】开头来控制 [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:629: 配置更新:关闭目录监控 [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:57:23] [0.5.1] [INFO] analytics.py:35: analytics init ok [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:164: Startup OK. Config(account='******', password='******', mi_did='419359157', cookie='', verbose=False, music_path='music', temp_path='music/tmp', download_path='music/download', conf_path='conf', cache_dir='music/cache', hostname='http://34.21.156.125', port=8090, public_port=58090, proxy='', loudnorm='', search_prefix='bilisearch:', ffmpeg_location='./ffmpeg/bin', get_duration_type='ffprobe', active_cmd='play,set_play_type_rnd,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop,play_next,play_prev,set_play_type_one,set_play_type_all,set_play_type_sin,set_play_type_seq,gen_music_list,add_to_favorites,del_from_favorites,cmd_del_music,online_play,singer_play', exclude_dirs='@eaDir,tmp', ignore_tag_dirs='', music_path_depth=10, disable_httpauth=True, httpauth_username='******', httpauth_password='******', music_list_url='', music_list_json='[{"name": "_online_lx_周杰伦-Jay 『网易云精选』", "musics": [{"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5rip5bKa44CB5ZC05a6X5a6qIiwgIm5hbWUiOiAi5bGL6aG2IiwgImFsYnVtTmFtZSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAiYWxidW1JZCI6ICI1MTIxNzUiLCAic29uZ21pZCI6ICJ3eV81MjU3MTM4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84MUJzeHhob21KNGFKWll2RWJ5UGt3PT0vMTA5OTUxMTY1NjcxMTgyNjg0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYxLjU5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYxLjU5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI1NzEzOCIsICJ0aXRsZSI6ICLlsYvpobYiLCAiZHVyYXRpb24iOiAiMDU6MTkiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgea4qeWymuOAgeWQtOWul+WuqiIsICJhbGJ1bSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvODFCc3h4aG9tSjRhSlpZdkVieVBrdz09LzEwOTk1MTE2NTY3MTE4MjY4NC5qcGcifQ==", "name": "屋顶-周杰伦、温岚、吴宗宪", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQ2VjaWxpYSIsICJuYW1lIjogIuiKseOBrua1tyAo5Ly05aWPKSIsICJhbGJ1bU5hbWUiOiAi6Iqx44Gu5rW3IiwgImFsYnVtSWQiOiAiMTUyNjIxNTA1IiwgInNvbmdtaWQiOiAid3lfMTk4NzI4NzMyMiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjUyIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjM5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTMuNDcgTUIifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiMTMuNDcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNS4zOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTg3Mjg3MzIyIiwgInRpdGxlIjogIuiKseOBrua1tyAo5Ly05aWPKSIsICJkdXJhdGlvbiI6ICIwNTo1MiIsICJhcnRpc3QiOiAiQ2VjaWxpYSIsICJhbGJ1bSI6ICLoirHjga7mtbciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGcifQ==", "name": "花の海 (伴奏)-Cecilia", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZKi55uU5bCP5YWs5Li744CB5bCP6I2J6I+MIiwgIm5hbWUiOiAi57uZ5oiR5LiA6aaW5q2M55qE5pe26Ze0ICjlpbPlo7DlkIjllLEpIiwgImFsYnVtTmFtZSI6ICLnu5nmiJHkuIDpppbmrYznmoTml7bpl7QgKOWls+WjsOWQiOWUsSkiLCAiYWxidW1JZCI6ICIxNDk2NDk1NjEiLCAic29uZ21pZCI6ICJ3eV8xOTcxODU3MTg2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDEiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9CdDMyVndQZjBCUTRBX28wNXhFeVRnPT0vMTA5OTUxMTY5NjkwNDA1MTUwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNjggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjIwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjYuODggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjYuODggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS4yMCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjY4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NzE4NTcxODYiLCAidGl0bGUiOiAi57uZ5oiR5LiA6aaW5q2M55qE5pe26Ze0ICjlpbPlo7DlkIjllLEpIiwgImR1cmF0aW9uIjogIjA0OjAxIiwgImFydGlzdCI6ICLpkqLnm5TlsI/lhazkuLvjgIHlsI/ojYnoj4wiLCAiYWxidW0iOiAi57uZ5oiR5LiA6aaW5q2M55qE5pe26Ze0ICjlpbPlo7DlkIjllLEpIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0J0MzJWd1BmMEJRNEFfbzA1eEV5VGc9PS8xMDk5NTExNjk2OTA0MDUxNTAuanBnIn0=", "name": "给我一首歌的时间 (女声合唱)-钢盔小公主、小草菌", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTGloX1DlsI/niLEiLCAibmFtZSI6ICLmmI7mmI7lsLEiLCAiYWxidW1OYW1lIjogIuaYjuaYjuWwsSjmt7Hmg4XniYgpIiwgImFsYnVtSWQiOiAiMjUzMTQ3OTMzIiwgInNvbmdtaWQiOiAid3lfMjY0NDM2MTM1MyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjIzIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvVmg2SlB1cFgwVzQwUU5DUkNvelZYZz09LzEwOTk1MTE3MDEyOTIzNDY1Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjAyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuMDQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC4yNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyNC4yNSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC4wNCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjAyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzI2NDQzNjEzNTMiLCAidGl0bGUiOiAi5piO5piO5bCxIiwgImR1cmF0aW9uIjogIjA0OjIzIiwgImFydGlzdCI6ICJMaWhfUOWwj+eIsSIsICJhbGJ1bSI6ICLmmI7mmI7lsLEo5rex5oOF54mIKSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9WaDZKUHVwWDBXNDBRTkNSQ296VlhnPT0vMTA5OTUxMTcwMTI5MjM0NjU2LmpwZyJ9", "name": "明明就-Lih_P小爱", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUkVFQlgiLCAibmFtZSI6ICLog6HmgJ3lj4jkubHmg7MiLCAiYWxidW1OYW1lIjogIuiDoeaAneWPiOS5seaDsyIsICJhbGJ1bUlkIjogIjM2NjE5OTg2MiIsICJzb25nbWlkIjogInd5XzMzNTkwNDE0NjQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjoyMyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzVsVFZZTHlYVFRSdlBDajB0NHJTckE9PS8xMDk5NTExNzI4ODIyNDIxNzkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4xOCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuNDYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOC44NiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOC44NiBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1LjQ2IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuMTggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzM1OTA0MTQ2NCIsICJ0aXRsZSI6ICLog6HmgJ3lj4jkubHmg7MiLCAiZHVyYXRpb24iOiAiMDI6MjMiLCAiYXJ0aXN0IjogIlJFRUJYIiwgImFsYnVtIjogIuiDoeaAneWPiOS5seaDsyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC81bFRWWUx5WFRUUnZQQ2owdDRyU3JBPT0vMTA5OTUxMTcyODgyMjQyMTc5LmpwZyJ9", "name": "胡思又乱想-REEBX", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQ2VjaWxpYSIsICJuYW1lIjogIuiKseOBrua1tyIsICJhbGJ1bU5hbWUiOiAi6Iqx44Gu5rW3IiwgImFsYnVtSWQiOiAiMTUyNjIxNTA1IiwgInNvbmdtaWQiOiAid3lfMTk5Njk1NDcxOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjMwIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjA1IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuNjIgTUIifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiMTIuNjIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNS4wNSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTk2OTU0NzE4IiwgInRpdGxlIjogIuiKseOBrua1tyIsICJkdXJhdGlvbiI6ICIwNTozMCIsICJhcnRpc3QiOiAiQ2VjaWxpYSIsICJhbGJ1bSI6ICLoirHjga7mtbciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvWE0tQUJLQ3MxaXVLVVNjNmFvTVBXdz09LzEwOTk1MTE2NzkzMjkxODc5Mi5qcGcifQ==", "name": "花の海-Cecilia", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUGlhbm8gRWNob2VzIiwgIm5hbWUiOiAi6Kqq5LqG5YaN6KaLIChQaWFubyBWZXIuKSIsICJhbGJ1bU5hbWUiOiAiSmF5IENob3XjgJzjg5TjgqLjg47jgafogbTjgY/lkI3mm7Lpm4YiLCAiYWxidW1JZCI6ICIxNzAyNTk3NjciLCAic29uZ21pZCI6ICJ3eV8yMDY2NjcxMTc1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzYiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9wNFYycDRrVDdnR2dEQ2R4cFlXQU5RPT0vMTA5OTUxMTY4NzYwOTczMDYzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41MyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE1LjAwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE1LjAwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjUzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjA2NjY3MTE3NSIsICJ0aXRsZSI6ICLoqqrkuoblho3oposgKFBpYW5vIFZlci4pIiwgImR1cmF0aW9uIjogIjA0OjM2IiwgImFydGlzdCI6ICJQaWFubyBFY2hvZXMiLCAiYWxidW0iOiAiSmF5IENob3XjgJzjg5TjgqLjg47jgafogbTjgY/lkI3mm7Lpm4YiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcDRWMnA0a1Q3Z0dnRENkeHBZV0FOUT09LzEwOTk1MTE2ODc2MDk3MzA2My5qcGcifQ==", "name": "說了再見 (Piano Ver.)-Piano Echoes", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YWG6bijIiwgIm5hbWUiOiAi6Lev54GvIiwgImFsYnVtTmFtZSI6ICLot6/nga8iLCAiYWxidW1JZCI6ICIzNDk2NzAyMDQiLCAic29uZ21pZCI6ICJ3eV8zMzE1NzUxNDQ3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6NTAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9WOVJ4TDk3bVAyVWpWTkFpMkczb3VnPT0vMTA5OTUxMTcyMjUyMDE1MTAzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNTIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4LjgwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjYuNDMgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjQ3LjM4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNDcuMzggTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjYuNDMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOC44MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjUyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMzMTU3NTE0NDciLCAidGl0bGUiOiAi6Lev54GvIiwgImR1cmF0aW9uIjogIjAzOjUwIiwgImFydGlzdCI6ICLlhYbpuKMiLCAiYWxidW0iOiAi6Lev54GvIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1Y5UnhMOTdtUDJValZOQWkyRzNvdWc9PS8xMDk5NTExNzIyNTIwMTUxMDMuanBnIn0=", "name": "路灯-兆鸣", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP6Zi/5LmQIiwgIm5hbWUiOiAi5pif5pyf5LqU55qE56ys5Lmd6IqC6L2m5Y6iIiwgImFsYnVtTmFtZSI6ICLmmJ/mnJ/kupTnmoTnrKzkuZ3oioLovabljqIiLCAiYWxidW1JZCI6ICIzNTcyMzcxMDQiLCAic29uZ21pZCI6ICJ3eV8zMzM2MjM5MTYzIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDQiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9CU0FodzdoZlRST3VjbGhWdTVZWjJBPT0vMTA5OTUxMTcyNTQ3MDU3OTg2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNzMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjMxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjkuODIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjkuODIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS4zMSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjczIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMzMzYyMzkxNjMiLCAidGl0bGUiOiAi5pif5pyf5LqU55qE56ys5Lmd6IqC6L2m5Y6iIiwgImR1cmF0aW9uIjogIjA0OjA0IiwgImFydGlzdCI6ICLlsI/pmL/kuZAiLCAiYWxidW0iOiAi5pif5pyf5LqU55qE56ys5Lmd6IqC6L2m5Y6iIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0JTQWh3N2hmVFJPdWNsaFZ1NVlaMkE9PS8xMDk5NTExNzI1NDcwNTc5ODYuanBnIn0=", "name": "星期五的第九节车厢-小阿乐", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6LaF6LaF77yI5ZGo5rC46LaF77yJ44CB6b6Z54yrIiwgIm5hbWUiOiAi6Zuq5Zyw6YeM55u454ixIiwgImFsYnVtTmFtZSI6ICLpm6rlnLDph4znm7jniLEiLCAiYWxidW1JZCI6ICIxNTk4NDI0NTMiLCAic29uZ21pZCI6ICJ3eV8xOTc4MjYwNTU3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MTUiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9iYzVXNUxockZZVlI3TmNGRm1HUFBBPT0vMTA5OTUxMTY4MzA2OTE4NzA2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuOTggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjQ1IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjIuMjkgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjM5Ljk0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiMzkuOTQgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjIuMjkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy40NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjk4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NzgyNjA1NTciLCAidGl0bGUiOiAi6Zuq5Zyw6YeM55u454ixIiwgImR1cmF0aW9uIjogIjAzOjE1IiwgImFydGlzdCI6ICLotoXotoXvvIjlkajmsLjotoXvvInjgIHpvpnnjKsiLCAiYWxidW0iOiAi6Zuq5Zyw6YeM55u454ixIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2JjNVc1TGhyRllWUjdOY0ZGbUdQUEE9PS8xMDk5NTExNjgzMDY5MTg3MDYuanBnIn0=", "name": "雪地里相爱-超超(周永超)、龙猫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5pmv5LqmIiwgIm5hbWUiOiAi54ix5oOF5bqf5p+0ICjov5nkuKrlhqzlpKnkvJrlhrflkJcpIiwgImFsYnVtTmFtZSI6ICLmsZ/ljZfmgbbkvZzliaflpoLmnpzov5nlsLHmmK/niLHmg4Xlup/mn7QiLCAiYWxidW1JZCI6ICIxOTk0MTcxODAiLCAic29uZ21pZCI6ICJ3eV8yMTY2NjQ5NjYwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mT1ltbWJ0ZUVHZ0RNdklfUnZBTWJBPT0vMTA5OTUxMTY5Njg3NjU4NDE1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIzLjAzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy45MSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjkxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjMuMDMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS4yMSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMTY2NjQ5NjYwIiwgInRpdGxlIjogIueIseaDheW6n+aftCAo6L+Z5Liq5Yas5aSp5Lya5Ya35ZCXKSIsICJkdXJhdGlvbiI6ICIwMToxOSIsICJhcnRpc3QiOiAi5pmv5LqmIiwgImFsYnVtIjogIuaxn+WNl+aBtuS9nOWJp+WmguaenOi/meWwseaYr+eIseaDheW6n+aftCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mT1ltbWJ0ZUVHZ0RNdklfUnZBTWJBPT0vMTA5OTUxMTY5Njg3NjU4NDE1LmpwZyJ9", "name": "爱情废柴 (这个冬天会冷吗)-景亦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5qiC6aOf6ICFIiwgIm5hbWUiOiAi6Ieq5rihIiwgImFsYnVtTmFtZSI6ICLoh6rmuKEiLCAiYWxidW1JZCI6ICIzNjc1MDI2MjIiLCAic29uZ21pZCI6ICJ3eV8zMzYyMzY2ODc0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTMiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9SWkN1aUtGSHNPQWlWQk9vUGRPeXN3PT0vMTA5OTUxMTcyOTMyMzM5NTYwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4xOSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5Ljc5IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICI1Ni41NSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjU2LjU1IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjI5Ljc5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjE5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzM2MjM2Njg3NCIsICJ0aXRsZSI6ICLoh6rmuKEiLCAiZHVyYXRpb24iOiAiMDQ6NTMiLCAiYXJ0aXN0IjogIuaogumjn+iAhSIsICJhbGJ1bSI6ICLoh6rmuKEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvUlpDdWlLRkhzT0FpVkJPb1BkT3lzdz09LzEwOTk1MTE3MjkzMjMzOTU2MC5qcGcifQ==", "name": "自渡-樂食者", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O6L2p5a6HIiwgIm5hbWUiOiAi5p2l5LiN5Y+KIiwgImFsYnVtTmFtZSI6ICLmiJHku6znmoTmlYXkuosiLCAiYWxidW1JZCI6ICIzNTkyNTc5NjkiLCAic29uZ21pZCI6ICJ3eV8zMzU5Nzk5MjQ3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6NTAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9nT0xqcnZiVDN3VzRTQ2VnLXNQZ09RPT0vMTA5OTUxMTcyNzU3MzE1Mzk1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNTIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4LjgxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjMuMzcgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjQ0LjUzIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNDQuNTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjMuMzcgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOC44MSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjUyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMzNTk3OTkyNDciLCAidGl0bGUiOiAi5p2l5LiN5Y+KIiwgImR1cmF0aW9uIjogIjAzOjUwIiwgImFydGlzdCI6ICLmnY7ovanlrociLCAiYWxidW0iOiAi5oiR5Lus55qE5pWF5LqLIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2dPTGpydmJUM3dXNFNDZWctc1BnT1E9PS8xMDk5NTExNzI3NTczMTUzOTUuanBnIn0=", "name": "来不及-李轩宇", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP6I2J6I+M44CB6ZKi55uU5bCP5YWs5Li7IiwgIm5hbWUiOiAi566A5Y2V54ixICjlpbPlo7DlkIjllLEpIiwgImFsYnVtTmFtZSI6ICLnroDljZXniLHlj43mlrnlkJHnmoTpkp8iLCAiYWxidW1JZCI6ICIxODQ1NTk5NDciLCAic29uZ21pZCI6ICJ3eV8yMTIyMTA4OTgyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MjciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC8yTlVVWXdoaW9WcmNjbGZqRFBPdllBPT0vMTA5OTUxMTY5Mjk2NTIzMTg5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMDggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC4yMCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI2LjMxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI2LjMxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjIwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMDggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjEyMjEwODk4MiIsICJ0aXRsZSI6ICLnroDljZXniLEgKOWls+WjsOWQiOWUsSkiLCAiZHVyYXRpb24iOiAiMDQ6MjciLCAiYXJ0aXN0IjogIuWwj+iNieiPjOOAgemSoueblOWwj+WFrOS4uyIsICJhbGJ1bSI6ICLnroDljZXniLHlj43mlrnlkJHnmoTpkp8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvMk5VVVl3aGlvVnJjY2xmakRQT3ZZQT09LzEwOTk1MTE2OTI5NjUyMzE4OS5qcGcifQ==", "name": "简单爱 (女声合唱)-小草菌、钢盔小公主", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUkVFQlgiLCAibmFtZSI6ICLmgqzltJYiLCAiYWxidW1OYW1lIjogIuaCrOW0liIsICJhbGJ1bUlkIjogIjM2Nzk5NDU3NiIsICJzb25nbWlkIjogInd5XzMzNjM1MTU1OTMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjozMyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0tDaDFKRENKQ2dzQTdjUl9vclNreVE9PS8xMDk5NTExNzI5NDYwMDY5NDQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4zNCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuODUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxNC4wMSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxNC4wMSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1Ljg1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuMzQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzM2MzUxNTU5MyIsICJ0aXRsZSI6ICLmgqzltJYiLCAiZHVyYXRpb24iOiAiMDI6MzMiLCAiYXJ0aXN0IjogIlJFRUJYIiwgImFsYnVtIjogIuaCrOW0liIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9LQ2gxSkRDSkNnc0E3Y1Jfb3JTa3lRPT0vMTA5OTUxMTcyOTQ2MDA2OTQ0LmpwZyJ9", "name": "悬崖-REEBX", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O6I2j5rWp44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi6buYIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAyMeS4reWbveWlveWjsOmfsyDnrKwx5pyfIiwgImFsYnVtSWQiOiAiMTM1MDEwMjg4IiwgInNvbmdtaWQiOiAid3lfMTg4ODM1NDIzMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAyOjEzIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcGxlUWpLT0kyNmZTZW5rVUdpcERMdz09LzEwOTk1MTE2NjUzNzMwMDgzMi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyLjAzIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNS4wOSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjI0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjI0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUuMDkgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi4wMyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODg4MzU0MjMwIiwgInRpdGxlIjogIum7mCAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDI6MTMiLCAiYXJ0aXN0IjogIuadjuiNo+a1qeOAgeWRqOadsOS8piIsICJhbGJ1bSI6ICIyMDIx5Lit5Zu95aW95aOw6Z+zIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcGxlUWpLT0kyNmZTZW5rVUdpcERMdz09LzEwOTk1MTE2NjUzNzMwMDgzMi5qcGcifQ==", "name": "默 (Live)-李荣浩、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiVE9Q55m76ZmG5bCR5bm0LeW8oOazveemuSIsICJuYW1lIjogIuetieS9oOS4i+ivviIsICJhbGJ1bU5hbWUiOiAiIiwgImFsYnVtSWQiOiAiIiwgInNvbmdtaWQiOiAid3lfMjEyMDY4MTgxMSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjMxIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvVjdDR1VDM3M2TXhUaWh0amtNRWlsdz09LzEwOTk1MTE2OTI4NDQ3OTA3Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjQwIE1CIn1dLCAiX3R5cGVzIjogeyIxMjhrIjogeyJzaXplIjogIjEuNDAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjEyMDY4MTgxMSIsICJ0aXRsZSI6ICLnrYnkvaDkuIvor74iLCAiZHVyYXRpb24iOiAiMDE6MzEiLCAiYXJ0aXN0IjogIlRPUOeZu+mZhuWwkeW5tC3lvKDms73nprkiLCAiYWxidW0iOiAiIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1Y3Q0dVQzNzNk14VGlodGprTUVpbHc9PS8xMDk5NTExNjkyODQ0NzkwNzYuanBnIn0=", "name": "等你下课-TOP登陆少年-张泽禹", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5Y+R6LSi5qa06I6yIiwgIm5hbWUiOiAi6YCA5ZCOIiwgImFsYnVtTmFtZSI6ICLpgIDlkI4iLCAiYWxidW1JZCI6ICIxODk3Mzg1MTAiLCAic29uZ21pZCI6ICJ3eV8yMTM4Mzc2MjUxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MjAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9YVXR0R01wMy1qZ3R6T1kzUXptOUlRPT0vMTA5OTUxMTY5NDM0OTEzNjA0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5Ljk1IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjkuOTUgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45OCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMTM4Mzc2MjUxIiwgInRpdGxlIjogIumAgOWQjiIsICJkdXJhdGlvbiI6ICIwNDoyMCIsICJhcnRpc3QiOiAi5Y+R6LSi5qa06I6yIiwgImFsYnVtIjogIumAgOWQjiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9YVXR0R01wMy1qZ3R6T1kzUXptOUlRPT0vMTA5OTUxMTY5NDM0OTEzNjA0LmpwZyJ9", "name": "退后-发财榴莲", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiUkVFQlgiLCAibmFtZSI6ICLkvaDmiJEiLCAiYWxidW1OYW1lIjogIuS9oOaIkSIsICJhbGJ1bUlkIjogIjI4NDA4ODg5MCIsICJzb25nbWlkIjogInd5XzI3NDM1MTY5OTIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjozMiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2J2UWtRQlFEVk9CYTlEMHRPT1hWYVE9PS8xMDk5NTExNzE5NzY0NjgzNjguanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4zMiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuODAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxNC41NiBNQiJ9LCB7InR5cGUiOiAiZmxhYzI0Yml0IiwgInNpemUiOiAiMjguNDkgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMyNGJpdCI6IHsic2l6ZSI6ICIyOC40OSBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIxNC41NiBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1LjgwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuMzIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjc0MzUxNjk5MiIsICJ0aXRsZSI6ICLkvaDmiJEiLCAiZHVyYXRpb24iOiAiMDI6MzIiLCAiYXJ0aXN0IjogIlJFRUJYIiwgImFsYnVtIjogIuS9oOaIkSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9idlFrUUJRRFZPQmE5RDB0T09YVmFRPT0vMTA5OTUxMTcxOTc2NDY4MzY4LmpwZyJ9", "name": "你我-REEBX", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi55SY5LuV6ImvIiwgIm5hbWUiOiAi6b6Z5Y236aOOIiwgImFsYnVtTmFtZSI6ICLpkqLnkLTmgYvmm7IxMDEiLCAiYWxidW1JZCI6ICI4NjczIiwgInNvbmdtaWQiOiAid3lfODkxMjUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDowNCIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1NUY290b1o0SE1KRmVwTVRwWGY3LVE9PS84Njg2MTQxODU5OTkyNC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjcyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS4zMSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE0LjgzIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE0LjgzIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMzEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy43MiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV84OTEyNSIsICJ0aXRsZSI6ICLpvpnljbfpo44iLCAiZHVyYXRpb24iOiAiMDQ6MDQiLCAiYXJ0aXN0IjogIueUmOS7leiJryIsICJhbGJ1bSI6ICLpkqLnkLTmgYvmm7IxMDEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvU1Rjb3RvWjRITUpGZXBNVHBYZjctUT09Lzg2ODYxNDE4NTk5OTI0LmpwZyJ9", "name": "龙卷风-甘仕良", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiWm9lSmFuZSIsICJuYW1lIjogIuWuh+WumeWboOebuOmBh+iAjOe+juWlvSIsICJhbGJ1bU5hbWUiOiAi5a6H5a6Z5Zug55u46YGH6ICM576O5aW9IiwgImFsYnVtSWQiOiAiMjgzMzQzODg5IiwgInNvbmdtaWQiOiAid3lfMjc0MTU2NTEwNiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjE1IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRER3Q2lwWFU1cmJwN1BLbDJfNDdsQT09LzEwOTk1MTE3MTk1MjI3MTYzMC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjkwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS43NSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5LjQ4IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICI1Mi45MiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjUyLjkyIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjI5LjQ4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNzUgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45MCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNzQxNTY1MTA2IiwgInRpdGxlIjogIuWuh+WumeWboOebuOmBh+iAjOe+juWlvSIsICJkdXJhdGlvbiI6ICIwNDoxNSIsICJhcnRpc3QiOiAiWm9lSmFuZSIsICJhbGJ1bSI6ICLlroflrpnlm6Dnm7jpgYfogIznvo7lpb0iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRER3Q2lwWFU1cmJwN1BLbDJfNDdsQT09LzEwOTk1MTE3MTk1MjI3MTYzMC5qcGcifQ==", "name": "宇宙因相遇而美好-ZoeJane", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YiY6IqzIiwgIm5hbWUiOiAi6Z2S6Iqx55O3IiwgImFsYnVtTmFtZSI6ICLlho3phonkuIDmrKEu57K+6YCJ5LqMIiwgImFsYnVtSWQiOiAiMjU4MTkiLCAic29uZ21pZCI6ICJ3eV8yNTkxMzgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDoyOCIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2NMdW94UEVNNlJuSjQxaTFNeXVRcVE9PS81NTUyNTMzNzIwMzg4NjIuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4xMCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjI2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzAuNDggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzAuNDggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuMjYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4xMCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNTkxMzgiLCAidGl0bGUiOiAi6Z2S6Iqx55O3IiwgImR1cmF0aW9uIjogIjA0OjI4IiwgImFydGlzdCI6ICLliJjoirMiLCAiYWxidW0iOiAi5YaN6YaJ5LiA5qyhLueyvumAieS6jCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9jTHVveFBFTTZSbko0MWkxTXl1UXFRPT0vNTU1MjUzMzcyMDM4ODYyLmpwZyJ9", "name": "青花瓷-刘芳", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP5ou/6ZOBTGlsIExBVFRFIiwgIm5hbWUiOiAi5YWz6Zuo5aauIiwgImFsYnVtTmFtZSI6ICLmrKLvvIzmhIkiLCAiYWxidW1JZCI6ICIyNzkzMTg4MzYiLCAic29uZ21pZCI6ICJ3eV8yNzM1MzMzMjQ4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9Ja1BKdkhId2g4dUlkUkp5NS1CS3dRPT0vMTA5OTUxMTcxNTExMzcxMzE2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuODEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjUyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDMuMTggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNDMuMTggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS41MiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjgxIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzI3MzUzMzMyNDgiLCAidGl0bGUiOiAi5YWz6Zuo5aauIiwgImR1cmF0aW9uIjogIjA0OjA5IiwgImFydGlzdCI6ICLlsI/mi7/pk4FMaWwgTEFUVEUiLCAiYWxidW0iOiAi5qyi77yM5oSJIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0lrUEp2SEh3aDh1SWRSSnk1LUJLd1E9PS8xMDk5NTExNzE1MTEzNzEzMTYuanBnIn0=", "name": "关雨妮-小拿铁Lil LATTE", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6K645b+X5a6JIiwgIm5hbWUiOiAi5a6J6Z2ZIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5a6J5ZOl5a+55ZSx6Z+z5LmQ5LyaIiwgImFsYnVtSWQiOiAiMTUyMDgwMTI1IiwgInNvbmdtaWQiOiAid3lfMTk4MzY4NTcwOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjEwIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvU3hNQlY5ODBWQk52d0RlTXRNNE1zUT09LzEwOTk1MTE2NzkwMDQ3MjcxMC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyLjkwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNy4yNSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE5LjI0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE5LjI0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjcuMjUgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi45MCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTgzNjg1NzA4IiwgInRpdGxlIjogIuWuiemdmSAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDM6MTAiLCAiYXJ0aXN0IjogIuiuuOW/l+WuiSIsICJhbGJ1bSI6ICLlronlk6Xlr7nllLHpn7PkuZDkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvU3hNQlY5ODBWQk52d0RlTXRNNE1zUT09LzEwOTk1MTE2NzkwMDQ3MjcxMC5qcGcifQ==", "name": "安静 (Live)-许志安", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p6X5b+X54KrIiwgIm5hbWUiOiAi54Of6Iqx5piT5Ya3IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5oiR5piv5q2M5omL56ys5LiA5a2jIOesrDbmnJ8iLCAiYWxidW1JZCI6ICIyMjk4MDExIiwgInNvbmdtaWQiOiAid3lfMjU3MjMxNTciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNToxNiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3RvdU84S2JYb3k5SzFZTnU3aHZoM1E9PS8yMjU4Mzk2ODgzNDU0MTA5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4wOCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI2LjYwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI2LjYwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjA4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODMgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjU3MjMxNTciLCAidGl0bGUiOiAi54Of6Iqx5piT5Ya3IChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNToxNiIsICJhcnRpc3QiOiAi5p6X5b+X54KrIiwgImFsYnVtIjogIuaIkeaYr+atjOaJi+esrOS4gOWtoyDnrKw25pyfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3RvdU84S2JYb3k5SzFZTnU3aHZoM1E9PS8yMjU4Mzk2ODgzNDU0MTA5LmpwZyJ9", "name": "烟花易冷 (Live)-林志炫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6aaZ6aaZIiwgIm5hbWUiOiAi5Lic6aOO56C0IiwgImFsYnVtTmFtZSI6ICLpppnpppnntKvnvZflhbAiLCAiYWxidW1JZCI6ICIzNDkwNjQ1NCIsICJzb25nbWlkIjogInd5XzQzNTAwNDc3NCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjM4IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvQ1VteG42Y25TcGNwM29PX2xXaDhOdz09LzEwOTk1MTE2NzkxNzIzNDg4Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjE3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuOTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzNi4yNyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzNi4yNyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi45MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI1LjE3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQzNTAwNDc3NCIsICJ0aXRsZSI6ICLkuJzpo47noLQiLCAiZHVyYXRpb24iOiAiMDU6MzgiLCAiYXJ0aXN0IjogIummmemmmSIsICJhbGJ1bSI6ICLpppnpppnntKvnvZflhbAiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvQ1VteG42Y25TcGNwM29PX2xXaDhOdz09LzEwOTk1MTE2NzkxNzIzNDg4Ni5qcGcifQ==", "name": "东风破-香香", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi56iL5qmZIiwgIm5hbWUiOiAi5LiN6K+lKGZlYXTlsKTkuIDlnagpIiwgImFsYnVtTmFtZSI6ICLmiJHnmoTnv7vllLEiLCAiYWxidW1JZCI6ICIxNTc4OTMwNTYiLCAic29uZ21pZCI6ICJ3eV8yMTE2Nzc4ODQwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NDkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9pdHJ6MkktS0gxZUluWkpXSVEwcWd3PT0vMTA5OTUxMTY5MjU0MTYwMTU4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4wNSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjU3LjM3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjU3LjM3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjA1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjExNjc3ODg0MCIsICJ0aXRsZSI6ICLkuI3or6UoZmVhdOWwpOS4gOWdqCkiLCAiZHVyYXRpb24iOiAiMDQ6NDkiLCAiYXJ0aXN0IjogIueoi+apmSIsICJhbGJ1bSI6ICLmiJHnmoTnv7vllLEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvaXRyejJJLUtIMWVJblpKV0lRMHFndz09LzEwOTk1MTE2OTI1NDE2MDE1OC5qcGcifQ==", "name": "不该(feat尤一坨)-程橙", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiWWl4aW4iLCAibmFtZSI6ICLovajov7kiLCAiYWxidW1OYW1lIjogImxpdmUt5aSN5Yi7IiwgImFsYnVtSWQiOiAiMTk0MTcwMjA2IiwgInNvbmdtaWQiOiAid3lfMjE1MTMzMTAxMiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjIyIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvUmZJRVNlbUJZcFRiM1ZGeG8yLVlWUT09LzEwOTk1MTE2OTU0ODE1NTk4MC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjkxIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuMjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI2NS43OSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI2NS43OSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi4yOSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjkxIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxNTEzMzEwMTIiLCAidGl0bGUiOiAi6L2o6L+5IiwgImR1cmF0aW9uIjogIjA1OjIyIiwgImFydGlzdCI6ICJZaXhpbiIsICJhbGJ1bSI6ICJsaXZlLeWkjeWIuyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9SZklFU2VtQllwVGIzVkZ4bzItWVZRPT0vMTA5OTUxMTY5NTQ4MTU1OTgwLmpwZyJ9", "name": "轨迹-Yixin", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5r285amz5Za144CB5piv5qKF5LiN5piv6I6TIiwgIm5hbWUiOiAi54+K55Ga5rW3IiwgImFsYnVtTmFtZSI6ICLnj4rnkZrmtbciLCAiYWxidW1JZCI6ICIxODc3NjQxMjgiLCAic29uZ21pZCI6ICJ3eV8yMTMyMDA2OTA3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MTciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9lZ3g5U1JQYkwyYW9IWVBCRDlyMnV3PT0vMTA5OTUxMTY5MzgwNjE4NTI5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjgxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjguNzkgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjUyLjI5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNTIuMjkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjguNzkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS44MSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMzIwMDY5MDciLCAidGl0bGUiOiAi54+K55Ga5rW3IiwgImR1cmF0aW9uIjogIjA0OjE3IiwgImFydGlzdCI6ICLmvbzlqbPllrXjgIHmmK/mooXkuI3mmK/ojpMiLCAiYWxidW0iOiAi54+K55Ga5rW3IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2VneDlTUlBiTDJhb0hZUEJEOXIydXc9PS8xMDk5NTExNjkzODA2MTg1MjkuanBnIn0=", "name": "珊瑚海-潼婳喵、是梅不是莓", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi54aK5pmT6ZuvIiwgIm5hbWUiOiAi5b2p6Jm544CAIiwgImFsYnVtTmFtZSI6ICLpgYfop4Hnvo7kuL0iLCAiYWxidW1JZCI6ICIzMDk0MCIsICJzb25nbWlkIjogInd5XzMxMjQ1MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjAzIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSE9sSVhIWXljLS10VVc3Z0MzWl9Jdz09LzEwOTk1MTE2NzkxNzIzMjY5OS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjYzIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTEuNTcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMC43NSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMC43NSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMS41NyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjYzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMxMjQ1MSIsICJ0aXRsZSI6ICLlvanombnjgIAiLCAiZHVyYXRpb24iOiAiMDU6MDMiLCAiYXJ0aXN0IjogIueGiuaZk+mbryIsICJhbGJ1bSI6ICLpgYfop4Hnvo7kuL0iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSE9sSVhIWXljLS10VVc3Z0MzWl9Jdz09LzEwOTk1MTE2NzkxNzIzMjY5OS5qcGcifQ==", "name": "彩虹\u3000-熊晓雯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiVEblrrbml48iLCAibmFtZSI6ICLnsonoibLmtbfmtIsiLCAiYWxidW1OYW1lIjogIiIsICJhbGJ1bUlkIjogIiIsICJzb25nbWlkIjogInd5XzIxMTY3MDYxNzkiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTo1NiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0kzRnRTOW5naDhkZmVWT1pSbUpxT2c9PS8xMDk5NTExNjkyNTM2NzMzMTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS43OCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIxLjc4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMTY3MDYxNzkiLCAidGl0bGUiOiAi57KJ6Imy5rW35rSLIiwgImR1cmF0aW9uIjogIjAxOjU2IiwgImFydGlzdCI6ICJURuWutuaXjyIsICJhbGJ1bSI6ICIiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSTNGdFM5bmdoOGRmZVZPWlJtSnFPZz09LzEwOTk1MTE2OTI1MzY3MzMxMy5qcGcifQ==", "name": "粉色海洋-TF家族", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YC46L6wIiwgIm5hbWUiOiAi5YCf5Y+jIiwgImFsYnVtTmFtZSI6ICLnv7vllLHnmoQiLCAiYWxidW1JZCI6ICIxODI5MzM3NjAiLCAic29uZ21pZCI6ICJ3eV8yMTE3MDQxNjU4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MjAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9QWGw5d3lNTTM0REVKVnpabmN0Y3ZnPT0vMTA5OTUxMTY5MjU0MDEyNTg4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjkyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjUuMjIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjUuMjIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS45MiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjk3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMTcwNDE2NTgiLCAidGl0bGUiOiAi5YCf5Y+jIiwgImR1cmF0aW9uIjogIjA0OjIwIiwgImFydGlzdCI6ICLpgLjovrAiLCAiYWxidW0iOiAi57+75ZSx55qEIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1BYbDl3eU1NMzRERUpWelpuY3Rjdmc9PS8xMDk5NTExNjkyNTQwMTI1ODguanBnIn0=", "name": "借口-逸辰", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5auj6Zuo5ZCWIiwgIm5hbWUiOiAi54+K55Ga5rW3IiwgImFsYnVtTmFtZSI6ICLnj4rnkZrmtbciLCAiYWxidW1JZCI6ICIxODYyODI2OTUiLCAic29uZ21pZCI6ICJ3eV8yMTI3Njg5MTcxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MTUiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC95OHN0UGMxSkNPelQ3OXZmRk1QZ3pBPT0vMTA5OTUxMTY5MzQ3OTc4OTg2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTAgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5Ljc1IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDkuNjkgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNDkuNjkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS43NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjkwIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMjc2ODkxNzEiLCAidGl0bGUiOiAi54+K55Ga5rW3IiwgImR1cmF0aW9uIjogIjA0OjE1IiwgImFydGlzdCI6ICLlq6Ppm6jlkJYiLCAiYWxidW0iOiAi54+K55Ga5rW3IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3k4c3RQYzFKQ096VDc5dmZGTVBnekE9PS8xMDk5NTExNjkzNDc5Nzg5ODYuanBnIn0=", "name": "珊瑚海-嫣雨吖", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Jyh56yU5bCP5pawIiwgIm5hbWUiOiAi6Zuq5Zyw6YeM55u454ixIiwgImFsYnVtTmFtZSI6ICLpm6rlnLDph4znm7jniLEg6LaF6LaF77yI5ZGo5rC46LaF77yJL+m+meeMqyDkuI3or6XvvIjpm6rlnLDph4znm7jniLHvvIzku5bku6zor7Tpm7bkuIvnmoToqpPoqIDkuI3kvJrlnY/vvIkgeHh4eC4iLCAiYWxidW1JZCI6ICIxNzcwODEzNDciLCAic29uZ21pZCI6ICJ3eV8yMDkyMDQzOTk0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6NDciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC83aERHNzFnbzVNWlpVdmJhejVDTnNRPT0vMTA5OTUxMTY4OTAzMzgzNzc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuNjQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI0LjEwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiOS42OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI5LjY4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjQuMTAgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS42NCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMDkyMDQzOTk0IiwgInRpdGxlIjogIumbquWcsOmHjOebuOeIsSIsICJkdXJhdGlvbiI6ICIwMTo0NyIsICJhcnRpc3QiOiAi6Jyh56yU5bCP5pawIiwgImFsYnVtIjogIumbquWcsOmHjOebuOeIsSDotoXotoXvvIjlkajmsLjotoXvvIkv6b6Z54yrIOS4jeivpe+8iOmbquWcsOmHjOebuOeIse+8jOS7luS7rOivtOmbtuS4i+eahOiqk+iogOS4jeS8muWdj++8iSB4eHh4LiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC83aERHNzFnbzVNWlpVdmJhejVDTnNRPT0vMTA5OTUxMTY4OTAzMzgzNzc1LmpwZyJ9", "name": "雪地里相爱-蜡笔小新", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57uI5q2MIiwgIm5hbWUiOiAi6IGK5LiN5a6M55qE5pu+57uPIiwgImFsYnVtTmFtZSI6ICLlhYnCt+mBhyIsICJhbGJ1bUlkIjogIjE1MjgwMTU5MiIsICJzb25nbWlkIjogInd5XzE5ODczNTc4MDEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTowOSIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzJwMEZYZzJBMkdkOFRSeXl4ZnRHZnc9PS8xMDk5NTExNjc5NDI3NjA2ODkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS4wNyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjIuNjcgTUIifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiMi42NyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjA3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5ODczNTc4MDEiLCAidGl0bGUiOiAi6IGK5LiN5a6M55qE5pu+57uPIiwgImR1cmF0aW9uIjogIjAxOjA5IiwgImFydGlzdCI6ICLnu4jmrYwiLCAiYWxidW0iOiAi5YWJwrfpgYciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvMnAwRlhnMkEyR2Q4VFJ5eXhmdEdmdz09LzEwOTk1MTE2Nzk0Mjc2MDY4OS5qcGcifQ==", "name": "聊不完的曾经-终歌", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi562x57SrIiwgIm5hbWUiOiAi5Lic6aOO56C0IiwgImFsYnVtTmFtZSI6ICLkuI3kvJrlk63ms6PnmoTlpbPkuroiLCAiYWxidW1JZCI6ICIzMTI4NSIsICJzb25nbWlkIjogInd5XzMxNTgxOSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjMyIiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvOExQaTEtOE95cE9vZVZpRmtOS0VBQT09LzEwOTk1MTE2NzkxNzIyNzkwNi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjA4IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuNzAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMS4wOCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMS4wOCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi43MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI1LjA4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMxNTgxOSIsICJ0aXRsZSI6ICLkuJzpo47noLQiLCAiZHVyYXRpb24iOiAiMDU6MzIiLCAiYXJ0aXN0IjogIuetsee0qyIsICJhbGJ1bSI6ICLkuI3kvJrlk63ms6PnmoTlpbPkuroiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvOExQaTEtOE95cE9vZVZpRmtOS0VBQT09LzEwOTk1MTE2NzkxNzIyNzkwNi5qcGcifQ==", "name": "东风破-筱紫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi546L5Li5IiwgIm5hbWUiOiAi5YWw5Lqt5bqPIiwgImFsYnVtTmFtZSI6ICLlr4Llr57mg4XmrYwiLCAiYWxidW1JZCI6ICIzMDQxOSIsICJzb25nbWlkIjogInd5XzMwNjQzNCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjM4IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcHR6dW5ma2JTemlGZ3lFZVlNYWlzQT09LzEwOTk1MTE2NzkxNzIzNjU5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjI1IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuNjMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOS4xNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOS4xNSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC42MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjI1IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzMwNjQzNCIsICJ0aXRsZSI6ICLlhbDkuq3luo8iLCAiZHVyYXRpb24iOiAiMDQ6MzgiLCAiYXJ0aXN0IjogIueOi+S4uSIsICJhbGJ1bSI6ICLlr4Llr57mg4XmrYwiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvcHR6dW5ma2JTemlGZ3lFZVlNYWlzQT09LzEwOTk1MTE2NzkxNzIzNjU5Mi5qcGcifQ==", "name": "兰亭序-王丹", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6I6r5paH6JSaIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwKExpdmUpIiwgImFsYnVtTmFtZSI6ICLluKbojqvmlofolJrlm57lrrbpn7PkuZDkvJoiLCAiYWxidW1JZCI6ICIyNzU2OSIsICJzb25nbWlkIjogInd5XzI3NzcyMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjM1IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvZUJhcHhfb1pGNWRGMHR2WG1KazJDUT09Lzk4OTU2MDQ2NTEyMDE0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5LjgxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI5LjgxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjUyIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjc3NzIwIiwgInRpdGxlIjogIueIseaIkeWIq+i1sChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDozNSIsICJhcnRpc3QiOiAi6I6r5paH6JSaIiwgImFsYnVtIjogIuW4puiOq+aWh+iUmuWbnuWutumfs+S5kOS8miIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9lQmFweF9vWkY1ZEYwdHZYbUprMkNRPT0vOTg5NTYwNDY1MTIwMTQuanBnIn0=", "name": "爱我别走(Live)-莫文蔚", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6L+e6K+X6ZuFIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiU2hpZ2EgTG92ZSYgSG9wZSBVbnBsdWdnZWQgMjAxMiBMaXZlIiwgImFsYnVtSWQiOiAiMjUzMjE4MCIsICJzb25nbWlkIjogInd5XzI2NjA4NjM0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzgiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mQ0RrMEp0cFZqRlFYS290UnU4X0Z3PT0vMTA5OTUxMTYzOTg0MDE4ODAxLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC42MyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMwLjg0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMwLjg0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjYzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjY2MDg2MzQiLCAidGl0bGUiOiAi54ix5oiR5Yir6LWwIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDozOCIsICJhcnRpc3QiOiAi6L+e6K+X6ZuFIiwgImFsYnVtIjogIlNoaWdhIExvdmUmIEhvcGUgVW5wbHVnZ2VkIDIwMTIgTGl2ZSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mQ0RrMEp0cFZqRlFYS290UnU4X0Z3PT0vMTA5OTUxMTYzOTg0MDE4ODAxLmpwZyJ9", "name": "爱我别走 (Live)-连诗雅", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5aW95oOz6KaB5Y+q6Zi/5ouJ5pav5YqgIiwgIm5hbWUiOiAi5oiRbHVvbGVp5oOF57uq6Zu255+z5Y2SIiwgImFsYnVtTmFtZSI6ICLjgIrlk47lk5/kuI3plJnlk6bjgIsiLCAiYWxidW1JZCI6ICIxMzUyODYwNjAiLCAic29uZ21pZCI6ICJ3eV8xOTEzMjE2Njc2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MDgiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9LYkNRYlhvaDc0M2pZVHhOZVk0OGdnPT0vMTA5OTUxMTY2NTU4MjcyOTI4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuOTcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI0LjkyIE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjQuOTIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS45NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTEzMjE2Njc2IiwgInRpdGxlIjogIuaIkWx1b2xlaeaDhee7qumbtuefs+WNkiIsICJkdXJhdGlvbiI6ICIwMjowOCIsICJhcnRpc3QiOiAi5aW95oOz6KaB5Y+q6Zi/5ouJ5pav5YqgIiwgImFsYnVtIjogIuOAiuWTjuWTn+S4jemUmeWTpuOAiyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9LYkNRYlhvaDc0M2pZVHhOZVk0OGdnPT0vMTA5OTUxMTY2NTU4MjcyOTI4LmpwZyJ9", "name": "我luolei情绪零石卒-好想要只阿拉斯加", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5aSn5aSn5oCq5bCG5Yab44CB5oOF5LmL5a2QIiwgIm5hbWUiOiAi5pm05aSpIiwgImFsYnVtTmFtZSI6ICLpvZDlhajvvIjnkKrmnYNESu+8iSIsICJhbGJ1bUlkIjogIjEzNjU0ODgxMyIsICJzb25nbWlkIjogInd5XzE4OTc2Mzc3NTAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzozNiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzBSS2JVeFNscUpTLWFhWm16bGRQTEE9PS8xMDk5NTExNjY2NjQyNDkxOTcuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4zMSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguMjcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMi41OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyMi41OCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI4LjI3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuMzEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg5NzYzNzc1MCIsICJ0aXRsZSI6ICLmmbTlpKkiLCAiZHVyYXRpb24iOiAiMDM6MzYiLCAiYXJ0aXN0IjogIuWkp+Wkp+aAquWwhuWGm+OAgeaDheS5i+WtkCIsICJhbGJ1bSI6ICLpvZDlhajvvIjnkKrmnYNESu+8iSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC8wUktiVXhTbHFKUy1hYVptemxkUExBPT0vMTA5OTUxMTY2NjY0MjQ5MTk3LmpwZyJ9", "name": "晴天-大大怪将军、情之子", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiREogSmFjayIsICJuYW1lIjogIuS5n+WPquaYr+aAlemUmei/hyIsICJhbGJ1bU5hbWUiOiAiREogSmFjayBSZW1peCIsICJhbGJ1bUlkIjogIjEzNTM4MzAzNiIsICJzb25nbWlkIjogInd5XzE4OTIxNDU4MDQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzowNyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L242bnhOU3pqRkNQMnY1V2k2N0JWVHc9PS8xMDk5NTExNjY1NjQxMDI3NTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi44NiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMTUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzOC44NCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzOC44NCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjE1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuODYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg5MjE0NTgwNCIsICJ0aXRsZSI6ICLkuZ/lj6rmmK/mgJXplJnov4ciLCAiZHVyYXRpb24iOiAiMDM6MDciLCAiYXJ0aXN0IjogIkRKIEphY2siLCAiYWxidW0iOiAiREogSmFjayBSZW1peCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9uNm54TlN6akZDUDJ2NVdpNjdCVlR3PT0vMTA5OTUxMTY2NTY0MTAyNzUzLmpwZyJ9", "name": "也只是怕错过-DJ Jack", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP5pin44CB5a6P55SfIiwgIm5hbWUiOiAi5Y2D6YeM5LmL5aSWIiwgImFsYnVtTmFtZSI6ICLniLHmmKfnlJ8iLCAiYWxidW1JZCI6ICIzNTQ3NiIsICJzb25nbWlkIjogInd5XzM1OTI0NiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjM0IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdVBnSVd5d0FUdWptYVM5bjB6dzFzUT09LzEwOTk1MTE2NzkxNzIyODM2OC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1LjEwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuNzQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOS40OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOS40OCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi43NCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI1LjEwIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzM1OTI0NiIsICJ0aXRsZSI6ICLljYPph4zkuYvlpJYiLCAiZHVyYXRpb24iOiAiMDU6MzQiLCAiYXJ0aXN0IjogIuWwj+aYp+OAgeWuj+eUnyIsICJhbGJ1bSI6ICLniLHmmKfnlJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdVBnSVd5d0FUdWptYVM5bjB6dzFzUT09LzEwOTk1MTE2NzkxNzIyODM2OC5qcGcifQ==", "name": "千里之外-小昧、宏生", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5b2t576aIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwIiwgImFsYnVtTmFtZSI6ICLnu5nmiJHllLHov4fnmoTnlLflranku6wiLCAiYWxidW1JZCI6ICIyMzMwNzcyIiwgInNvbmdtaWQiOiAid3lfMjU4Mzk0NTMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo0MyIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0VpQkhEeUE1RkNXUzQ0bjZsSDFid3c9PS8xMDk5NTExNjc3NjE4NTI5OTYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4zMyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjgzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjcuOTMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjcuOTMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuODMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4zMyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNTgzOTQ1MyIsICJ0aXRsZSI6ICLniLHmiJHliKvotbAiLCAiZHVyYXRpb24iOiAiMDQ6NDMiLCAiYXJ0aXN0IjogIuW9ree+miIsICJhbGJ1bSI6ICLnu5nmiJHllLHov4fnmoTnlLflranku6wiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRWlCSER5QTVGQ1dTNDRuNmxIMWJ3dz09LzEwOTk1MTE2Nzc2MTg1Mjk5Ni5qcGcifQ==", "name": "爱我别走-彭羚", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5Y2O5pmo5a6HIiwgIm5hbWUiOiAi5Y+M5oiq5qONIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5q2M5omLMjAxOCDnrKw25pyfIiwgImFsYnVtSWQiOiAiMzc1NDIzNzEiLCAic29uZ21pZCI6ICJ3eV81MzY2MjQ0NTAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNTo0NSIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2JGeEx5cmQxemgzWnA4eHNwT2NTUmc9PS8xMDk5NTExNjY1NTc5MTkwMjkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNS4yNyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEzLjE4IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDEuMDMgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjcyLjc0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNzIuNzQgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDEuMDMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTMuMTggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNS4yNyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV81MzY2MjQ0NTAiLCAidGl0bGUiOiAi5Y+M5oiq5qONIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNTo0NSIsICJhcnRpc3QiOiAi5Y2O5pmo5a6HIiwgImFsYnVtIjogIuatjOaJizIwMTgg56ysNuacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9iRnhMeXJkMXpoM1pwOHhzcE9jU1JnPT0vMTA5OTUxMTY2NTU3OTE5MDI5LmpwZyJ9", "name": "双截棍 (Live)-华晨宇", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IOG5bCP6ay85Yi654ysIiwgIm5hbWUiOiAi5LuO5YmN5LuO5YmN5pyJ5Liq5Lq654ix5L2g5b6I5LmFIiwgImFsYnVtTmFtZSI6ICLlsI/mma/kuI3mmK/kupXnmoTkuJPovpEiLCAiYWxidW1JZCI6ICIxNDM3NDIwMTciLCAic29uZ21pZCI6ICJ3eV8xOTU1OTk4MDUyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6NDAiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9FT19DQy1wUGdzTzlxN3VLY0IxSnB3PT0vMTA5OTUxMTY3MzIwMjkyMDczLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjYzMy4xMCBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuNTUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxLjExIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEuMTEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS41NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI2MzMuMTAgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1NTk5ODA1MiIsICJ0aXRsZSI6ICLku47liY3ku47liY3mnInkuKrkurrniLHkvaDlvojkuYUiLCAiZHVyYXRpb24iOiAiMDA6NDAiLCAiYXJ0aXN0IjogIuiDhuWwj+msvOWIuueMrCIsICJhbGJ1bSI6ICLlsI/mma/kuI3mmK/kupXnmoTkuJPovpEiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRU9fQ0MtcFBnc085cTd1S2NCMUpwdz09LzEwOTk1MTE2NzMyMDI5MjA3My5qcGcifQ==", "name": "从前从前有个人爱你很久-胆小鬼刺猬", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bCP5pin44CB5a6P55SfIiwgIm5hbWUiOiAi6I+K6Iqx5Y+wIiwgImFsYnVtTmFtZSI6ICLniLHmmKfnlJ8iLCAiYWxidW1JZCI6ICIzNTQ3NiIsICJzb25nbWlkIjogInd5XzM1OTIzNCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjU5IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdVBnSVd5d0FUdWptYVM5bjB6dzFzUT09LzEwOTk1MTE2NzkxNzIyODM2OC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjY1IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS4xMyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE5Ljc0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE5Ljc0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy42NSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8zNTkyMzQiLCAidGl0bGUiOiAi6I+K6Iqx5Y+wIiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICLlsI/mmKfjgIHlro/nlJ8iLCAiYWxidW0iOiAi54ix5pin55SfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L3VQZ0lXeXdBVHVqbWFTOW4wencxc1E9PS8xMDk5NTExNjc5MTcyMjgzNjguanBnIn0=", "name": "菊花台-小昧、宏生", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB6JSh5aiB5rO9IiwgIm5hbWUiOiAi6a2U5pyv5LiO5q2M5puy77ya5ZGK55m95rCU55CDIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOOW5tOS4reWkrueUteinhuWPsOaYpeiKguiBlOasouaZmuS8miIsICJhbGJ1bUlkIjogIjM3NTc5MDYxIiwgInNvbmdtaWQiOiAid3lfNTM2NTcwNDUwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MzQiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC91SUZJM1p4LTNhaU1Oc0ZsQU1CeEJRPT0vMTA5OTUxMTYzMTQyMTYyMjI2LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuMjcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4LjE3IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjguMTcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy4yNyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV81MzY1NzA0NTAiLCAidGl0bGUiOiAi6a2U5pyv5LiO5q2M5puy77ya5ZGK55m95rCU55CDIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwMzozNCIsICJhcnRpc3QiOiAi5ZGo5p2w5Lym44CB6JSh5aiB5rO9IiwgImFsYnVtIjogIjIwMTjlubTkuK3lpK7nlLXop4blj7DmmKXoioLogZTmrKLmmZrkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvdUlGSTNaeC0zYWlNTnNGbEFNQnhCUT09LzEwOTk1MTE2MzE0MjE2MjIyNi5qcGcifQ==", "name": "魔术与歌曲:告白气球 (Live)-周杰伦、蔡威泽", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O5Zyj5p2wIiwgIm5hbWUiOiAi5a6J6Z2ZIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5q2M5omLMjAxOCDnrKw05pyfIiwgImFsYnVtSWQiOiAiMzczOTE3MTkiLCAic29uZ21pZCI6ICJ3eV81MzUwMjgwMTQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo1OSIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2ZNbzhfbXNhUE9GaEprQjNlYWh2YlE9PS8xMDk5NTExNjY1NTc4ODg2OTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjQzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzEuNDkgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjU4Ljk5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiNTguOTkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMzEuNDkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuNDMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC41NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV81MzUwMjgwMTQiLCAidGl0bGUiOiAi5a6J6Z2ZIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDo1OSIsICJhcnRpc3QiOiAi5p2O5Zyj5p2wIiwgImFsYnVtIjogIuatjOaJizIwMTgg56ysNOacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9mTW84X21zYVBPRmhKa0IzZWFodmJRPT0vMTA5OTUxMTY2NTU3ODg4NjkzLmpwZyJ9", "name": "安静 (Live)-李圣杰", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5Li75ZSxLumYv+ajriIsICJuYW1lIjogIuaWreS6hueahOW8pu+8iOW/g+WKqOeJiO+8iSIsICJhbGJ1bU5hbWUiOiAi54W95oOFIiwgImFsYnVtSWQiOiAiMTY3NDIyMjAyIiwgInNvbmdtaWQiOiAid3lfMjA1NTI2Njc4NCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjE5IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvVTV0ZkFrc2ctdlVueFRtZHBRLXlJZz09LzEwOTk1MTE2ODY2OTM3NTAxOS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjIyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMy4wNSBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIzLjA1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuMjIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjA1NTI2Njc4NCIsICJ0aXRsZSI6ICLmlq3kuobnmoTlvKbvvIjlv4PliqjniYjvvIkiLCAiZHVyYXRpb24iOiAiMDE6MTkiLCAiYXJ0aXN0IjogIuS4u+WUsS7pmL/mo64iLCAiYWxidW0iOiAi54W95oOFIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L1U1dGZBa3NnLXZVbnhUbWRwUS15SWc9PS8xMDk5NTExNjg2NjkzNzUwMTkuanBnIn0=", "name": "断了的弦(心动版)-主唱.阿森", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiYW5naW45OCIsICJuYW1lIjogIjIwMjEuMTIuMjAiLCAiYWxidW1OYW1lIjogIuaXoOiBiiIsICJhbGJ1bUlkIjogIjEzNjgxMTUxOCIsICJzb25nbWlkIjogInd5XzE5MDU2OTI4NDciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDozMCIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2N2VHFrZWZDa1htdHdYQ2FfODFCMkE9PS8xMDk5NTExNjY2NzM4OTU5OTUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNDc4LjQxIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMS4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjQuMjMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNC4yMyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQ3OC40MSBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTA1NjkyODQ3IiwgInRpdGxlIjogIjIwMjEuMTIuMjAiLCAiZHVyYXRpb24iOiAiMDA6MzAiLCAiYXJ0aXN0IjogImFuZ2luOTgiLCAiYWxidW0iOiAi5peg6IGKIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L2N2VHFrZWZDa1htdHdYQ2FfODFCMkE9PS8xMDk5NTExNjY2NzM4OTU5OTUuanBnIn0=", "name": "2021.12.20-angin98", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5byg5a6HIiwgIm5hbWUiOiAi6L+36L+t6aaZIiwgImFsYnVtTmFtZSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysNeacnyIsICJhbGJ1bUlkIjogIjI3ODY4NjQiLCAic29uZ21pZCI6ICJ3eV8yODQyNzc1MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjU1IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvb0Zwczl1OXFrdmx2bVV0VmIzYkVSdz09LzU4ODg5ODQyNzg1NjM2NjMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41MiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjI5IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzIuMjEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzIuMjEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuMjkgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC41MiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yODQyNzc1MSIsICJ0aXRsZSI6ICLov7fov63pppkiLCAiZHVyYXRpb24iOiAiMDQ6NTUiLCAiYXJ0aXN0IjogIuW8oOWuhyIsICJhbGJ1bSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysNeacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9vRnBzOXU5cWt2bHZtVXRWYjNiRVJ3PT0vNTg4ODk4NDI3ODU2MzY2My5qcGcifQ==", "name": "迷迭香-张宇", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImFsYnVtTmFtZSI6ICLnnIvmiJE3MuWPmCIsICJhbGJ1bUlkIjogIjIxMzQ5IiwgInNvbmdtaWQiOiAid3lfMjEwMDQ5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTQiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84RDJQZDdFdXZHYm9NeUUyeFdjNDdBPT0vMTA5OTUxMTcyNDUzNzEyMDI1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNTAgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4yNCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMzLjMwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMzLjMwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjI0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNTAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjEwMDQ5IiwgInRpdGxlIjogIuW4g+aLieagvOW5v+WcuiIsICJkdXJhdGlvbiI6ICIwNDo1NCIsICJhcnRpc3QiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgImFsYnVtIjogIueci+aIkTcy5Y+YIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0LzhEMlBkN0V1dkdib015RTJ4V2M0N0E9PS8xMDk5NTExNzI0NTM3MTIwMjUuanBnIn0=", "name": "布拉格广场-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi6aqR5aOr57K+56WeIiwgImFsYnVtTmFtZSI6ICLnnIvmiJE3MuWPmCIsICJhbGJ1bUlkIjogIjIxMzQ5IiwgInNvbmdtaWQiOiAid3lfMjEwMDYyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MTciLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84RDJQZDdFdXZHYm9NeUUyeFdjNDdBPT0vMTA5OTUxMTcyNDUzNzEyMDI1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuOTMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjgzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzAuNDAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzAuNDAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOS44MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIxMDA2MiIsICJ0aXRsZSI6ICLpqpHlo6vnsr7npZ4iLCAiZHVyYXRpb24iOiAiMDQ6MTciLCAiYXJ0aXN0IjogIuiUoeS+neael+OAgeWRqOadsOS8piIsICJhbGJ1bSI6ICLnnIvmiJE3MuWPmCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84RDJQZDdFdXZHYm9NeUUyeFdjNDdBPT0vMTA5OTUxMTcyNDUzNzEyMDI1LmpwZyJ9", "name": "骑士精神-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O5YWL5Yuk44CB5a6556WW5YS/IiwgIm5hbWUiOiAi5YWL5LiN5a6557yT57uE5puyIiwgImFsYnVtTmFtZSI6ICLmiJHmmK/mrYzmiYvnrKzlm5vlraMg5Y+M5bm05beF5bOw5LyaIiwgImFsYnVtSWQiOiAiMzQ2MTE0NzQiLCAic29uZ21pZCI6ICJ3eV80MDk5MzE0ODgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNzoyMiIsICJpbWciOiAiaHR0cHM6Ly9wMi5tdXNpYy4xMjYubmV0L0stWUN6U3lIYWNWSXBob3VLdWQwU1E9PS8xMzgwOTg2NjEwODY4MTU4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjYuNzUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxNi44OCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjUwLjA5IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICI5MC43MCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjkwLjcwIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjUwLjA5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjE2Ljg4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjYuNzUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNDA5OTMxNDg4IiwgInRpdGxlIjogIuWFi+S4jeWuuee8k+e7hOabsiIsICJkdXJhdGlvbiI6ICIwNzoyMiIsICJhcnRpc3QiOiAi5p2O5YWL5Yuk44CB5a6556WW5YS/IiwgImFsYnVtIjogIuaIkeaYr+atjOaJi+esrOWbm+WtoyDlj4zlubTlt4Xls7DkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvSy1ZQ3pTeUhhY1ZJcGhvdUt1ZDBTUT09LzEzODA5ODY2MTA4NjgxNTguanBnIn0=", "name": "克不容缓组曲-李克勤、容祖儿", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6XIiwgIm5hbWUiOiAi5YCS5bimIiwgImFsYnVtTmFtZSI6ICLmsYLlqZrkuovliqHmiYAg55S16KeG5Y6f5aOw5bimIiwgImFsYnVtSWQiOiAiNDg5OTg2IiwgInNvbmdtaWQiOiAid3lfNDg3NjIwMiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjI2IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvRGVLR05fd1F3aWhMWlJCY0hTUS1FQT09LzEwOTk1MTE3MTMxNTg5MzE5OS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjA2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuMTYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMS44NCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMS44NCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC4xNiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjA2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ4NzYyMDIiLCAidGl0bGUiOiAi5YCS5bimIiwgImR1cmF0aW9uIjogIjA0OjI2IiwgImFydGlzdCI6ICLolKHkvp3mnpciLCAiYWxidW0iOiAi5rGC5ama5LqL5Yqh5omAIOeUteinhuWOn+WjsOW4piIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC9EZUtHTl93UXdpaExaUkJjSFNRLUVBPT0vMTA5OTUxMTcxMzE1ODkzMTk5LmpwZyJ9", "name": "倒带-蔡依林", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi576k5pifIiwgIm5hbWUiOiAi5Y+v54ix5aWz5Lq6IiwgImFsYnVtTmFtZSI6ICLlqJPlqJPkuYvpn7MiLCAiYWxidW1JZCI6ICIzNDY2NzA0NSIsICJzb25nbWlkIjogInd5XzQxMDUxODE0NCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjQ5IiwgImltZyI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvM0d0TC0xbmREN1V0LUQzRDVHUEZudz09LzEzODQyODUxNDYzNTk5OTQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy41MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNzQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxNS4zOSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxNS4zOSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI4Ljc0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuNTAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNDEwNTE4MTQ0IiwgInRpdGxlIjogIuWPr+eIseWls+S6uiIsICJkdXJhdGlvbiI6ICIwMzo0OSIsICJhcnRpc3QiOiAi576k5pifIiwgImFsYnVtIjogIuWok+Wok+S5i+mfsyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC8zR3RMLTFuZEQ3VXQtRDNENUdQRm53PT0vMTM4NDI4NTE0NjM1OTk5NC5qcGcifQ==", "name": "可爱女人-群星", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiREpYOCIsICJuYW1lIjogIuS9oOW3sue7j+emu+W8gOaIkSIsICJhbGJ1bU5hbWUiOiAi5LiN6LSf6YGH6KeBIiwgImFsYnVtSWQiOiAiMTU2MTMyMDcyIiwgInNvbmdtaWQiOiAid3lfMjAwOTYxNzgzMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjU0IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvbFlPMUVJYzJQcU1oa04xTjB2clR3QT09LzEwOTk1MTE2ODEyNTQ5MTM3NS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjc0IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC4zNiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjAxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjAxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjQuMzYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS43NCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMDA5NjE3ODMwIiwgInRpdGxlIjogIuS9oOW3sue7j+emu+W8gOaIkSIsICJkdXJhdGlvbiI6ICIwMTo1NCIsICJhcnRpc3QiOiAiREpYOCIsICJhbGJ1bSI6ICLkuI3otJ/pgYfop4EiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvbFlPMUVJYzJQcU1oa04xTjB2clR3QT09LzEwOTk1MTE2ODEyNTQ5MTM3NS5qcGcifQ==", "name": "你已经离开我-DJX8", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi55m+5bed5pif54GrIiwgIm5hbWUiOiAi54ix5oiR5Yir6LWwIiwgImFsYnVtTmFtZSI6ICLlnKjnga/ngavkuIsiLCAiYWxidW1JZCI6ICIxMzg5MzU4MTUiLCAic29uZ21pZCI6ICJ3eV8xOTEyMzg2MzE0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6NTAiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9HOTB0VkVvb3dOS2c3OVYteDJWVHlRPT0vMTA5OTUxMTY2OTM3MjgxMzU5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNTEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4Ljc4IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjguNzggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy41MSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTEyMzg2MzE0IiwgInRpdGxlIjogIueIseaIkeWIq+i1sCIsICJkdXJhdGlvbiI6ICIwMzo1MCIsICJhcnRpc3QiOiAi55m+5bed5pif54GrIiwgImFsYnVtIjogIuWcqOeBr+eBq+S4iyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9HOTB0VkVvb3dOS2c3OVYteDJWVHlRPT0vMTA5OTUxMTY2OTM3MjgxMzU5LmpwZyJ9", "name": "爱我别走-百川星火", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiSmVzc2UgVCIsICJuYW1lIjogIueul+S7gOm6veeUt+S6uiAo6Yu855C054mIKSIsICJhbGJ1bU5hbWUiOiAi566X5LuA6bq955S35Lq6ICjpi7znkLTniYgpIiwgImFsYnVtSWQiOiAiMTM1Nzc0MzE5IiwgInNvbmdtaWQiOiAid3lfMTg5MjgwOTUwOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjQxIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSFNxQXlDdy04ZnpCZ1dMTXFhMUhTUT09LzEwOTk1MTE2NjU5MzE2OTA1NS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjI5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuNzMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxOC41OSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxOC41OSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC43MyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjI5IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4OTI4MDk1MDgiLCAidGl0bGUiOiAi566X5LuA6bq955S35Lq6ICjpi7znkLTniYgpIiwgImR1cmF0aW9uIjogIjA0OjQxIiwgImFydGlzdCI6ICJKZXNzZSBUIiwgImFsYnVtIjogIueul+S7gOm6veeUt+S6uiAo6Yu855C054mIKSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9IU3FBeUN3LThmekJnV0xNcWExSFNRPT0vMTA5OTUxMTY2NTkzMTY5MDU1LmpwZyJ9", "name": "算什麽男人 (鋼琴版)-Jesse T", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ICFIiwgIm5hbWUiOiAi6Zu256KO55qE6K6w5b+GIiwgImFsYnVtTmFtZSI6ICLpm7YiLCAiYWxidW1JZCI6ICIxNTc1MDA1MjAiLCAic29uZ21pZCI6ICJ3eV8yMDExMzMwMzIxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6NDEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9scEEzRmNSXzZFWDBVUTdLRFJzVVBnPT0vMTA5OTUxMTY4MjE3OTM1NjkyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuNTYgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIzLjg5IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTAuNTYgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMTAuNTYgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMy44OSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjU2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIwMTEzMzAzMjEiLCAidGl0bGUiOiAi6Zu256KO55qE6K6w5b+GIiwgImR1cmF0aW9uIjogIjAxOjQxIiwgImFydGlzdCI6ICLogIUiLCAiYWxidW0iOiAi6Zu2IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2xwQTNGY1JfNkVYMFVRN0tEUnNVUGc9PS8xMDk5NTExNjgyMTc5MzU2OTIuanBnIn0=", "name": "零碎的记忆-者", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Zmq5Ly0IiwgIm5hbWUiOiAi5Y206LWw5LiN6L+b5L2g5b+D6YeMIiwgImFsYnVtTmFtZSI6ICLlsI/pmL/mraYiLCAiYWxidW1JZCI6ICIxNDIyMzI2ODQiLCAic29uZ21pZCI6ICJ3eV8xOTQyMzg4OTYxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9PWjZ3VXFXR1BjYmdaT2ttSTFYb3RRPT0vMTA5OTUxMTY3MjU3NDMwNTkyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI1Mi43MCBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjYzMS42OCBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI2MzEuNjggS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjUyLjcwIEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NDIzODg5NjEiLCAidGl0bGUiOiAi5Y206LWw5LiN6L+b5L2g5b+D6YeMIiwgImR1cmF0aW9uIjogIjAwOjE2IiwgImFydGlzdCI6ICLpmarkvLQiLCAiYWxidW0iOiAi5bCP6Zi/5q2mIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L09aNndVcVdHUGNiZ1pPa21JMVhvdFE9PS8xMDk5NTExNjcyNTc0MzA1OTIuanBnIn0=", "name": "却走不进你心里-陪伴", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YKj6IuxIiwgIm5hbWUiOiAi5Y+q5pyJ5Li65L2gICsg5LiN5bCG5bCxICsg5pyA6ZW/55qE55S15b2xICsg5YuH5pWi55qE5b+DIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOeS4reWbveWlveWjsOmfs+WbveW6hua8lOWUseS8miIsICJhbGJ1bUlkIjogIjgyMjM4MzQ5IiwgInNvbmdtaWQiOiAid3lfMTM5NTgwNzg2MCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjEwOjMzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvcDNUZm51VDVFdFZLV21uUXVoY2czQT09LzEwOTk1MTE2ODAyMzQwMjExMi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI5LjY3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMjQuMTcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI3My40NyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3My40NyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIyNC4xNyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI5LjY3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzEzOTU4MDc4NjAiLCAidGl0bGUiOiAi5Y+q5pyJ5Li65L2gICsg5LiN5bCG5bCxICsg5pyA6ZW/55qE55S15b2xICsg5YuH5pWi55qE5b+DIChMaXZlKSIsICJkdXJhdGlvbiI6ICIxMDozMyIsICJhcnRpc3QiOiAi6YKj6IuxIiwgImFsYnVtIjogIjIwMTnkuK3lm73lpb3lo7Dpn7Plm73luobmvJTllLHkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvcDNUZm51VDVFdFZLV21uUXVoY2czQT09LzEwOTk1MTE2ODAyMzQwMjExMi5qcGcifQ==", "name": "只有为你 + 不将就 + 最长的电影 + 勇敢的心 (Live)-那英", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi56iA6aWtIiwgIm5hbWUiOiAi5oiR5Lya5a2m552A5pS+5byD5L2gIOaYr+WboOS4uuaIkeWkqueIseS9oCIsICJhbGJ1bU5hbWUiOiAi57K+5b2p57ud5LymIiwgImFsYnVtSWQiOiAiMTQ5ODE1NzI2IiwgInNvbmdtaWQiOiAid3lfMTk3NDUyMjM2OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjIwIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvNkdVRmdGSnRjZlFQSXl4elM1OFlCdz09LzEwOTk1MTE2Nzc4Nzk4NDI2My5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0Ljg4IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuMjEgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOS43MyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyOS43MyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMi4yMSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0Ljg4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NzQ1MjIzNjkiLCAidGl0bGUiOiAi5oiR5Lya5a2m552A5pS+5byD5L2gIOaYr+WboOS4uuaIkeWkqueIseS9oCIsICJkdXJhdGlvbiI6ICIwNToyMCIsICJhcnRpc3QiOiAi56iA6aWtIiwgImFsYnVtIjogIueyvuW9qee7neS8piIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC82R1VGZ0ZKdGNmUVBJeXh6UzU4WUJ3PT0vMTA5OTUxMTY3Nzg3OTg0MjYzLmpwZyJ9", "name": "我会学着放弃你 是因为我太爱你-稀饭", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6XIiwgIm5hbWUiOiAi5L2g5oCO5LmI6L+e6K+d6YO96K+05LiN5riF5qWaIiwgImFsYnVtTmFtZSI6ICJCb3JuIHRvIEJlIGEgU3RhciDotoXnuqfnj43ol4/kuJbnuqrnsr7pgIkiLCAiYWxidW1JZCI6ICIyMTMzNiIsICJzb25nbWlkIjogInd5XzIwOTg2NyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjA4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZ1BLR1FzeDh3Z0kwR2VJaFVPNWw1QT09LzEwOTk1MTE2NTcwNTUwMjcyNS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjcwIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTEuNzUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMi4xOSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMi4xOSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMS43NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0LjcwIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzIwOTg2NyIsICJ0aXRsZSI6ICLkvaDmgI7kuYjov57or53pg73or7TkuI3muIXmpZoiLCAiZHVyYXRpb24iOiAiMDU6MDgiLCAiYXJ0aXN0IjogIuiUoeS+neaelyIsICJhbGJ1bSI6ICJCb3JuIHRvIEJlIGEgU3RhciDotoXnuqfnj43ol4/kuJbnuqrnsr7pgIkiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZ1BLR1FzeDh3Z0kwR2VJaFVPNWw1QT09LzEwOTk1MTE2NTcwNTUwMjcyNS5qcGcifQ==", "name": "你怎么连话都说不清楚-蔡依林", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Zi/5bGC5Li2IiwgIm5hbWUiOiAiVEHnmoTmrYwiLCAiYWxidW1OYW1lIjogIlRoZSByb3NlIGluIHlvdXIgaGFuZCIsICJhbGJ1bUlkIjogIjE0MjQwNTg3MSIsICJzb25nbWlkIjogInd5XzE5MzE1NDQxNDMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoyNiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0RObUhtRGI2R1FKaDE5MVNmR0dkTnc9PS8xMDk5NTExNjcxOTIyMTYwODQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4xNSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuODggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxMC4xMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxMC4xMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3Ljg4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuMTUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkzMTU0NDE0MyIsICJ0aXRsZSI6ICJUQeeahOatjCIsICJkdXJhdGlvbiI6ICIwMzoyNiIsICJhcnRpc3QiOiAi6Zi/5bGC5Li2IiwgImFsYnVtIjogIlRoZSByb3NlIGluIHlvdXIgaGFuZCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9ETm1IbURiNkdRSmgxOTFTZkdHZE53PT0vMTA5OTUxMTY3MTkyMjE2MDg0LmpwZyJ9", "name": "TA的歌-阿层丶", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5b6u55Sc55qE5bCP6aOOIiwgIm5hbWUiOiAi5pat5LqG55qE5bymIiwgImFsYnVtTmFtZSI6ICLpm6jnurfnurciLCAiYWxidW1JZCI6ICIxNjY4MjQ2NDUiLCAic29uZ21pZCI6ICJ3eV8yMDUyNTE3NDU2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MzMiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Sc3U0ekw5VnRHcXBBN3Bob2FyOC1RPT0vMTA5OTUxMTY4NjUzMzMzNzQzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMzQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1Ljg2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy4yNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjI1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUuODYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi4zNCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yMDUyNTE3NDU2IiwgInRpdGxlIjogIuaWreS6hueahOW8piIsICJkdXJhdGlvbiI6ICIwMjozMyIsICJhcnRpc3QiOiAi5b6u55Sc55qE5bCP6aOOIiwgImFsYnVtIjogIumbqOe6t+e6tyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Sc3U0ekw5VnRHcXBBN3Bob2FyOC1RPT0vMTA5OTUxMTY4NjUzMzMzNzQzLmpwZyJ9", "name": "断了的弦-微甜的小风", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAieuadsOWTpSIsICJuYW1lIjogIk1hcGxlIiwgImFsYnVtTmFtZSI6ICJNYXBsZSIsICJhbGJ1bUlkIjogIjE0NTQ3NDM1MiIsICJzb25nbWlkIjogInd5XzE5NTAzNzMxNjciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo0NyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzU1NGRYZHZ0RVJqenNaRVFoQWJoQkE9PS8xMDk5NTExNjc0NzIxMzc5NTUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4zOSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjk2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNDUuMzIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNDUuMzIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuOTYgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4zOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTUwMzczMTY3IiwgInRpdGxlIjogIk1hcGxlIiwgImR1cmF0aW9uIjogIjA0OjQ3IiwgImFydGlzdCI6ICJ65p2w5ZOlIiwgImFsYnVtIjogIk1hcGxlIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzU1NGRYZHZ0RVJqenNaRVFoQWJoQkE9PS8xMDk5NTExNjc0NzIxMzc5NTUuanBnIn0=", "name": "Maple-z杰哥", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6K645pif57qvIiwgIm5hbWUiOiAi57uK5YCS6YmE55uS77yIMC44w5fvvIkiLCAiYWxidW1OYW1lIjogIuWSjOS9oCIsICJhbGJ1bUlkIjogIjE1NTc2NzAxOCIsICJzb25nbWlkIjogInd5XzIwMDMwMjI5MTEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoyNCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2dPUHNpN1d1TE9ZZm9FN2IzTHAxSkE9PS8xMDk5NTExNjgxMDUzMzg1MDQuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMzc5LjIzIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOTQ4LjAwIEtCIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjk0OC4wMCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzNzkuMjMgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjAwMzAyMjkxMSIsICJ0aXRsZSI6ICLnu4rlgJLpiYTnm5LvvIgwLjjDl++8iSIsICJkdXJhdGlvbiI6ICIwMDoyNCIsICJhcnRpc3QiOiAi6K645pif57qvIiwgImFsYnVtIjogIuWSjOS9oCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9nT1BzaTdXdUxPWWZvRTdiM0xwMUpBPT0vMTA5OTUxMTY4MTA1MzM4NTA0LmpwZyJ9", "name": "绊倒鉄盒(0.8×)-许星纯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Zi/5bGC5Li2IiwgIm5hbWUiOiAi6YKE6Iys6JOF5rWq77yIUHYu77yJIiwgImFsYnVtTmFtZSI6ICJUSEUgR1JFQVRFU1QiLCAiYWxidW1JZCI6ICIxNDc4Nzc4OTQiLCAic29uZ21pZCI6ICJ3eV8xOTY4OTkzNDA2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9FQzRYLTVtYVBncTlXM3p0dENnMEZRPT0vMTA5OTUxMTY3NjQ4Mjk1NzMwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41NCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjQ5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjQ5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjU0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk2ODk5MzQwNiIsICJ0aXRsZSI6ICLpgoTojKzok4XmtarvvIhQdi7vvIkiLCAiZHVyYXRpb24iOiAiMDQ6MzYiLCAiYXJ0aXN0IjogIumYv+WxguS4tiIsICJhbGJ1bSI6ICJUSEUgR1JFQVRFU1QiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvRUM0WC01bWFQZ3E5VzN6dHRDZzBGUT09LzEwOTk1MTE2NzY0ODI5NTczMC5qcGcifQ==", "name": "還茬蓅浪(Pv.)-阿层丶", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5rexIiwgIm5hbWUiOiAi5YWw5Lqt5bqPIiwgImFsYnVtTmFtZSI6ICIiLCAiYWxidW1JZCI6ICIiLCAic29uZ21pZCI6ICJ3eV8xOTc0NDAzMzM2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MDgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8wRWVaN3Jmc3F1Y1BpNW5paHRRaVRnPT0vMTA5OTUxMTY3ODA1NTAyMTc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuNzkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5LjQ3IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjkuNDcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy43OSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTc0NDAzMzM2IiwgInRpdGxlIjogIuWFsOS6reW6jyIsICJkdXJhdGlvbiI6ICIwNDowOCIsICJhcnRpc3QiOiAi5ZGo5rexIiwgImFsYnVtIjogIiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8wRWVaN3Jmc3F1Y1BpNW5paHRRaVRnPT0vMTA5OTUxMTY3ODA1NTAyMTc1LmpwZyJ9", "name": "兰亭序-周深", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YiY5a6J5LuK5aSp5LiN5ZuwIiwgIm5hbWUiOiAi5b6I54ix5oiR55qE5a6dLei2heeIseeJiCIsICJhbGJ1bU5hbWUiOiAi5rC46L+c5Zac5qyi5oiR55qE5a6dIiwgImFsYnVtSWQiOiAiMTQzNTE3MzAyIiwgInNvbmdtaWQiOiAid3lfMTkzODMwNDIxOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvWGplRXkwZlZ3MGxSRFowQVpXTnQ0dz09LzEwOTk1MTE2NzI5NDUyMTI5Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyOTAuNjYgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3MjYuNTcgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjE0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMTQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNzI2LjU3IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjI5MC42NiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTM4MzA0MjE4IiwgInRpdGxlIjogIuW+iOeIseaIkeeahOWunS3otoXniLHniYgiLCAiZHVyYXRpb24iOiAiMDA6MTgiLCAiYXJ0aXN0IjogIuWImOWuieS7iuWkqeS4jeWbsCIsICJhbGJ1bSI6ICLmsLjov5zllpzmrKLmiJHnmoTlrp0iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvWGplRXkwZlZ3MGxSRFowQVpXTnQ0dz09LzEwOTk1MTE2NzI5NDUyMTI5Mi5qcGcifQ==", "name": "很爱我的宝-超爱版-刘安今天不困", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZCJ5a2Q6L+I5a2QIiwgIm5hbWUiOiAi6Zuo5reL5rm/5LqG5aSp56m6KOWls+WjsOeJiCApIiwgImFsYnVtTmFtZSI6ICLkuIDot6/lkIzooYwiLCAiYWxidW1JZCI6ICIxMjQ3Njc1MDEiLCAic29uZ21pZCI6ICJ3eV8xODMwNzM1NDAzIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MzkiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9TcVU3SjlmUDFXNW0yZGdTUlNjUTlnPT0vMTA5OTUxMTY1ODE2OTEyMDY0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjYxNC4yOSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuNTAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI2LjQxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYuNDEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS41MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI2MTQuMjkgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMDczNTQwMyIsICJ0aXRsZSI6ICLpm6jmt4vmub/kuoblpKnnqboo5aWz5aOw54mIICkiLCAiZHVyYXRpb24iOiAiMDA6MzkiLCAiYXJ0aXN0IjogIuWQieWtkOi/iOWtkCIsICJhbGJ1bSI6ICLkuIDot6/lkIzooYwiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3FVN0o5ZlAxVzVtMmRnU1JTY1E5Zz09LzEwOTk1MTE2NTgxNjkxMjA2NC5qcGcifQ==", "name": "雨淋湿了天空(女声版 )-吉子迈子", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi55+z5rOiIiwgIm5hbWUiOiAi6K+05LqG5YaN6KeBIiwgImFsYnVtTmFtZSI6ICLkvaDmi7/ku4DkuYjmhJ/lkIzouqvlj5ciLCAiYWxidW1JZCI6ICIxMjQ4ODg1MjkiLCAic29uZ21pZCI6ICJ3eV8xODMxNDM2MTU0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MDYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9vcFdCak5rSjd0bmZiUVFOVXVNUmR3PT0vMTA5OTUxMTY1ODI1MzU0ODMzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNjcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS42OSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYyLjcxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYyLjcxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjY5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNjcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMTQzNjE1NCIsICJ0aXRsZSI6ICLor7Tkuoblho3op4EiLCAiZHVyYXRpb24iOiAiMDU6MDYiLCAiYXJ0aXN0IjogIuefs+azoiIsICJhbGJ1bSI6ICLkvaDmi7/ku4DkuYjmhJ/lkIzouqvlj5ciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvb3BXQmpOa0o3dG5mYlFRTlV1TVJkdz09LzEwOTk1MTE2NTgyNTM1NDgzMy5qcGcifQ==", "name": "说了再见-石波", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQnV6YWkt5aicIiwgIm5hbWUiOiAi6Zuo5reL5rm/5LqG5aSp56m6IiwgImFsYnVtTmFtZSI6ICLov5nkuJbnlYzpgqPkuYjlpJrkurogKOeQtO+8iSIsICJhbGJ1bUlkIjogIjEzODk0ODQwNSIsICJzb25nbWlkIjogInd5XzE5MTI1MzgzNjgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTozOSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3ljbnlXbldIM1ozREh5RG9YTEtyekE9PS8xMDk5NTExNjY5Mzk2Mzg1NTMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS41MiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjMuNzkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI5LjEyIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjkuMTIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMy43OSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjUyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MTI1MzgzNjgiLCAidGl0bGUiOiAi6Zuo5reL5rm/5LqG5aSp56m6IiwgImR1cmF0aW9uIjogIjAxOjM5IiwgImFydGlzdCI6ICJCdXphaS3lqJwiLCAiYWxidW0iOiAi6L+Z5LiW55WM6YKj5LmI5aSa5Lq6ICjnkLTvvIkiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveWNueVduV0gzWjNESHlEb1hMS3J6QT09LzEwOTk1MTE2NjkzOTYzODU1My5qcGcifQ==", "name": "雨淋湿了天空-Buzai-娜", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZW36Lev5oWi5oWiLSIsICJuYW1lIjogIui/measoeaIkeayoeacieWGjeetieS9oCIsICJhbGJ1bU5hbWUiOiAi5oSb5oSP6Zqo6aKo6LW3IiwgImFsYnVtSWQiOiAiMTMwNjMxNDkwIiwgInNvbmdtaWQiOiAid3lfMTg4MzE1NjI0MiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjQ5IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvY0JRbkpheUJwLXBXU01ZVi1vRm1nZz09LzEwOTk1MTE2NjE5NjkyMjA1Ny5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjY3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC4xOCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjE2Ljk5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjE2Ljk5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjQuMTggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS42NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODgzMTU2MjQyIiwgInRpdGxlIjogIui/measoeaIkeayoeacieWGjeetieS9oCIsICJkdXJhdGlvbiI6ICIwMTo0OSIsICJhcnRpc3QiOiAi6ZW36Lev5oWi5oWiLSIsICJhbGJ1bSI6ICLmhJvmhI/pmqjpoqjotbciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvY0JRbkpheUJwLXBXU01ZVi1vRm1nZz09LzEwOTk1MTE2NjE5NjkyMjA1Ny5qcGcifQ==", "name": "这次我没有再等你-長路慢慢-", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Lev5oWi5oWiIiwgIm5hbWUiOiAi5oiR6LCI552A55C05ZSx5L2g54ix55qE5q2MIiwgImFsYnVtTmFtZSI6ICLmnaXlubTnp4vpo47otbciLCAiYWxidW1JZCI6ICIxMzYxNTk5NDgiLCAic29uZ21pZCI6ICJ3eV8xODk1NTk1Mzk1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Nd013dkw0RnBWU1ZSYW9NanJiU2FBPT0vMTA5OTUxMTY2NjI0OTgzNTM3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI5Mi41NCBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjczMS4yOSBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEuOTEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMS45MSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3MzEuMjkgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjkyLjU0IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4OTU1OTUzOTUiLCAidGl0bGUiOiAi5oiR6LCI552A55C05ZSx5L2g54ix55qE5q2MIiwgImR1cmF0aW9uIjogIjAwOjE4IiwgImFydGlzdCI6ICLot6/mhaLmhaIiLCAiYWxidW0iOiAi5p2l5bm056eL6aOO6LW3IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L013TXd2TDRGcFZTVlJhb01qcmJTYUE9PS8xMDk5NTExNjY2MjQ5ODM1MzcuanBnIn0=", "name": "我谈着琴唱你爱的歌-路慢慢", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5a6J55CqYmFieSIsICJuYW1lIjogIuivtOS6huWGjeingSIsICJhbGJ1bU5hbWUiOiAi5LiT5bGe5oOF5q2MIiwgImFsYnVtSWQiOiAiMTI0OTgzNTEzIiwgInNvbmdtaWQiOiAid3lfMTgzMTc1OTM2OCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjMyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMGp1OEVUMUFwWlNYZldhY2M0dzQ5dz09LzEwOTk1MTE2OTQ4NDA5MTY4MC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjQyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMy41NCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIzLjU0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNDIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMTc1OTM2OCIsICJ0aXRsZSI6ICLor7Tkuoblho3op4EiLCAiZHVyYXRpb24iOiAiMDE6MzIiLCAiYXJ0aXN0IjogIuWuieeQqmJhYnkiLCAiYWxidW0iOiAi5LiT5bGe5oOF5q2MIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzBqdThFVDFBcFpTWGZXYWNjNHc0OXc9PS8xMDk5NTExNjk0ODQwOTE2ODAuanBnIn0=", "name": "说了再见-安琪baby", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiNy0iLCAibmFtZSI6ICI3LeacgOi/keacieS4jeW8gOW/g+WQlyIsICJhbGJ1bU5hbWUiOiAi6YGX5oa+5piv5LiA56eN6Ieq55Sx55qE5pa55byPIiwgImFsYnVtSWQiOiAiMTQ3MDkxMTc5IiwgInNvbmdtaWQiOiAid3lfMTk2Nzc5NDAxOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjEyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvQlpBQnZtcFpRRXdoaVkxVllvMXQ3Zz09LzEwOTk1MTE2Nzc5ODg0Mjg1NS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMDAuMDQgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1MDAuMDQgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI4NzAuMDkgS0IifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiODcwLjA5IEtCIn0sICIzMjBrIjogeyJzaXplIjogIjUwMC4wNCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMDAuMDQgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk2Nzc5NDAxOCIsICJ0aXRsZSI6ICI3LeacgOi/keacieS4jeW8gOW/g+WQlyIsICJkdXJhdGlvbiI6ICIwMDoxMiIsICJhcnRpc3QiOiAiNy0iLCAiYWxidW0iOiAi6YGX5oa+5piv5LiA56eN6Ieq55Sx55qE5pa55byPIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0JaQUJ2bXBaUUV3aGlZMVZZbzF0N2c9PS8xMDk5NTExNjc3OTg4NDI4NTUuanBnIn0=", "name": "7-最近有不开心吗-7-", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YW25a6eIiwgIm5hbWUiOiAi57qv6Z+z5LmQ6aaGLembqOS4i+aVtOWknO+8iOWFtuWuniByZW1peO+8iSIsICJhbGJ1bU5hbWUiOiAi57qq5b+1IiwgImFsYnVtSWQiOiAiMTQzOTM2OTgxIiwgInNvbmdtaWQiOiAid3lfMTk1Mzk4MzczMyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvLVVLaUR6dW15eG9vVEtuQ0t6ZGgzUT09LzEwOTk1MTE2NzMzNjgzMTk4Mi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNTUuNTUgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4ODguODIgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxLjY0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEuNjQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiODg4LjgyIEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM1NS41NSBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTUzOTgzNzMzIiwgInRpdGxlIjogIue6r+mfs+S5kOmmhi3pm6jkuIvmlbTlpJzvvIjlhbblrp4gcmVtaXjvvIkiLCAiZHVyYXRpb24iOiAiMDA6MjIiLCAiYXJ0aXN0IjogIuWFtuWuniIsICJhbGJ1bSI6ICLnuqrlv7UiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvLVVLaUR6dW15eG9vVEtuQ0t6ZGgzUT09LzEwOTk1MTE2NzMzNjgzMTk4Mi5qcGcifQ==", "name": "纯音乐馆-雨下整夜(其实 remix)-其实", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6bm/5pmXIiwgIm5hbWUiOiAi5LiW55WM5pyr5pelIiwgImFsYnVtTmFtZSI6ICLkuJbnlYzmnKvml6UiLCAiYWxidW1JZCI6ICI4MDgyODU2NSIsICJzb25nbWlkIjogInd5XzEzODI3NjU3OTYiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDoyNyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3hEN1ZVc3JnRGJHY094cXZsbDFCUFE9PS8xMDk5NTExNjY2NzM0MjY4OTcuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4wOCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjIwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzAuMDQgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzAuMDQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuMjAgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC4wOCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xMzgyNzY1Nzk2IiwgInRpdGxlIjogIuS4lueVjOacq+aXpSIsICJkdXJhdGlvbiI6ICIwNDoyNyIsICJhcnRpc3QiOiAi6bm/5pmXIiwgImFsYnVtIjogIuS4lueVjOacq+aXpSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC94RDdWVXNyZ0RiR2NPeHF2bGwxQlBRPT0vMTA5OTUxMTY2NjczNDI2ODk3LmpwZyJ9", "name": "世界末日-鹿晗", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YW25a6eIiwgIm5hbWUiOiAi57qv6Z+z5LmQ6aaGLXNoZOW5uOemj+WRou+8iOWFtuWuniByZW1peO+8iSIsICJhbGJ1bU5hbWUiOiAi54ix5oSPIiwgImFsYnVtSWQiOiAiMTQzNjY5NjI4IiwgInNvbmdtaWQiOiAid3lfMTkzOTYxOTgxMyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE1IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvYlB1V1NDZ1RDclYwTEN2dE9KcFhUQT09LzEwOTk1MTE2NzMxMTQ4Njk3NC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMzguMDAgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1OTQuOTQgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI5NTEuNjMgS0IifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiOTUxLjYzIEtCIn0sICIzMjBrIjogeyJzaXplIjogIjU5NC45NCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMzguMDAgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkzOTYxOTgxMyIsICJ0aXRsZSI6ICLnuq/pn7PkuZDppoYtc2hk5bm456aP5ZGi77yI5YW25a6eIHJlbWl477yJIiwgImR1cmF0aW9uIjogIjAwOjE1IiwgImFydGlzdCI6ICLlhbblrp4iLCAiYWxidW0iOiAi54ix5oSPIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2JQdVdTQ2dUQ3JWMExDdnRPSnBYVEE9PS8xMDk5NTExNjczMTE0ODY5NzQuanBnIn0=", "name": "纯音乐馆-shd幸福呢(其实 remix)-其实", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5YiY5qyiIiwgIm5hbWUiOiAi5LiA56yR6ICM6L+HICsg5L2g55qE6IOM5YyFIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNTc1NzA5MSIsICJzb25nbWlkIjogInd5XzQ5MDYwMjMyMyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAyOjQ3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuNTYgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2LjM5IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTcuOTEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMTcuOTEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNi4zOSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjU2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ5MDYwMjMyMyIsICJ0aXRsZSI6ICLkuIDnrJHogIzov4cgKyDkvaDnmoTog4zljIUgKExpdmUpIiwgImR1cmF0aW9uIjogIjAyOjQ3IiwgImFydGlzdCI6ICLlkajmnbDkvKbjgIHliJjmrKIiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyJ9", "name": "一笑而过 + 你的背包 (Live)-周杰伦、刘欢", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YW25a6eIiwgIm5hbWUiOiAi57qv6Z+z5LmQ6aaGLeetiW5p5LiL6K++IiwgImFsYnVtTmFtZSI6ICLniLHmhI8iLCAiYWxidW1JZCI6ICIxNDM2Njk2MjgiLCAic29uZ21pZCI6ICJ3eV8xOTM5NjEzMzQzIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9iUHVXU0NnVENyVjBMQ3Z0T0pwWFRBPT0vMTA5OTUxMTY3MzExNDg2OTc0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIzNS41NSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjU4OC44MiBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEuMTAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMS4xMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI1ODguODIgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjM1LjU1IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5Mzk2MTMzNDMiLCAidGl0bGUiOiAi57qv6Z+z5LmQ6aaGLeetiW5p5LiL6K++IiwgImR1cmF0aW9uIjogIjAwOjE1IiwgImFydGlzdCI6ICLlhbblrp4iLCAiYWxidW0iOiAi54ix5oSPIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2JQdVdTQ2dUQ3JWMExDdnRPSnBYVEE9PS8xMDk5NTExNjczMTE0ODY5NzQuanBnIn0=", "name": "纯音乐馆-等ni下课-其实", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB6ZmI6aKW5oGp44CB6IKW6YKm5aau44CB5pyx5paH5am3IiwgIm5hbWUiOiAi5LmM5YWL5Li95Li9IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDEz5pyfIiwgImFsYnVtSWQiOiAiMzY0MTI2MzMiLCAic29uZ21pZCI6ICJ3eV81MDk3ODE2NTEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoxMyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3lEOXZicHVJTEgtdHFOUklhUDY0MGc9PS8xMDk5NTExNjMwMzgyOTIxNzYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi45NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMzggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMy4xMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyMy4xMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjM4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuOTUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTA5NzgxNjUxIiwgInRpdGxlIjogIuS5jOWFi+S4veS4vSAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDM6MTMiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgemZiOmiluaBqeOAgeiClumCpuWmruOAgeacseaWh+WptyIsICJhbGJ1bSI6ICLkuK3lm73mlrDmrYzlo7DnrKzkuozlraMg56ysMTPmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveUQ5dmJwdUlMSC10cU5SSWFQNjQwZz09LzEwOTk1MTE2MzAzODI5MjE3Ni5qcGcifQ==", "name": "乌克丽丽 (Live)-周杰伦、陈颖恩、肖邦妮、朱文婷", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5bq+5r6E5bqG44CB5ZGo5p2w5Lym44CB6LCi6ZyG6ZSL44CB5p2O5YGlIiwgIm5hbWUiOiAi6K6p5oiR5LiA5qyh54ix5Liq5aSfICsg5Zug5Li654ix5omA5Lul54ixICsg5oqa5LuZ5rmWICsg562J5L2g5LiL6K++ICsg6ZyN5YWD55SyICsg5LiH6YeM6ZW/5Z+O5rC45LiN5YCSIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOOS4reWbveWlveWjsOmfsyDnrKwx5pyfIiwgImFsYnVtSWQiOiAiNzE3NDczNjYiLCAic29uZ21pZCI6ICJ3eV84NjYwNDkzNTkiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIxMTo1MiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzR3Z2RpSjN0Y3hGQUpuSXhJdm1PblE9PS8xMDk5NTExNjM0MDk3NjUyNzYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMTAuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyNy4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjg1LjU0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjg1LjU0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjI3LjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEwLjg3IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5Xzg2NjA0OTM1OSIsICJ0aXRsZSI6ICLorqnmiJHkuIDmrKHniLHkuKrlpJ8gKyDlm6DkuLrniLHmiYDku6XniLEgKyDmiprku5nmuZYgKyDnrYnkvaDkuIvor74gKyDpnI3lhYPnlLIgKyDkuIfph4zplb/ln47msLjkuI3lgJIgKExpdmUpIiwgImR1cmF0aW9uIjogIjExOjUyIiwgImFydGlzdCI6ICLlur7mvoTluobjgIHlkajmnbDkvKbjgIHosKLpnIbplIvjgIHmnY7lgaUiLCAiYWxidW0iOiAiMjAxOOS4reWbveWlveWjsOmfsyDnrKwx5pyfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzR3Z2RpSjN0Y3hGQUpuSXhJdm1PblE9PS8xMDk5NTExNjM0MDk3NjUyNzYuanBnIn0=", "name": "让我一次爱个够 + 因为爱所以爱 + 抚仙湖 + 等你下课 + 霍元甲 + 万里长城永不倒 (Live)-庾澄庆、周杰伦、谢霆锋、李健", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YKj6Iux44CB5ZGo5p2w5Lym44CB5YiY5qyi44CB6ZmI5aWV6L+FIiwgIm5hbWUiOiAi5rKn5rW35LiA5aOw56yRIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNTc1NzA5MSIsICJzb25nbWlkIjogInd5XzQ5MDYwMjMyOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAyOjU3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuNzEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2Ljc4IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjEuNDggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjEuNDggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNi43OCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjcxIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ5MDYwMjMyOCIsICJ0aXRsZSI6ICLmsqfmtbfkuIDlo7DnrJEgKExpdmUpIiwgImR1cmF0aW9uIjogIjAyOjU3IiwgImFydGlzdCI6ICLpgqPoi7HjgIHlkajmnbDkvKbjgIHliJjmrKLjgIHpmYjlpZXov4UiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyJ9", "name": "沧海一声笑 (Live)-那英、周杰伦、刘欢、陈奕迅", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB6YKj6IuxIiwgIm5hbWUiOiAi5Zug5Li654ix5oOFIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNTc1NzA5MSIsICJzb25nbWlkIjogInd5XzQ5MDU5NTMxNSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjIyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMuMDggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjcxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjEuMTQgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjEuMTQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy43MSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzLjA4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQ5MDU5NTMxNSIsICJ0aXRsZSI6ICLlm6DkuLrniLHmg4UgKExpdmUpIiwgImR1cmF0aW9uIjogIjAzOjIyIiwgImFydGlzdCI6ICLlkajmnbDkvKbjgIHpgqPoi7EiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvN29oaTE2M1djQXctbmpRSUo3UGxQUT09LzE4ODkyOTA4MzAwMzE1MDI3LmpwZyJ9", "name": "因为爱情 (Live)-周杰伦、那英", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YKj6Iux44CB5rGq5bOw44CB5bq+5r6E5bqG44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5Y+q5pyJ5Li65L2gICsg5a6J6Z2ZICsg5LiN566h5pyJ5aSa6IumICsg5ruhICsg5oiR6KaB5aSP5aSpIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOwIOesrDHmnJ8iLCAiYWxidW1JZCI6ICIzNDc4MzE5OSIsICJzb25nbWlkIjogInd5XzQyMTE2MDg4OCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjExOjIwIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvTGhONjE5bTVKbFotWV9nVUZrd0gxZz09LzMzOTQxOTI0MTA5NTkyNjMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMTAuMzkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyNS45NiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjc2LjEwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjc2LjEwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjI1Ljk2IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEwLjM5IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzQyMTE2MDg4OCIsICJ0aXRsZSI6ICLlj6rmnInkuLrkvaAgKyDlronpnZkgKyDkuI3nrqHmnInlpJroi6YgKyDmu6EgKyDmiJHopoHlpI/lpKkgKExpdmUpIiwgImR1cmF0aW9uIjogIjExOjIwIiwgImFydGlzdCI6ICLpgqPoi7HjgIHmsarls7DjgIHlur7mvoTluobjgIHlkajmnbDkvKYiLCAiYWxidW0iOiAi5Lit5Zu95paw5q2M5aOwIOesrDHmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvTGhONjE5bTVKbFotWV9nVUZrd0gxZz09LzMzOTQxOTI0MTA5NTkyNjMuanBnIn0=", "name": "只有为你 + 安静 + 不管有多苦 + 满 + 我要夏天 (Live)-那英、汪峰、庾澄庆、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5a6/5ra144CB5byg56We5YS/IiwgIm5hbWUiOiAi5bGL6aG2IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAiMjAxOOS4reWbveWlveWjsOmfsyDmvrPpl6jmvJTllLHkvJoiLCAiYWxidW1JZCI6ICI3Mzg3NjgxNiIsICJzb25nbWlkIjogInd5XzEzMTc0OTQ0MzQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNToxMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0Lzcyb1dqRjIzYkRiWDBaWFQweVVDdkE9PS8xMDk5NTExNjM2MDQ3MjQwNzcuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC43OCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjk0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzQuMTggTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzQuMTggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuOTQgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC43OCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xMzE3NDk0NDM0IiwgInRpdGxlIjogIuWxi+mhtiAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDU6MTIiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgeWuv+a2teOAgeW8oOelnuWEvyIsICJhbGJ1bSI6ICIyMDE45Lit5Zu95aW95aOw6Z+zIOa+s+mXqOa8lOWUseS8miIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC83Mm9XakYyM2JEYlgwWlhUMHlVQ3ZBPT0vMTA5OTUxMTYzNjA0NzI0MDc3LmpwZyJ9", "name": "屋顶 (Live)-周杰伦、宿涵、张神儿", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5p2O56GV44CB5byg6ZGrIiwgIm5hbWUiOiAi5oOz5L2g5bCx5YaZ5L+hIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5Lit5Zu95paw5q2M5aOw56ys5LqM5a2jIOesrDEz5pyfIiwgImFsYnVtSWQiOiAiMzY0MTI2MzMiLCAic29uZ21pZCI6ICJ3eV81MDk3ODE2NTUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzo1OCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3lEOXZicHVJTEgtdHFOUklhUDY0MGc9PS8xMDk5NTExNjMwMzgyOTIxNzYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTEgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNi4xMyBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyNi4xMyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI5LjExIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuNjQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTA5NzgxNjU1IiwgInRpdGxlIjogIuaDs+S9oOWwseWGmeS/oSAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDM6NTgiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgeadjuehleOAgeW8oOmRqyIsICJhbGJ1bSI6ICLkuK3lm73mlrDmrYzlo7DnrKzkuozlraMg56ysMTPmnJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveUQ5dmJwdUlMSC10cU5SSWFQNjQwZz09LzEwOTk1MTE2MzAzODI5MjE3Ni5qcGcifQ==", "name": "想你就写信 (Live)-周杰伦、李硕、张鑫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiYmVpdG9uZyIsICJuYW1lIjogImJlaXRvbmct6buYLemCo+iLse+8iHgwLjjvvInvvIhiZWl0b25nIHJlbWl477yJIiwgImFsYnVtTmFtZSI6ICLpq5jnuqfmhJ/mhaLpgJ8iLCAiYWxidW1JZCI6ICIxNDQ5ODE4NTAiLCAic29uZ21pZCI6ICJ3eV8xOTQ3NjIzMjIyIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NDAiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9IYzZPVHdTdmVsdTNBR2pVcUVWbC1nPT0vMTA5OTUxMTY3NDE2MTA4Mjc0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC43MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEzLjA4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEzLjA4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjcyIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk0NzYyMzIyMiIsICJ0aXRsZSI6ICJiZWl0b25nLem7mC3pgqPoi7HvvIh4MC4477yJ77yIYmVpdG9uZyByZW1peO+8iSIsICJkdXJhdGlvbiI6ICIwNDo0MCIsICJhcnRpc3QiOiAiYmVpdG9uZyIsICJhbGJ1bSI6ICLpq5jnuqfmhJ/mhaLpgJ8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSGM2T1R3U3ZlbHUzQUdqVXFFVmwtZz09LzEwOTk1MTE2NzQxNjEwODI3NC5qcGcifQ==", "name": "beitong-默-那英(x0.8)(beitong remix)-beitong", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YiY54+CIiwgIm5hbWUiOiAi5Y+v54ix5aWz5Lq6IChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5aW95aOw6Z+z5rex5Zyz5ryU5ZSx5LyaIiwgImFsYnVtSWQiOiAiODQ5MjM0NzUiLCAic29uZ21pZCI6ICJ3eV8xNDE2MDE1MDU3IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MzEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC83OVJENXlTa2RYSHVXc2pZLTQtQ0dnPT0vMTA5OTUxMTY0NjE4ODYwNzIzLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMzEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1Ljc4IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy4zNiBNQiJ9LCB7InR5cGUiOiAiZmxhYzI0Yml0IiwgInNpemUiOiAiMTQuMzIgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMyNGJpdCI6IHsic2l6ZSI6ICIxNC4zMiBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICI3LjM2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUuNzggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi4zMSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xNDE2MDE1MDU3IiwgInRpdGxlIjogIuWPr+eIseWls+S6uiAoTGl2ZSkiLCAiZHVyYXRpb24iOiAiMDI6MzEiLCAiYXJ0aXN0IjogIuWImOePgiIsICJhbGJ1bSI6ICLlpb3lo7Dpn7Pmt7HlnLPmvJTllLHkvJoiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvNzlSRDV5U2tkWEh1V3NqWS00LUNHZz09LzEwOTk1MTE2NDYxODg2MDcyMy5qcGcifQ==", "name": "可爱女人 (Live)-刘珂", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JGj5p2w5a6JIiwgIm5hbWUiOiAi54mb5LuU5b6I5b+ZIiwgImFsYnVtTmFtZSI6ICIj5oiR5piv6JGj5p2w5a6JIiwgImFsYnVtSWQiOiAiNzk1ODk1NTgiLCAic29uZ21pZCI6ICJ3eV8xMzY5NTc2MDU1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MzQiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9pa0xYNGlKR1oxVm81WW5yR3hmNzdRPT0vMTA5OTUxMTY0MTIyMjcyOTE3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMzYgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1LjkwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTkuMDYgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjMzLjIyIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjMjRiaXQiOiB7InNpemUiOiAiMzMuMjIgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMTkuMDYgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS45MCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjM2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzEzNjk1NzYwNTUiLCAidGl0bGUiOiAi54mb5LuU5b6I5b+ZIiwgImR1cmF0aW9uIjogIjAyOjM0IiwgImFydGlzdCI6ICLokaPmnbDlrokiLCAiYWxidW0iOiAiI+aIkeaYr+iRo+adsOWuiSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9pa0xYNGlKR1oxVm81WW5yR3hmNzdRPT0vMTA5OTUxMTY0MTIyMjcyOTE3LmpwZyJ9", "name": "牛仔很忙-董杰安", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAia2V4aWwiLCAibmFtZSI6ICLpu5goSmF5MC44eCkiLCAiYWxidW1OYW1lIjogInNsb3ciLCAiYWxidW1JZCI6ICIxNDU3MjQwODciLCAic29uZ21pZCI6ICJ3eV8xOTU3MjU0NTk2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6NDciLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9xVGhwenNGc3R3UGRXTzRhVWs5MGF3PT0vMTA5OTUxMTY3NDkwMzc0NDI4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuNTUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2LjM4IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjYuMzggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi41NSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTU3MjU0NTk2IiwgInRpdGxlIjogIum7mChKYXkwLjh4KSIsICJkdXJhdGlvbiI6ICIwMjo0NyIsICJhcnRpc3QiOiAia2V4aWwiLCAiYWxidW0iOiAic2xvdyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9xVGhwenNGc3R3UGRXTzRhVWs5MGF3PT0vMTA5OTUxMTY3NDkwMzc0NDI4LmpwZyJ9", "name": "默(Jay0.8x)-kexil", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZizIiwgIm5hbWUiOiAiSmF5LeS4iemfs+WNs+WFtCIsICJhbGJ1bU5hbWUiOiAiSmF5IiwgImFsYnVtSWQiOiAiMTQ1NzcwMjg4IiwgInNvbmdtaWQiOiAid3lfMTk1MjEyNzA5NiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjU3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSktnSGQ0M0U5MmlLc0FGcXhQUTdEQT09LzEwOTk1MTE2NzUzOTkwMjQyOC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjc5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC40OCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI0LjQ4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNzkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1MjEyNzA5NiIsICJ0aXRsZSI6ICJKYXkt5LiJ6Z+z5Y2z5YW0IiwgImR1cmF0aW9uIjogIjAxOjU3IiwgImFydGlzdCI6ICLpmLMiLCAiYWxidW0iOiAiSmF5IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0pLZ0hkNDNFOTJpS3NBRnF4UFE3REE9PS8xMDk5NTExNjc1Mzk5MDI0MjguanBnIn0=", "name": "Jay-三音即兴-阳", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p6X5bOvIiwgIm5hbWUiOiAi6ZyN5YWD55SyKExpdmUpIiwgImFsYnVtTmFtZSI6ICLls6/vvI7mg4Xml6DpmZDmvJTllLHkvJpMZXQncyBHZXQgV2V0IExpdmUiLCAiYWxidW1JZCI6ICIxMTExNyIsICJzb25nbWlkIjogInd5XzExMzE2NyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjMyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvRXpZeS1sa3BYQXlxaW9sa3N3WXR3QT09LzEwOTk1MTE2NjcxMjIyMjQ5Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjI0IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOC4xMCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjIyLjkwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIyLjkwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguMTAgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy4yNCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xMTMxNjciLCAidGl0bGUiOiAi6ZyN5YWD55SyKExpdmUpIiwgImR1cmF0aW9uIjogIjAzOjMyIiwgImFydGlzdCI6ICLmnpfls68iLCAiYWxidW0iOiAi5bOv77yO5oOF5peg6ZmQ5ryU5ZSx5LyaTGV0J3MgR2V0IFdldCBMaXZlIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0V6WXktbGtwWEF5cWlvbGtzd1l0d0E9PS8xMDk5NTExNjY3MTIyMjI0OTYuanBnIn0=", "name": "霍元甲(Live)-林峯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImFsYnVtTmFtZSI6ICLniLHoiJ7ngqsg55ub6KOF6Iie5puy57K+6YCJIiwgImFsYnVtSWQiOiAiMzQ0MjkwOTEiLCAic29uZ21pZCI6ICJ3eV80MDAxNjI3MDMiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDo1NCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzZoaVYtM20taGRUTk9oOHBjbFpJRWc9PS8xMDk5NTExNjU5ODY3MzA4MzkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjI0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzMuMzAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMzMuMzAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuMjQgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC41MCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV80MDAxNjI3MDMiLCAidGl0bGUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImR1cmF0aW9uIjogIjA0OjU0IiwgImFydGlzdCI6ICLolKHkvp3mnpfjgIHlkajmnbDkvKYiLCAiYWxidW0iOiAi54ix6Iie54KrIOebm+ijheiInuabsueyvumAiSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC82aGlWLTNtLWhkVE5PaDhwY2xaSUVnPT0vMTA5OTUxMTY1OTg2NzMwODM5LmpwZyJ9", "name": "布拉格广场-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5rW355uXIiwgImFsYnVtTmFtZSI6ICJKLVRvcOWGoOWGm+eyvumAiSIsICJhbGJ1bUlkIjogIjIxMzMwIiwgInNvbmdtaWQiOiAid3lfMjA5NzM1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6MzUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9EcW1KUVFkcFcwamN0N3YtQzFrUXJ3PT0vMTA5OTUxMTY1NzA1NDk4ODkwLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMjEgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC41MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMwLjU1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMwLjU1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjUyIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMjEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjA5NzM1IiwgInRpdGxlIjogIua1t+eblyIsICJkdXJhdGlvbiI6ICIwNDozNSIsICJhcnRpc3QiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgImFsYnVtIjogIkotVG9w5Yag5Yab57K+6YCJIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0RxbUpRUWRwVzBqY3Q3di1DMWtRcnc9PS8xMDk5NTExNjU3MDU0OTg4OTAuanBnIn0=", "name": "海盗-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57qq6ZKn54CaIChCcnlhbiBDaGkpIiwgIm5hbWUiOiAi5aSc5puyICjpkqLnkLTniYgpIFvljp/llLE6IOWRqOadsOS8pl0iLCAiYWxidW1OYW1lIjogIumSoueQtOaUvuadvui9u+WQrCDmtYHooYzovbvpn7PkuZAg5Y2O6K+t57uP5YW4IiwgImFsYnVtSWQiOiAiMTQ0NjgxMzI4IiwgInNvbmdtaWQiOiAid3lfMTk0NTg5NTcyOCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjUzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjU2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOC45MSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjExLjE3IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICIzMS4yMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjMxLjIwIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjExLjE3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguOTEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy41NiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTQ1ODk1NzI4IiwgInRpdGxlIjogIuWknOabsiAo6ZKi55C054mIKSBb5Y6f5ZSxOiDlkajmnbDkvKZdIiwgImR1cmF0aW9uIjogIjAzOjUzIiwgImFydGlzdCI6ICLnuqrpkqfngJogKEJyeWFuIENoaSkiLCAiYWxidW0iOiAi6ZKi55C05pS+5p2+6L275ZCsIOa1geihjOi9u+mfs+S5kCDljY7or63nu4/lhbgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGcifQ==", "name": "夜曲 (钢琴版) [原唱: 周杰伦]-纪钧瀚 (Bryan Chi)", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O546f44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5YiA6ams5pemIiwgImFsYnVtTmFtZSI6ICJQcm9taXNlIiwgImFsYnVtSWQiOiAiMjU0NzUiLCAic29uZ21pZCI6ICJ3eV8yNTUwMjAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoxMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2REZ0hEV2xKQUZ3a01OcmpiUUV4SUE9PS8xMDk5NTExNjU5NTk0NDY1OTYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi45MyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMzMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMi43NCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIyMi43NCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjMzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjIuOTMgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjU1MDIwIiwgInRpdGxlIjogIuWIgOmprOaXpiIsICJkdXJhdGlvbiI6ICIwMzoxMiIsICJhcnRpc3QiOiAi5p2O546f44CB5ZGo5p2w5LymIiwgImFsYnVtIjogIlByb21pc2UiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZERnSERXbEpBRndrTU5yamJRRXhJQT09LzEwOTk1MTE2NTk1OTQ0NjU5Ni5qcGcifQ==", "name": "刀马旦-李玟、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57qq6ZKn54CaIChCcnlhbiBDaGkpIiwgIm5hbWUiOiAi56i76aaZICjpkqLnkLTniYgpIFvljp/llLE6IOWRqOadsOS8pl0iLCAiYWxidW1OYW1lIjogIumSoueQtOaUvuadvui9u+WQrCDmtYHooYzovbvpn7PkuZAg5Y2O6K+t57uP5YW4IiwgImFsYnVtSWQiOiAiMTQ0NjgxMzI4IiwgInNvbmdtaWQiOiAid3lfMTk0NTg5NTcyNSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjE2IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyLjk5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNy40OCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEwLjc2IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICIyNy40NSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjI3LjQ1IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjEwLjc2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjcuNDggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMi45OSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTQ1ODk1NzI1IiwgInRpdGxlIjogIueou+mmmSAo6ZKi55C054mIKSBb5Y6f5ZSxOiDlkajmnbDkvKZdIiwgImR1cmF0aW9uIjogIjAzOjE2IiwgImFydGlzdCI6ICLnuqrpkqfngJogKEJyeWFuIENoaSkiLCAiYWxidW0iOiAi6ZKi55C05pS+5p2+6L275ZCsIOa1geihjOi9u+mfs+S5kCDljY7or63nu4/lhbgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGcifQ==", "name": "稻香 (钢琴版) [原唱: 周杰伦]-纪钧瀚 (Bryan Chi)", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iyc5ouJIiwgIm5hbWUiOiAi5pyA6ZW/55qE55S15b2xIiwgImFsYnVtTmFtZSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysOOacnyIsICJhbGJ1bUlkIjogIjI3ODY4NjciLCAic29uZ21pZCI6ICJ3eV8yODQyNzc3MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA1OjE3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvbjlEMVJfekxfWGFLVzl6Zlc4czJ0QT09LzU5MjA4NzAxMTU3NTQyNjkuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC44NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEyLjEyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjkuNTAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjkuNTAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTIuMTIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNC44NSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yODQyNzc3MSIsICJ0aXRsZSI6ICLmnIDplb/nmoTnlLXlvbEiLCAiZHVyYXRpb24iOiAiMDU6MTciLCAiYXJ0aXN0IjogIuiMnOaLiSIsICJhbGJ1bSI6ICLmiJHmmK/mrYzmiYvnrKzkuozlraMg56ysOOacnyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9uOUQxUl96TF9YYUtXOXpmVzhzMnRBPT0vNTkyMDg3MDExNTc1NDI2OS5qcGcifQ==", "name": "最长的电影-茜拉", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O546f44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5YiA6ams5pemIiwgImFsYnVtTmFtZSI6ICJZb3UgJiBJIOe7j+WFuOWFqOe6quW9lSBQYXJ0IElJIiwgImFsYnVtSWQiOiAiNzk4ODU1NjciLCAic29uZ21pZCI6ICJ3eV8xMzcyODQ3MTU2IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MTIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9ReWIxT0JscjVjd0cxVGg2Wmh3Vlp3PT0vMTA5OTUxMTY1OTg2Njk3OTE4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuOTMgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjMzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjIuNzQgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjIuNzQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy4zMyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzEzNzI4NDcxNTYiLCAidGl0bGUiOiAi5YiA6ams5pemIiwgImR1cmF0aW9uIjogIjAzOjEyIiwgImFydGlzdCI6ICLmnY7njp/jgIHlkajmnbDkvKYiLCAiYWxidW0iOiAiWW91ICYgSSDnu4/lhbjlhajnuqrlvZUgUGFydCBJSSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9ReWIxT0JscjVjd0cxVGg2Wmh3Vlp3PT0vMTA5OTUxMTY1OTg2Njk3OTE4LmpwZyJ9", "name": "刀马旦-李玟、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2o6bmk5p2+IiwgIm5hbWUiOiAi5Y+v54ix5aWz5Lq677yIcHJvZCBieSBSRVZJVkFMIE1VU0lD77yJIiwgImFsYnVtTmFtZSI6ICLlj6/niLHlpbPkuroiLCAiYWxidW1JZCI6ICIxNDEzODkxNDgiLCAic29uZ21pZCI6ICJ3eV8xOTI1OTM5NjQ5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDM6MDUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9nWDBvSFYwaGxXb1RodW13NkJHby1BPT0vMTA5OTUxMTY3MTIxODIxMTE4LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuODIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI3LjA2IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjEuOTAgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjEuOTAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy4wNiBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjgyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MjU5Mzk2NDkiLCAidGl0bGUiOiAi5Y+v54ix5aWz5Lq677yIcHJvZCBieSBSRVZJVkFMIE1VU0lD77yJIiwgImR1cmF0aW9uIjogIjAzOjA1IiwgImFydGlzdCI6ICLmnajpuaTmnb4iLCAiYWxidW0iOiAi5Y+v54ix5aWz5Lq6IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2dYMG9IVjBobFdvVGh1bXc2QkdvLUE9PS8xMDk5NTExNjcxMjE4MjExMTguanBnIn0=", "name": "可爱女人(prod by REVIVAL MUSIC)-杨鹤松", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5p2O5oSP5ra1IiwgIm5hbWUiOiAi5LiA6LW36ZW/5aSn55qE57qm5a6aIiwgImFsYnVtTmFtZSI6ICLooYzmmKXmoaXkuIrmnIjlpoLpkqkiLCAiYWxidW1JZCI6ICIxNDU3OTk4MTQiLCAic29uZ21pZCI6ICJ3eV8xOTU2NDcwMDU0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC84b0d3NlRPUjNWb3BhUk5LM180VTZ3PT0vMTA5OTUxMTY3NDk3NDQ3ODc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI4NC4yOSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcxMC42NyBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI3MTAuNjcgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjg0LjI5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5NTY0NzAwNTQiLCAidGl0bGUiOiAi5LiA6LW36ZW/5aSn55qE57qm5a6aIiwgImR1cmF0aW9uIjogIjAwOjE4IiwgImFydGlzdCI6ICLmnY7mhI/mtrUiLCAiYWxidW0iOiAi6KGM5pil5qGl5LiK5pyI5aaC6ZKpIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzhvR3c2VE9SM1ZvcGFSTkszXzRVNnc9PS8xMDk5NTExNjc0OTc0NDc4NzUuanBnIn0=", "name": "一起长大的约定-李意涵", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IqxIiwgIm5hbWUiOiAi6buY77yIeDAuOO+8iSIsICJhbGJ1bU5hbWUiOiAiU+KdpO+4j1IiLCAiYWxidW1JZCI6ICIxNDQ5ODIzNTQiLCAic29uZ21pZCI6ICJ3eV8xOTUyNTAxMjc5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6MTciLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9DWVRjbFptWXdrMlhYbDdfYTlUWThRPT0vMTA5OTUxMTY3ODIxMzEwOTM3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuMTkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyLjk3IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy40MCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjQwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjIuOTcgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS4xOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTUyNTAxMjc5IiwgInRpdGxlIjogIum7mO+8iHgwLjjvvIkiLCAiZHVyYXRpb24iOiAiMDE6MTciLCAiYXJ0aXN0IjogIuiKsSIsICJhbGJ1bSI6ICJT4p2k77iPUiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9DWVRjbFptWXdrMlhYbDdfYTlUWThRPT0vMTA5OTUxMTY3ODIxMzEwOTM3LmpwZyJ9", "name": "默(x0.8)-花", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAibmFpdmVvdXMiLCAibmFtZSI6ICLor7Tkuoblho3op4Eo5Lyk5oSf5aWz5aOw54mIKSIsICJhbGJ1bU5hbWUiOiAi5b+D5Yqo5oC75piv5oWi5Y2K5ouNIiwgImFsYnVtSWQiOiAiMTI0OTkzNzQ2IiwgInNvbmdtaWQiOiAid3lfMTgzMTgwMzAxNSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjMyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMTNBX3NyY01lR1k3R2h0SHFZc2N6UT09LzEwOTk1MTE2OTUxMDMzMzQ5NC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI1MDIuNDkgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxLjIzIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNi4wOSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI2LjA5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEuMjMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiNTAyLjQ5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4MzE4MDMwMTUiLCAidGl0bGUiOiAi6K+05LqG5YaN6KeBKOS8pOaEn+Wls+WjsOeJiCkiLCAiZHVyYXRpb24iOiAiMDA6MzIiLCAiYXJ0aXN0IjogIm5haXZlb3VzIiwgImFsYnVtIjogIuW/g+WKqOaAu+aYr+aFouWNiuaLjSIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8xM0Ffc3JjTWVHWTdHaHRIcVlzY3pRPT0vMTA5OTUxMTY5NTEwMzMzNDk0LmpwZyJ9", "name": "说了再见(伤感女声版)-naiveous", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRWxldmVuIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLmsLjkuI3lpLHogZTnmoTniLEuIiwgImFsYnVtSWQiOiAiMTM0ODcwMjMwIiwgInNvbmdtaWQiOiAid3lfMTg4ODczNDc1NyIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjA4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvTDQzZUU1SC10VDF3Wkw3Z2xqWUttUT09LzEwOTk1MTE2NjUyNDQ1MTEyNy5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjA0IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMi42MCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIyLjYwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuMDQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg4ODczNDc1NyIsICJ0aXRsZSI6ICLpu5giLCAiZHVyYXRpb24iOiAiMDE6MDgiLCAiYXJ0aXN0IjogIkVsZXZlbiIsICJhbGJ1bSI6ICLmsLjkuI3lpLHogZTnmoTniLEuIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0w0M2VFNUgtdFQxd1pMN2dsallLbVE9PS8xMDk5NTExNjY1MjQ0NTExMjcuanBnIn0=", "name": "默-Eleven", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5by55ZCJ5LuW55qEU29zbyIsICJuYW1lIjogIuaIkeiQveazqu+8iOe/u+iHqiDlkajogIHluIjvvIkiLCAiYWxidW1OYW1lIjogIuaKlumfs+S8tOWlj+WQiOmbhiIsICJhbGJ1bUlkIjogIjEyNTYxMzY2OCIsICJzb25nbWlkIjogInd5XzE4MzY2MDU3MTIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMTowMSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1RvMVY2VmRxVGx1WXBod04tNE91X0E9PS8xMDk5NTExNjU4NjYyNDkxNzUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiOTYwLjA0IEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMi4zNCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYuMzUgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiNi4zNSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIyLjM0IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjk2MC4wNCBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODM2NjA1NzEyIiwgInRpdGxlIjogIuaIkeiQveazqu+8iOe/u+iHqiDlkajogIHluIjvvIkiLCAiZHVyYXRpb24iOiAiMDE6MDEiLCAiYXJ0aXN0IjogIuW8ueWQieS7lueahFNvc28iLCAiYWxidW0iOiAi5oqW6Z+z5Ly05aWP5ZCI6ZuGIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1RvMVY2VmRxVGx1WXBod04tNE91X0E9PS8xMDk5NTExNjU4NjYyNDkxNzUuanBnIn0=", "name": "我落泪(翻自 周老师)-弹吉他的Soso", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi57qq6ZKn54CaIChCcnlhbiBDaGkpIiwgIm5hbWUiOiAi5pm05aSpICjpkqLnkLTniYgpIFvljp/llLE6IOWRqOadsOS8pl0iLCAiYWxidW1OYW1lIjogIumSoueQtOaUvuadvui9u+WQrCDmtYHooYzovbvpn7PkuZAg5Y2O6K+t57uP5YW4IiwgImFsYnVtSWQiOiAiMTQ0NjgxMzI4IiwgInNvbmdtaWQiOiAid3lfMTk0NTg5NDc4OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjU4IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjYzIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS4wOCBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEwLjc0IE1CIn0sIHsidHlwZSI6ICJmbGFjMjRiaXQiLCAic2l6ZSI6ICIzMS4xMiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYzI0Yml0IjogeyJzaXplIjogIjMxLjEyIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjEwLjc0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMDggTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy42MyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTQ1ODk0Nzg5IiwgInRpdGxlIjogIuaZtOWkqSAo6ZKi55C054mIKSBb5Y6f5ZSxOiDlkajmnbDkvKZdIiwgImR1cmF0aW9uIjogIjAzOjU4IiwgImFydGlzdCI6ICLnuqrpkqfngJogKEJyeWFuIENoaSkiLCAiYWxidW0iOiAi6ZKi55C05pS+5p2+6L275ZCsIOa1geihjOi9u+mfs+S5kCDljY7or63nu4/lhbgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMUJ2eXp2dDRxblVfOGNmNEdmM3hsUT09LzEwOTk1MTE2NzM5NDQxMjMwMS5qcGcifQ==", "name": "晴天 (钢琴版) [原唱: 周杰伦]-纪钧瀚 (Bryan Chi)", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZizIiwgIm5hbWUiOiAi6buY77yIMC45eO+8iSIsICJhbGJ1bU5hbWUiOiAi4pmhIiwgImFsYnVtSWQiOiAiMTQ2MDE2MjMxIiwgInNvbmdtaWQiOiAid3lfMTk1MzMxODMxOSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjM1IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvRWZ6NUF4WHBDQ251aWMyYVdzeDVUUT09LzEwOTk1MTE2NzUzOTg5OTQxNy5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjQ2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMy42NSBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNDYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1MzMxODMxOSIsICJ0aXRsZSI6ICLpu5jvvIgwLjl477yJIiwgImR1cmF0aW9uIjogIjAxOjM1IiwgImFydGlzdCI6ICLpmLMiLCAiYWxidW0iOiAi4pmhIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0VmejVBeFhwQ0NudWljMmFXc3g1VFE9PS8xMDk5NTExNjc1Mzk4OTk0MTcuanBnIn0=", "name": "默(0.9x)-阳", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iqx5aSn5L6g44CBTGlueeeQs+WmriIsICJuYW1lIjogIuWRqOa4uCIsICJhbGJ1bU5hbWUiOiAi5ZGo5ri46K6wIiwgImFsYnVtSWQiOiAiODY1OTkwMTAiLCAic29uZ21pZCI6ICJ3eV8xNDMyNzQ3NzgxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC96ZUJuQlRBbjdwTktVanBlU0U3a1FnPT0vMTA5OTUxMTY0ODI0MDUwNDYyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjMxLjA4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjMxLjA4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTQzMjc0Nzc4MSIsICJ0aXRsZSI6ICLlkajmuLgiLCAiZHVyYXRpb24iOiAiMDQ6NTIiLCAiYXJ0aXN0IjogIuiKseWkp+S+oOOAgUxpbnnnkLPlpq4iLCAiYWxidW0iOiAi5ZGo5ri46K6wIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3plQm5CVEFuN3BOS1VqcGVTRTdrUWc9PS8xMDk5NTExNjQ4MjQwNTA0NjIuanBnIn0=", "name": "周游-花大侠、Liny琳妮", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5oiR5Lus5YiG5byAIOacrOadpeWwseS4jeW6lOivpSIsICJhbGJ1bU5hbWUiOiAi5pei54S255WZ5LiN5L2P6YKj5bCx5b6X5pS+5LiLIiwgImFsYnVtSWQiOiAiMTM4OTQwNTQyIiwgInNvbmdtaWQiOiAid3lfMTkxNDE0MjExOSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3pHSGNhZGt2eFZTWW5GV3ZYMDN3Zz09LzEwOTk1MTE2NjkzNzkxMzkyMi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNTMuOTIgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI4ODQuNzQgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjM3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMzcgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiODg0Ljc0IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM1My45MiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTE0MTQyMTE5IiwgInRpdGxlIjogIuaIkeS7rOWIhuW8gCDmnKzmnaXlsLHkuI3lupTor6UiLCAiZHVyYXRpb24iOiAiMDA6MjIiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3pHSGNhZGt2eFZTWW5GV3ZYMDN3Zz09LzEwOTk1MTE2NjkzNzkxMzkyMi5qcGcifQ==", "name": "我们分开 本来就不应该-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IOh5qCL5qCLIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLmipbpn7Pnv7vllLHlkIjpm4YiLCAiYWxidW1JZCI6ICI5MTg5NDE3NyIsICJzb25nbWlkIjogInd5XzE0NjM0NTE4ODciLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoxMyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1ZxVjVRU1dIQ244Y1ZmcEpDUDZydUE9PS8xMDk5NTExNjUxMTA4MTQ0NDAuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMjA5LjAyIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNTIyLjQ5IEtCIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMS42MCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxLjYwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjUyMi40OSBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMDkuMDIgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTQ2MzQ1MTg4NyIsICJ0aXRsZSI6ICLpu5giLCAiZHVyYXRpb24iOiAiMDA6MTMiLCAiYXJ0aXN0IjogIuiDoeagi+agiyIsICJhbGJ1bSI6ICLmipbpn7Pnv7vllLHlkIjpm4YiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvVnFWNVFTV0hDbjhjVmZwSkNQNnJ1QT09LzEwOTk1MTE2NTExMDgxNDQ0MC5qcGcifQ==", "name": "默-胡栋栋", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5LiA55u05LiO5oiR5bm26IKp6ICM6KGMIiwgImFsYnVtTmFtZSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAiYWxidW1JZCI6ICIxMzg5NDA1NDIiLCAic29uZ21pZCI6ICJ3eV8xOTEyNDM5MTUwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTkiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9TekdIY2Fka3Z4VlNZbkZXdlgwM3dnPT0vMTA5OTUxMTY2OTM3OTEzOTIyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMwMi40OSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjc1Ni4xNyBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjEuODMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMS44MyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3NTYuMTcgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMzAyLjQ5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MTI0MzkxNTAiLCAidGl0bGUiOiAi5LiA55u05LiO5oiR5bm26IKp6ICM6KGMIiwgImR1cmF0aW9uIjogIjAwOjE5IiwgImFydGlzdCI6ICLoh7PmraTpl7QiLCAiYWxidW0iOiAi5pei54S255WZ5LiN5L2P6YKj5bCx5b6X5pS+5LiLIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1N6R0hjYWRrdnhWU1luRld2WDAzd2c9PS8xMDk5NTExNjY5Mzc5MTM5MjIuanBnIn0=", "name": "一直与我并肩而行-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRG9scGhpbsKwIiwgIm5hbWUiOiAi5pep5a6JIiwgImFsYnVtTmFtZSI6ICLlkajmnbDkurvku5EiLCAiYWxidW1JZCI6ICIxNDA2MjgyMjYiLCAic29uZ21pZCI6ICJ3eV8xOTIxNTgwOTcxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9qNEJQNUVFWC1WVEZnT0NnVG50blJBPT0vMTA5OTUxMTY3MDY2MTQ1NTc1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjE3Ny4xOSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjQ0Mi45MCBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI0NDIuOTAgS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMTc3LjE5IEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE5MjE1ODA5NzEiLCAidGl0bGUiOiAi5pep5a6JIiwgImR1cmF0aW9uIjogIjAwOjExIiwgImFydGlzdCI6ICJEb2xwaGluwrAiLCAiYWxidW0iOiAi5ZGo5p2w5Lq75LuRIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2o0QlA1RUVYLVZURmdPQ2dUbnRuUkE9PS8xMDk5NTExNjcwNjYxNDU1NzUuanBnIn0=", "name": "早安-Dolphin°", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5Yir5oOz5aSq5aSaIOiwgemZquWcqOS9oOi6q+i+ueS9oOWwseWlveWlveaEm+iwgSIsICJhbGJ1bU5hbWUiOiAi5rKh5pyJ5LuA5LmI5piv5a6M576O77yM5oC75Lya5pyJ56OV56OV57uK57uKIiwgImFsYnVtSWQiOiAiMTM4MTYzOTkzIiwgInNvbmdtaWQiOiAid3lfMTkwODA2NjUxNCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE0IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMzIuNzAgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1ODEuNjggS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI4NjAuNTYgS0IifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiODYwLjU2IEtCIn0sICIzMjBrIjogeyJzaXplIjogIjU4MS42OCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyMzIuNzAgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkwODA2NjUxNCIsICJ0aXRsZSI6ICLliKvmg7PlpKrlpJog6LCB6Zmq5Zyo5L2g6Lqr6L655L2g5bCx5aW95aW95oSb6LCBIiwgImR1cmF0aW9uIjogIjAwOjE0IiwgImFydGlzdCI6ICLoh7PmraTpl7QiLCAiYWxidW0iOiAi5rKh5pyJ5LuA5LmI5piv5a6M576O77yM5oC75Lya5pyJ56OV56OV57uK57uKIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0d3bWdUaGJKY0d4RjNsS3VuS3BzY0E9PS8xMDk5NTExNjY4NjgyNzQ3MTEuanBnIn0=", "name": "别想太多 谁陪在你身边你就好好愛谁-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRy5FLk0u6YKT57Sr5qOLIiwgIm5hbWUiOiAi6b6Z5Y236aOOIChMaXZlKSIsICJhbGJ1bU5hbWUiOiAi5oiR5piv5q2M5omL56ys5LqM5a2jIOesrDnmnJ8iLCAiYWxidW1JZCI6ICIyNzg2ODY4IiwgInNvbmdtaWQiOiAid3lfMjg0Mjc3NzUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDozMSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2RLNnR3dUZZS0tCZGUxckRtRFZiUFE9PS81OTgxMzQzMjU1MjYxNDQ5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMTUgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC4zNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI5LjU2IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI5LjU2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjM3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuMTUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjg0Mjc3NzUiLCAidGl0bGUiOiAi6b6Z5Y236aOOIChMaXZlKSIsICJkdXJhdGlvbiI6ICIwNDozMSIsICJhcnRpc3QiOiAiRy5FLk0u6YKT57Sr5qOLIiwgImFsYnVtIjogIuaIkeaYr+atjOaJi+esrOS6jOWtoyDnrKw55pyfIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2RLNnR3dUZZS0tCZGUxckRtRFZiUFE9PS81OTgxMzQzMjU1MjYxNDQ5LmpwZyJ9", "name": "龙卷风 (Live)-G.E.M.邓紫棋", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi54ix5rKh5pyJ5pa55ZCRIOS9oOWcqOWTquWEvyDniLHlsLHlnKjlk6oiLCAiYWxidW1OYW1lIjogIuayoeacieS7gOS5iOaYr+WujOe+ju+8jOaAu+S8muacieejleejlee7iue7iiIsICJhbGJ1bUlkIjogIjEzODE2Mzk5MyIsICJzb25nbWlkIjogInd5XzE5MDgwODA2NjgiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoyMyIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0d3bWdUaGJKY0d4RjNsS3VuS3BzY0E9PS8xMDk5NTExNjY4NjgyNzQ3MTEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMzY1Ljc2IEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOTE0LjMzIEtCIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMS4yNSBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxLjI1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkxNC4zMyBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzNjUuNzYgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkwODA4MDY2OCIsICJ0aXRsZSI6ICLniLHmsqHmnInmlrnlkJEg5L2g5Zyo5ZOq5YS/IOeIseWwseWcqOWTqiIsICJkdXJhdGlvbiI6ICIwMDoyMyIsICJhcnRpc3QiOiAi6Iez5q2k6Ze0IiwgImFsYnVtIjogIuayoeacieS7gOS5iOaYr+WujOe+ju+8jOaAu+S8muacieejleejlee7iue7iiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyJ9", "name": "爱没有方向 你在哪儿 爱就在哪-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5rSL5qGU5qKXIiwgIm5hbWUiOiAi6buY77yIY2ljaV/niYjvvIkiLCAiYWxidW1OYW1lIjogIuKCiiDigbrimIHvuI/igoog4oG6IiwgImFsYnVtSWQiOiAiMTQxMTAwNzMyIiwgInNvbmdtaWQiOiAid3lfMTkyNTEyMzU0NSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveWFWMTVWenp2TnNjWS1wNFVxbks0dz09LzEwOTk1MTE2NzEwMjM4MTQwMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNjQuNTQgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5MTEuMjkgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjQxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuNDEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOTExLjI5IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM2NC41NCBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTI1MTIzNTQ1IiwgInRpdGxlIjogIum7mO+8iGNpY2lf54mI77yJIiwgImR1cmF0aW9uIjogIjAwOjIzIiwgImFydGlzdCI6ICLmtIvmoZTmopciLCAiYWxidW0iOiAi4oKKIOKBuuKYge+4j+KCiiDigboiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQveWFWMTVWenp2TnNjWS1wNFVxbks0dz09LzEwOTk1MTE2NzEwMjM4MTQwMS5qcGcifQ==", "name": "默(cici_版)-洋桔梗", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IuP5Lqm5rSLTXVzaWMiLCAibmFtZSI6ICLniLHmiJHlt7Lnu4/liIbkuI3muIUiLCAiYWxidW1OYW1lIjogIuWPpeWPpeaXoOS9oCDlj6Xlj6XlhpnkvaAuIiwgImFsYnVtSWQiOiAiOTU3NTUzMzAiLCAic29uZ21pZCI6ICJ3eV8xNDgyMjgzNjY5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MTUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9jbkgzOERKRElaV2ZuQmxkRk8xdEt3PT0vMTA5OTUxMTY1NzMxNjMzNTY5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjI0My40MiBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjYwOC40OCBLQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI2MDguNDggS0IifSwgIjEyOGsiOiB7InNpemUiOiAiMjQzLjQyIEtCIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0ODIyODM2NjkiLCAidGl0bGUiOiAi54ix5oiR5bey57uP5YiG5LiN5riFIiwgImR1cmF0aW9uIjogIjAwOjE1IiwgImFydGlzdCI6ICLoi4/kuqbmtItNdXNpYyIsICJhbGJ1bSI6ICLlj6Xlj6Xml6DkvaAg5Y+l5Y+l5YaZ5L2gLiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9jbkgzOERKRElaV2ZuQmxkRk8xdEt3PT0vMTA5OTUxMTY1NzMxNjMzNTY5LmpwZyJ9", "name": "爱我已经分不清-苏亦洋Music", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5rKh5pyJ5LuA5LmI5a6M576OIOaAu+S8muacieejleejlee7iue7iiIsICJhbGJ1bU5hbWUiOiAi5rKh5pyJ5LuA5LmI5piv5a6M576O77yM5oC75Lya5pyJ56OV56OV57uK57uKIiwgImFsYnVtSWQiOiAiMTM4MTYzOTkzIiwgInNvbmdtaWQiOiAid3lfMTkwODA2NzE1NSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjIzIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzNjkuMDIgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI5MjIuNDkgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIxLjkxIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjEuOTEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiOTIyLjQ5IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjM2OS4wMiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTA4MDY3MTU1IiwgInRpdGxlIjogIuayoeacieS7gOS5iOWujOe+jiDmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAiZHVyYXRpb24iOiAiMDA6MjMiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGcifQ==", "name": "没有什么完美 总会有磕磕绊绊-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6YOt6Z2Z6ZuvIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLotbfpo47kuoYiLCAiYWxidW1JZCI6ICIxMzQwMzgyNTIiLCAic29uZ21pZCI6ICJ3eV8xODgyNzcwNTc4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDE6MDgiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9uRlY3QmVmb0lrSzBBYkYxYl9jcWlnPT0vMTA5OTUxMTY2NDcwMTU4NDQ1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjEuMDQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyLjYxIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNy45MiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI3LjkyIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjIuNjEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMS4wNCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODgyNzcwNTc4IiwgInRpdGxlIjogIum7mCIsICJkdXJhdGlvbiI6ICIwMTowOCIsICJhcnRpc3QiOiAi6YOt6Z2Z6ZuvIiwgImFsYnVtIjogIui1t+mjjuS6hiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9uRlY3QmVmb0lrSzBBYkYxYl9jcWlnPT0vMTA5OTUxMTY2NDcwMTU4NDQ1LmpwZyJ9", "name": "默-郭静雯", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5rKh5Lq65Lya562J5L2g5b6I5LmFIiwgImFsYnVtTmFtZSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAiYWxidW1JZCI6ICIxMzgxNjM5OTMiLCAic29uZ21pZCI6ICJ3eV8xOTA5NDIxNTk0IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MjEiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjMzMC4yNSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjgyNS41NSBLQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjkwNC44MSBLQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICI5MDQuODEgS0IifSwgIjMyMGsiOiB7InNpemUiOiAiODI1LjU1IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjMzMC4yNSBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTA5NDIxNTk0IiwgInRpdGxlIjogIuayoeS6uuS8muetieS9oOW+iOS5hSIsICJkdXJhdGlvbiI6ICIwMDoyMSIsICJhcnRpc3QiOiAi6Iez5q2k6Ze0IiwgImFsYnVtIjogIuayoeacieS7gOS5iOaYr+WujOe+ju+8jOaAu+S8muacieejleejlee7iue7iiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyJ9", "name": "没人会等你很久-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5bm45aW95oCd5b+15peg5aOwIiwgImFsYnVtTmFtZSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAiYWxidW1JZCI6ICIxMzg5NDA1NDIiLCAic29uZ21pZCI6ICJ3eV8xOTE2ODU5NDc5IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6NDUiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9TekdIY2Fka3Z4VlNZbkZXdlgwM3dnPT0vMTA5OTUxMTY2OTM3OTEzOTIyLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjcxNS41NSBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuNzUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI1LjU1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjUuNTUgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS43NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI3MTUuNTUgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkxNjg1OTQ3OSIsICJ0aXRsZSI6ICLlubjlpb3mgJ3lv7Xml6Dlo7AiLCAiZHVyYXRpb24iOiAiMDA6NDUiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLml6LnhLbnlZnkuI3kvY/pgqPlsLHlvpfmlL7kuIsiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvU3pHSGNhZGt2eFZTWW5GV3ZYMDN3Zz09LzEwOTk1MTE2NjkzNzkxMzkyMi5qcGcifQ==", "name": "幸好思念无声-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi576k5pifIiwgIm5hbWUiOiAi6b6Z5Y236aOOIiwgImFsYnVtTmFtZSI6ICLmtYHmmJ8u5Y+M5aa5LuWUmyIsICJhbGJ1bUlkIjogIjUxMjk1NyIsICJzb25nbWlkIjogInd5XzUyNzAzMDIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzoyNCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0Lzk5WkFMVDBMYjV3UE1IN0oxZTU5S1E9PS81NTc0NTIzOTUyOTQ0MTIuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4xMiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuODAgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMy4wMCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMy4wMCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI3LjgwIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuMTIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI3MDMwMiIsICJ0aXRsZSI6ICLpvpnljbfpo44iLCAiZHVyYXRpb24iOiAiMDM6MjQiLCAiYXJ0aXN0IjogIue+pOaYnyIsICJhbGJ1bSI6ICLmtYHmmJ8u5Y+M5aa5LuWUmyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC85OVpBTFQwTGI1d1BNSDdKMWU1OUtRPT0vNTU3NDUyMzk1Mjk0NDEyLmpwZyJ9", "name": "龙卷风-群星", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iez5q2k6Ze0IiwgIm5hbWUiOiAi5LiN5piv5omA5pyJ55qE55u46YGH6YO95Lya5pyJ57uT5p6cIiwgImFsYnVtTmFtZSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAiYWxidW1JZCI6ICIxMzgxNjM5OTMiLCAic29uZ21pZCI6ICJ3eV8xOTA4MzA0MzE1IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDA6MjYiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9Hd21nVGhiSmNHeEYzbEt1bktwc2NBPT0vMTA5OTUxMTY2ODY4Mjc0NzExLmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQyMC44NiBLQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEuMDMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjY3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuNjcgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMS4wMyBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI0MjAuODYgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkwODMwNDMxNSIsICJ0aXRsZSI6ICLkuI3mmK/miYDmnInnmoTnm7jpgYfpg73kvJrmnInnu5PmnpwiLCAiZHVyYXRpb24iOiAiMDA6MjYiLCAiYXJ0aXN0IjogIuiHs+atpOmXtCIsICJhbGJ1bSI6ICLmsqHmnInku4DkuYjmmK/lroznvo7vvIzmgLvkvJrmnInno5Xno5Xnu4rnu4oiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvR3dtZ1RoYkpjR3hGM2xLdW5LcHNjQT09LzEwOTk1MTE2Njg2ODI3NDcxMS5qcGcifQ==", "name": "不是所有的相遇都会有结果-至此间", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRmx1b3hldGluZSIsICJuYW1lIjogIueypOivrSAj6Z2R6Iqx55O3ICPlvLnllLEg6Iqs6IqsIiwgImFsYnVtTmFtZSI6ICLlm54g5b+GIiwgImFsYnVtSWQiOiAiMTQxMzY3MzkwIiwgInNvbmdtaWQiOiAid3lfMTkyNzM2ODUwMCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZlNORjVuY2dTa2ZoY1dybDRmLWNhQT09LzEwOTk1MTE2NzExODY3MTY0Ni5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyNjguNTQgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI2NzEuMjkgS0IifV0sICJfdHlwZXMiOiB7IjMyMGsiOiB7InNpemUiOiAiNjcxLjI5IEtCIn0sICIxMjhrIjogeyJzaXplIjogIjI2OC41NCBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTI3MzY4NTAwIiwgInRpdGxlIjogIueypOivrSAj6Z2R6Iqx55O3ICPlvLnllLEg6Iqs6IqsIiwgImR1cmF0aW9uIjogIjAwOjE3IiwgImFydGlzdCI6ICJGbHVveGV0aW5lIiwgImFsYnVtIjogIuWbniDlv4YiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvZlNORjVuY2dTa2ZoY1dybDRmLWNhQT09LzEwOTk1MTE2NzExODY3MTY0Ni5qcGcifQ==", "name": "粤语 #靑花瓷 #弹唱 芬芬-Fluoxetine", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTGVvLiIsICJuYW1lIjogIueugOW8mOS6pi3pu5jvvIhMZW8uIHJlbWl477yJIiwgImFsYnVtTmFtZSI6ICJMJ2Ftb3VyLiIsICJhbGJ1bUlkIjogIjE0MDM0MjQ4MyIsICJzb25nbWlkIjogInd5XzE5MjIwMDU3NTUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDo1MCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0tnZnp3bXNMbER5RW5mS3BOdkQtbnc9PS8xMDk5NTExNjcwNDYzNjU2NzEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNzkwLjkyIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMS45MyBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICIxLjkzIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjc5MC45MiBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTIyMDA1NzU1IiwgInRpdGxlIjogIueugOW8mOS6pi3pu5jvvIhMZW8uIHJlbWl477yJIiwgImR1cmF0aW9uIjogIjAwOjUwIiwgImFydGlzdCI6ICJMZW8uIiwgImFsYnVtIjogIkwnYW1vdXIuIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0tnZnp3bXNMbER5RW5mS3BOdkQtbnc9PS8xMDk5NTExNjcwNDYzNjU2NzEuanBnIn0=", "name": "简弘亦-默(Leo. remix)-Leo.", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6JSh5L6d5p6X44CB5ZGo5p2w5LymIiwgIm5hbWUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImFsYnVtTmFtZSI6ICLlt6jmmJ/ph5Hmm7It5ZCI5ZSx56+HIiwgImFsYnVtSWQiOiAiMzAxNzI5OCIsICJzb25nbWlkIjogInd5XzI5MzkzNjQxIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDQ6NTMiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9UbEZBSjBieFZKVlp5VzlVTV81U2lRPT0vMTA5OTUxMTY2OTI2NjkyMzI0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuNDkgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMS4yMSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjU3Ljc2IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjU3Ljc2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjIxIE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuNDkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMjkzOTM2NDEiLCAidGl0bGUiOiAi5biD5ouJ5qC85bm/5Zy6IiwgImR1cmF0aW9uIjogIjA0OjUzIiwgImFydGlzdCI6ICLolKHkvp3mnpfjgIHlkajmnbDkvKYiLCAiYWxidW0iOiAi5beo5pif6YeR5puyLeWQiOWUseevhyIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9UbEZBSjBieFZKVlp5VzlVTV81U2lRPT0vMTA5OTUxMTY2OTI2NjkyMzI0LmpwZyJ9", "name": "布拉格广场-蔡依林、周杰伦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTWljaGFlbCBUYWkiLCAibmFtZSI6ICLlsI/pm6jlr6vnq4vlj6/nmb0gSSB8IFhpYW8gWXUncyBUaGVtZSBJIChmcm9tIFwiU2VjcmV0XCIpIiwgImFsYnVtTmFtZSI6ICLkuI3og73oqqrnmoTnp5jlr4YgXCJTZWNyZXRcIiAmIFBvcCAtIFBpYW5vIENvbGxlY3Rpb24iLCAiYWxidW1JZCI6ICI4Nzg5MDU2MyIsICJzb25nbWlkIjogInd5XzE0Mzk3NDEwODQiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMjoyMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi4xOCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjUuNDUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI2LjM1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYuMzUgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS40NSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjE4IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0Mzk3NDEwODQiLCAidGl0bGUiOiAi5bCP6Zuo5a+r56uL5Y+v55m9IEkgfCBYaWFvIFl1J3MgVGhlbWUgSSAoZnJvbSBcIlNlY3JldFwiKSIsICJkdXJhdGlvbiI6ICIwMjoyMiIsICJhcnRpc3QiOiAiTWljaGFlbCBUYWkiLCAiYWxidW0iOiAi5LiN6IO96Kqq55qE56eY5a+GIFwiU2VjcmV0XCIgJiBQb3AgLSBQaWFubyBDb2xsZWN0aW9uIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIn0=", "name": "小雨寫立可白 I | Xiao Yu\'s Theme I (from \\"Secret\\")-Michael Tai", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTWljaGFlbCBUYWkiLCAibmFtZSI6ICLot6/lsI/pm6ggfCBMdSBYaWFvIFl1IChmcm9tIFwiU2VjcmV0XCIpIiwgImFsYnVtTmFtZSI6ICLkuI3og73oqqrnmoTnp5jlr4YgXCJTZWNyZXRcIiAmIFBvcCAtIFBpYW5vIENvbGxlY3Rpb24iLCAiYWxidW1JZCI6ICI4Nzg5MDU2MyIsICJzb25nbWlkIjogInd5XzE0Mzk3MzkxMDIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMzowNSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMi44NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjcuMDkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI5LjE5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjkuMTkgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNy4wOSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjg0IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0Mzk3MzkxMDIiLCAidGl0bGUiOiAi6Lev5bCP6ZuoIHwgTHUgWGlhbyBZdSAoZnJvbSBcIlNlY3JldFwiKSIsICJkdXJhdGlvbiI6ICIwMzowNSIsICJhcnRpc3QiOiAiTWljaGFlbCBUYWkiLCAiYWxidW0iOiAi5LiN6IO96Kqq55qE56eY5a+GIFwiU2VjcmV0XCIgJiBQb3AgLSBQaWFubyBDb2xsZWN0aW9uIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L21HdEZwWGVXSkhpV3NRX3dHNXZBZlE9PS8xMDk5NTExNjQ4OTUwNzAzNTEuanBnIn0=", "name": "路小雨 | Lu Xiao Yu (from \\"Secret\\")-Michael Tai", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5rGf576O55CqIiwgIm5hbWUiOiAi5pif5pm0IiwgImFsYnVtTmFtZSI6ICLnvo7kuZDlnLAiLCAiYWxidW1JZCI6ICIyNDgwNCIsICJzb25nbWlkIjogInd5XzI0NzU4MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjE5IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvdUZXT09HSzJIaVJsZHR4eG1sSXBDUT09LzEwOTk1MTE2NjU2MjgzOTcyNi5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjk2IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS45MSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI4LjE4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjI4LjE4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuOTEgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45NiBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8yNDc1ODEiLCAidGl0bGUiOiAi5pif5pm0IiwgImR1cmF0aW9uIjogIjA0OjE5IiwgImFydGlzdCI6ICLmsZ/nvo7nkKoiLCAiYWxidW0iOiAi576O5LmQ5ZywIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3VGV09PR0sySGlSbGR0eHhtbElwQ1E9PS8xMDk5NTExNjY1NjI4Mzk3MjYuanBnIn0=", "name": "星晴-江美琪", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6Iqx5aSn5L6gIiwgIm5hbWUiOiAi5piG5Lym5bGxIiwgImFsYnVtTmFtZSI6ICLmmIbkvKblsbEiLCAiYWxidW1JZCI6ICI4MzgxMjczMyIsICJzb25nbWlkIjogInd5XzE0MDcyMjI3NTUiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMToyMiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3RBYlFxckJveHA0d05kOGpSTlZ5cGc9PS8xMDk5NTExNjQ1MjQ0MDQ5OTUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMS4yNiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjMuMTUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI3LjE1IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjcuMTUgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMy4xNSBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIxLjI2IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE0MDcyMjI3NTUiLCAidGl0bGUiOiAi5piG5Lym5bGxIiwgImR1cmF0aW9uIjogIjAxOjIyIiwgImFydGlzdCI6ICLoirHlpKfkvqAiLCAiYWxidW0iOiAi5piG5Lym5bGxIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3RBYlFxckJveHA0d05kOGpSTlZ5cGc9PS8xMDk5NTExNjQ1MjQ0MDQ5OTUuanBnIn0=", "name": "昆伦山-花大侠", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAia2luZ+mHkemRqyIsICJuYW1lIjogIuWkj+WkqeeahOmjji1raW5n6YeR6ZGr5pS557yW54mIIiwgImFsYnVtTmFtZSI6ICLlpI/lpKnnmoTpo47vvIhraW5n6YeR6ZGr5pS557yW54mI77yJIiwgImFsYnVtSWQiOiAiMTI2OTQxNzYyIiwgInNvbmdtaWQiOiAid3lfMTg0MjU2MTM0OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjA0OjE5IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvc0VCb05neU5KeUJFcHBaR0RuT09yQT09LzEwOTk1MTE2NTk1MTYzNTE4MC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjk3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOS45MiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjUwLjM4IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjUwLjM4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuOTIgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy45NyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODQyNTYxMzQ5IiwgInRpdGxlIjogIuWkj+WkqeeahOmjji1raW5n6YeR6ZGr5pS557yW54mIIiwgImR1cmF0aW9uIjogIjA0OjE5IiwgImFydGlzdCI6ICJraW5n6YeR6ZGrIiwgImFsYnVtIjogIuWkj+WkqeeahOmjju+8iGtpbmfph5HpkavmlLnnvJbniYjvvIkiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvc0VCb05neU5KeUJFcHBaR0RuT09yQT09LzEwOTk1MTE2NTk1MTYzNTE4MC5qcGcifQ==", "name": "夏天的风-king金鑫改编版-king金鑫", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5pq06LqB6Zi/6I+cIiwgIm5hbWUiOiAi6buYIiwgImFsYnVtTmFtZSI6ICLpu5giLCAiYWxidW1JZCI6ICIxMzU1ODE0MDYiLCAic29uZ21pZCI6ICJ3eV8xODkxNzQzNTYwIiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MTIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9RMXhSWW04cnF5dHFra0JrYWNkaHF3PT0vMTA5OTUxMTY2NTgxNTE0MDU1LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMDIgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1LjA0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjIuMjMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjIuMjMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS4wNCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjAyIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4OTE3NDM1NjAiLCAidGl0bGUiOiAi6buYIiwgImR1cmF0aW9uIjogIjAyOjEyIiwgImFydGlzdCI6ICLmmrTouoHpmL/oj5wiLCAiYWxidW0iOiAi6buYIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1ExeFJZbThycXl0cWtrQmthY2RocXc9PS8xMDk5NTExNjY1ODE1MTQwNTUuanBnIn0=", "name": "默-暴躁阿菜", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5YyX562xIiwgIm5hbWUiOiAi6Zuo5reL5rm/5LqG5aSp56m6KERK54mIKSIsICJhbGJ1bU5hbWUiOiAiRGEgRGEgRGEiLCAiYWxidW1JZCI6ICIxMjU4MTIxMzciLCAic29uZ21pZCI6ICJ3eV8xODM2MTEzNjg4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDI6MTkiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC92S1JfNmxaNFNEaUZNR3YxeG11bkdBPT0vMTA5OTUxMTY1ODc2MzE2Mjg3LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjIuMTQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1LjM0IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjMuNzEgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMjMuNzEgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNS4zNCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyLjE0IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogInd5XzE4MzYxMTM2ODgiLCAidGl0bGUiOiAi6Zuo5reL5rm/5LqG5aSp56m6KERK54mIKSIsICJkdXJhdGlvbiI6ICIwMjoxOSIsICJhcnRpc3QiOiAi5YyX562xIiwgImFsYnVtIjogIkRhIERhIERhIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L3ZLUl82bFo0U0RpRk1HdjF4bXVuR0E9PS8xMDk5NTExNjU4NzYzMTYyODcuanBnIn0=", "name": "雨淋湿了天空(DJ版)-北筱", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi56ev6Zuo5LqRMTk5OOOAgVZpY3RvcuKYhuOAgeW/jeaEm+S5i+WKjeOAgVJlYTFjIiwgIm5hbWUiOiAi5ZGo5p2w5LymXFxKYXkgY2hvdSIsICJhbGJ1bU5hbWUiOiAi5L6d5pen6IyD54m56KW/IiwgImFsYnVtSWQiOiAiMTM5MDI3ODUzIiwgInNvbmdtaWQiOiAid3lfMTkxMjk3NTg3OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAzOjI3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvdEJ0M3BZNUF6Y01tY2tIVXRTWGtXdz09LzEwOTk1MTE2Njk0ODExMDI3OC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIzLjE3IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNy45MyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjIyLjE3IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIyLjE3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjcuOTMgTUIifSwgIjEyOGsiOiB7InNpemUiOiAiMy4xNyBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xOTEyOTc1ODc5IiwgInRpdGxlIjogIuWRqOadsOS8plxcSmF5IGNob3UiLCAiZHVyYXRpb24iOiAiMDM6MjciLCAiYXJ0aXN0IjogIuenr+mbqOS6kTE5OTjjgIFWaWN0b3LimIbjgIHlv43mhJvkuYvlio3jgIFSZWExYyIsICJhbGJ1bSI6ICLkvp3ml6fojIPnibnopb8iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvdEJ0M3BZNUF6Y01tY2tIVXRTWGtXdz09LzEwOTk1MTE2Njk0ODExMDI3OC5qcGcifQ==", "name": "周杰伦\\\\Jay chou-积雨云1998、Victor☆、忍愛之劍、Rea1c", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiWGxpbmMiLCAibmFtZSI6ICLkuIvpm6jlpKkiLCAiYWxidW1OYW1lIjogIuaXoOS4juS8puavlCIsICJhbGJ1bUlkIjogIjEzOTgwNDIxNiIsICJzb25nbWlkIjogInd5XzE5MTcxNjA3NzEiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNDoxNCIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0FkQzRLUy1sUjdnVkZJVzJBQmE1TXc9PS8xMDk5NTExNjcwMTg0Njc0OTIuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy44OCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMC45OCBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIzMC45OCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICI5LjY5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjMuODggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTkxNzE2MDc3MSIsICJ0aXRsZSI6ICLkuIvpm6jlpKkiLCAiZHVyYXRpb24iOiAiMDQ6MTQiLCAiYXJ0aXN0IjogIlhsaW5jIiwgImFsYnVtIjogIuaXoOS4juS8puavlCIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9BZEM0S1MtbFI3Z1ZGSVcyQUJhNU13PT0vMTA5OTUxMTY3MDE4NDY3NDkyLmpwZyJ9", "name": "下雨天-Xlinc", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5rS75Zyo5qKmIiwgIm5hbWUiOiAi54yc5q2M5ZCNNCIsICJhbGJ1bU5hbWUiOiAi54yc5q2M5ZCN57O75YiXIiwgImFsYnVtSWQiOiAiMTM1Njg5OTE3IiwgInNvbmdtaWQiOiAid3lfMTg5MjM1Nzk5OCIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjEyIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMV9mZEIwM3pIbUtzOHdyUXBVNGpWdz09LzEwOTk1MTE2NjU4NzE2OTA2OS5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxODguNjcgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI0NzEuNjEgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjEwIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMTAgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNDcxLjYxIEtCIn0sICIxMjhrIjogeyJzaXplIjogIjE4OC42NyBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODkyMzU3OTk4IiwgInRpdGxlIjogIueMnOatjOWQjTQiLCAiZHVyYXRpb24iOiAiMDA6MTIiLCAiYXJ0aXN0IjogIua0u+WcqOaipiIsICJhbGJ1bSI6ICLnjJzmrYzlkI3ns7vliJciLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvMV9mZEIwM3pIbUtzOHdyUXBVNGpWdz09LzEwOTk1MTE2NjU4NzE2OTA2OS5qcGcifQ==", "name": "猜歌名4-活在梦", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRErph47pqawiLCAibmFtZSI6ICLniLflj6rmmK/mgJXplJnov4fvvIhESuWSmum8k+eJiO+8iSIsICJhbGJ1bU5hbWUiOiAi54ix5oGo5ZCE5LiA5Y2KIiwgImFsYnVtSWQiOiAiMTMwMTg1NjAyIiwgInNvbmdtaWQiOiAid3lfMTg2MDEyMjE4MSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjAwIiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvQmVjeld3YlVxOGZBd000c1FCaUl2Zz09LzEwOTk1MTE2NjE2NTE2NzI2My5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI5NDEuMjcgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIyLjMwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMTEuMzMgTUIifV0sICJfdHlwZXMiOiB7ImZsYWMiOiB7InNpemUiOiAiMTEuMzMgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMi4zMCBNQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICI5NDEuMjcgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg2MDEyMjE4MSIsICJ0aXRsZSI6ICLniLflj6rmmK/mgJXplJnov4fvvIhESuWSmum8k+eJiO+8iSIsICJkdXJhdGlvbiI6ICIwMTowMCIsICJhcnRpc3QiOiAiRErph47pqawiLCAiYWxidW0iOiAi54ix5oGo5ZCE5LiA5Y2KIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0JlY3pXd2JVcThmQXdNNHNRQmlJdmc9PS8xMDk5NTExNjYxNjUxNjcyNjMuanBnIn0=", "name": "爷只是怕错过(DJ咚鼓版)-DJ野马", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiRErpmL/ovakiLCAibmFtZSI6ICLnpYHpl7vlhqXovakt562J5L2g5Zue5p2l77yI56WB6Ze75Yal6L2pIHJlbWl477yJIiwgImFsYnVtTmFtZSI6ICLogIHkurrkuI7opb/mtbflsrgiLCAiYWxidW1JZCI6ICIxMjQyMDUyNTkiLCAic29uZ21pZCI6ICJ3eV8xODMwNTY0MTU4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDY6MjIiLCAiaW1nIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9LdmgyRkU0ZUwzQTR1ZGY3Q3dTZVpnPT0vMTA5OTUxMTY1ODE1NjcwMzA5LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjUuODQgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxNC41OSBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjc2Ljk0IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjc2Ljk0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjE0LjU5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjUuODQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgzMDU2NDE1OCIsICJ0aXRsZSI6ICLnpYHpl7vlhqXovakt562J5L2g5Zue5p2l77yI56WB6Ze75Yal6L2pIHJlbWl477yJIiwgImR1cmF0aW9uIjogIjA2OjIyIiwgImFydGlzdCI6ICJESumYv+i9qSIsICJhbGJ1bSI6ICLogIHkurrkuI7opb/mtbflsrgiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvS3ZoMkZFNGVMM0E0dWRmN0N3U2VaZz09LzEwOTk1MTE2NTgxNTY3MDMwOS5qcGcifQ==", "name": "祁闻冥轩-等你回来(祁闻冥轩 remix)-DJ阿轩", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6IuP5Lqm5rSLTXVzaWMiLCAibmFtZSI6ICLmiJHlgYfoo4XkuI3nn6XpgZPvvIjmipHpg4HniYjvvIkiLCAiYWxidW1OYW1lIjogIue7iOaYr+WcqOWKq+mAg+maviIsICJhbGJ1bUlkIjogIjEyMjE5NTUxNCIsICJzb25nbWlkIjogInd5XzE4MTgxNzgzODIiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoyNSIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0LzIxV21iNHVBOUFUOFpYajRIa1YzSUE9PS8xMDk5NTExNjU3MDAyMzQ4NzMuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMzk5LjIzIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiOTk4LjAwIEtCIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjk5OC4wMCBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIzOTkuMjMgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTgxODE3ODM4MiIsICJ0aXRsZSI6ICLmiJHlgYfoo4XkuI3nn6XpgZPvvIjmipHpg4HniYjvvIkiLCAiZHVyYXRpb24iOiAiMDA6MjUiLCAiYXJ0aXN0IjogIuiLj+S6pua0i011c2ljIiwgImFsYnVtIjogIue7iOaYr+WcqOWKq+mAg+maviIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC8yMVdtYjR1QTlBVDhaWGo0SGtWM0lBPT0vMTA5OTUxMTY1NzAwMjM0ODczLmpwZyJ9", "name": "我假装不知道(抑郁版)-苏亦洋Music", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiQmnlk6lCaeWTqeaxqiIsICJuYW1lIjogImFIVU96IiwgImFsYnVtTmFtZSI6ICLng63pl6jljY7or60yNjMiLCAiYWxidW1JZCI6ICIzMTIwMDg5IiwgInNvbmdtaWQiOiAid3lfMzE2NTQ2NjAiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwNToxNiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2Nwb1VpbnJFeGFmQkhMNU52NWlESFE9PS8xMDk5NTExNjYzNjEyMTg0NjYuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC44NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEyLjA5IE1CIn1dLCAiX3R5cGVzIjogeyIzMjBrIjogeyJzaXplIjogIjEyLjA5IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMzE2NTQ2NjAiLCAidGl0bGUiOiAiYUhVT3oiLCAiZHVyYXRpb24iOiAiMDU6MTYiLCAiYXJ0aXN0IjogIkJp5ZOpQmnlk6nmsaoiLCAiYWxidW0iOiAi54Ot6Zeo5Y2O6K+tMjYzIiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L2Nwb1VpbnJFeGFmQkhMNU52NWlESFE9PS8xMDk5NTExNjYzNjEyMTg0NjYuanBnIn0=", "name": "aHUOz-Bi哩Bi哩汪", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiTmFKaU0iLCAibmFtZSI6ICLpm6jmt4vmub/kuoblpKnnqboiLCAiYWxidW1OYW1lIjogIumbqOa3i+a5v+S6huWkqeepuiIsICJhbGJ1bUlkIjogIjEyOTI1NTcxNSIsICJzb25nbWlkIjogInd5XzE4NTQ1NzQwMzkiLCAiY29weXJpZ2h0SWQiOiAiIiwgInNvdXJjZSI6ICJ3eSIsICJpbnRlcnZhbCI6ICIwMDoxNiIsICJpbWciOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L1ZFb2dXdnpWd3ItUm5lVU9wQ0F1bFE9PS8xMDk5NTExNjYxMDEwNjIzNzUuanBnIiwgImxyYyI6IG51bGwsICJscmNVcmwiOiAiIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMjYyLjkyIEtCIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNjU3LjIzIEtCIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMS45MiBNQiJ9XSwgIl90eXBlcyI6IHsiZmxhYyI6IHsic2l6ZSI6ICIxLjkyIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjY1Ny4yMyBLQiJ9LCAiMTI4ayI6IHsic2l6ZSI6ICIyNjIuOTIgS0IifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTg1NDU3NDAzOSIsICJ0aXRsZSI6ICLpm6jmt4vmub/kuoblpKnnqboiLCAiZHVyYXRpb24iOiAiMDA6MTYiLCAiYXJ0aXN0IjogIk5hSmlNIiwgImFsYnVtIjogIumbqOa3i+a5v+S6huWkqeepuiIsICJwbGF0Zm9ybSI6ICJ3eSIsICJhcnR3b3JrIjogImh0dHBzOi8vcDEubXVzaWMuMTI2Lm5ldC9WRW9nV3Z6VndyLVJuZVVPcENBdWxRPT0vMTA5OTUxMTY2MTAxMDYyMzc1LmpwZyJ9", "name": "雨淋湿了天空-NaJiM", "type": "music"}, {"url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6LWW6JWKIiwgIm5hbWUiOiAi546v5ri46YGN5LqG5pW05Liq5pif57O777yM5om+5LiN5Yiw5q+U5L2g5pu05Lqu55qE5pif5pif44CCIiwgImFsYnVtTmFtZSI6ICLmiJHniLHkvaAg5LiN55WZ6YGX5oa+IiwgImFsYnVtSWQiOiAiMTI4ODY4OTEzIiwgInNvbmdtaWQiOiAid3lfMTg1MjU5Mzc1OSIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAwOjE1IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvYzRqNWtBdWtEZGhuNkpDNlZLd1VUdz09LzEwOTk1MTE2NjA3OTk4NzAyNy5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIyMzkuNjcgS0IifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICI1OTkuMTEgS0IifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyLjIyIE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjIuMjIgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiNTk5LjExIEtCIn0sICIxMjhrIjogeyJzaXplIjogIjIzOS42NyBLQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICJ3eV8xODUyNTkzNzU5IiwgInRpdGxlIjogIueOr+a4uOmBjeS6huaVtOS4quaYn+ezu++8jOaJvuS4jeWIsOavlOS9oOabtOS6rueahOaYn+aYn+OAgiIsICJkdXJhdGlvbiI6ICIwMDoxNSIsICJhcnRpc3QiOiAi6LWW6JWKIiwgImFsYnVtIjogIuaIkeeIseS9oCDkuI3nlZnpgZfmhr4iLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvYzRqNWtBdWtEZGhuNkpDNlZLd1VUdz09LzEwOTk1MTE2NjA3OTk4NzAyNy5qcGcifQ==", "name": "环游遍了整个星系,找不到比你更亮的星星。-赖蕊", "type": "music"}]}, {"name": "_online_webPush", "musics": [{"name": "晴天-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2Njc0XHU1OTI5IiwgImFsYnVtTmFtZSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1JZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MjkiLCAic29uZ0lkIjogOTc3NzMsICJhbGJ1bU1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJzdHJNZWRpYU1pZCI6ICIwMDNRdWkxcTJ1MVpobyIsICJzb25nbWlkIjogIjAwMzlNblliMHF4WWhWIiwgImltZyI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDBNa01uaTE5Q2xLRy5qcGciLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjEyIE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTAuMjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI1Mi44MyBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICI0LjEyIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEwLjI5IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjUyLjgzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogIjAwMzlNblliMHF4WWhWIiwgInRpdGxlIjogIlx1NjY3NFx1NTkyOSIsICJkdXJhdGlvbiI6ICIwNDoyOSIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIlx1NTNmNlx1NjBlMFx1N2Y4ZSIsICJwbGF0Zm9ybSI6ICJ0eCIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI1MDB4NTAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJscmMiOiAiIiwgImxyY1VybCI6ICIifQ==", "type": "music"}, {"name": "那天下雨了-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5MGEzXHU1OTI5XHU0ZTBiXHU5NmU4XHU0ZTg2IiwgImFsYnVtTmFtZSI6ICJcdTU5MmFcdTk2MzNcdTRlNGJcdTViNTAiLCAiYWxidW1JZCI6ICIwMDQxV1ZmaDJ2dGxKRSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDMiLCAic29uZ0lkIjogNjQ5NTU2MzYyLCAiYWxidW1NaWQiOiAiMDA0MVdWZmgydnRsSkUiLCAic3RyTWVkaWFNaWQiOiAiMDA0NFNhRmgwYXB1UjIiLCAic29uZ21pZCI6ICIwMDQ0U2FGaDBhcHVSMiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy40MSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNTIgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI0Ni4yMiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjQxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNTIgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDYuMjIgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDA0NFNhRmgwYXB1UjIiLCAidGl0bGUiOiAiXHU5MGEzXHU1OTI5XHU0ZTBiXHU5NmU4XHU0ZTg2IiwgImR1cmF0aW9uIjogIjAzOjQzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1OTJhXHU5NjMzXHU0ZTRiXHU1YjUwIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "搁浅-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFsYnVtTmFtZSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAiYWxidW1JZCI6ICIwMDNERlJ6RDE5MktLRCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MDAiLCAic29uZ0lkIjogMTAyMDY1NzUwLCAiYWxidW1NaWQiOiAiMDAzREZSekQxOTJLS0QiLCAic3RyTWVkaWFNaWQiOiAiMDA0VWxLOXgwamV1b3ciLCAic29uZ21pZCI6ICIwMDFCYnl3cTJnaWNhZSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzREZSekQxOTJLS0QuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTYgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImR1cmF0aW9uIjogIjA0OjAwIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzREZSekQxOTJLS0QuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "枫-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2N2FiIiwgImFsYnVtTmFtZSI6ICJcdTUzNDFcdTRlMDBcdTY3MDhcdTc2ODRcdTg0MjdcdTkwYTYiLCAiYWxidW1JZCI6ICIwMDI0YmppTDJhb2N4VCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MzUiLCAic29uZ0lkIjogNzE4NDc5LCAiYWxidW1NaWQiOiAiMDAyNGJqaUwyYW9jeFQiLCAic3RyTWVkaWFNaWQiOiAiMDA0NE02VW4wUlhwaDIiLCAic29uZ21pZCI6ICIwMDNLdFloZzRmck5YQyIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyNGJqaUwyYW9jeFQuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4yMSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjUyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjkuMTggTUIifV0sICJfdHlwZXMiOiB7IjEyOGsiOiB7InNpemUiOiAiNC4yMSBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC41MiBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIyOS4xOCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDNLdFloZzRmck5YQyIsICJ0aXRsZSI6ICJcdTY3YWIiLCAiZHVyYXRpb24iOiAiMDQ6MzUiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTUzNDFcdTRlMDBcdTY3MDhcdTc2ODRcdTg0MjdcdTkwYTYiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "稻香-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3YTNiXHU5OTk5IiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDMiLCAic29uZ0lkIjogNDQ5MjA1LCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAyMHdKRG8zY3gwajMiLCAic29uZ21pZCI6ICIwMDNhQVlybTNHRTBBYyIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy40MSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC44MSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjQxIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuODEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImR1cmF0aW9uIjogIjAzOjQzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "花海-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU4MmIxXHU2ZDc3IiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MjQiLCAic29uZ0lkIjogNDQ5MTk4LCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAzb2tXdm8xcVp1OWMiLCAic29uZ21pZCI6ICIwMDNjSTUybzRkYUpKTCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC4wNCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjEwLjEwIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMjguMzAgTUIifV0sICJfdHlwZXMiOiB7IjEyOGsiOiB7InNpemUiOiAiNC4wNCBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMC4xMCBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIyOC4zMCBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDNjSTUybzRkYUpKTCIsICJ0aXRsZSI6ICJcdTgyYjFcdTZkNzciLCAiZHVyYXRpb24iOiAiMDQ6MjQiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "青花瓷-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "退后-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5MDAwXHU1NDBlIiwgImFsYnVtTmFtZSI6ICJcdTRmOWRcdTcxMzZcdTgzMDNcdTcyNzlcdTg5N2YiLCAiYWxidW1JZCI6ICIwMDJqTEdXZTE2VGYxSCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MjEiLCAic29uZ0lkIjogMTAyMDY2NDQ5LCAiYWxidW1NaWQiOiAiMDAyakxHV2UxNlRmMUgiLCAic3RyTWVkaWFNaWQiOiAiMDAzbVd3NDMwVWdZa2UiLCAic29uZ21pZCI6ICIwMDFMMWxxbTRVQWR5byIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyakxHV2UxNlRmMUguanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy45OSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuOTggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyOC42MyBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjk5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuOTggTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjguNjMgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImR1cmF0aW9uIjogIjA0OjIxIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyakxHV2UxNlRmMUguanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "七里香-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtTmFtZSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAiYWxidW1JZCI6ICIwMDNERlJ6RDE5MktLRCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6NTkiLCAic29uZ0lkIjogMTAyMDY1NzU2LCAiYWxidW1NaWQiOiAiMDAzREZSekQxOTJLS0QiLCAic3RyTWVkaWFNaWQiOiAiMDAxMkV6MGExdEZjT0kiLCAic29uZ21pZCI6ICIwMDRaOElocjBKSXU1cyIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzREZSekQxOTJLS0QuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjQyIE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiMzQuMTkgTUIifV0sICJfdHlwZXMiOiB7IjEyOGsiOiB7InNpemUiOiAiNC41NyBNQiJ9LCAiMzIwayI6IHsic2l6ZSI6ICIxMS40MiBNQiJ9LCAiZmxhYyI6IHsic2l6ZSI6ICIzNC4xOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDRaOElocjBKSXU1cyIsICJ0aXRsZSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAiZHVyYXRpb24iOiAiMDQ6NTkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTRlMDNcdTkxY2NcdTk5OTkiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "夜曲-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU1OTFjXHU2NmYyIiwgImFsYnVtTmFtZSI6ICJcdTUzNDFcdTRlMDBcdTY3MDhcdTc2ODRcdTg0MjdcdTkwYTYiLCAiYWxidW1JZCI6ICIwMDI0YmppTDJhb2N4VCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDYiLCAic29uZ0lkIjogNzE4NDc3LCAiYWxidW1NaWQiOiAiMDAyNGJqaUwyYW9jeFQiLCAic3RyTWVkaWFNaWQiOiAiMDAyNGpyc28yOHA4VkEiLCAic29uZ21pZCI6ICIwMDF6TVFyNzFGMVFvOCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyNGJqaUwyYW9jeFQuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy40NiBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNjYgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNS40NSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjQ2IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNjYgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjUuNDUgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImR1cmF0aW9uIjogIjAzOjQ2IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyNGJqaUwyYW9jeFQuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "我落泪情绪零碎-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2MjExXHU4NDNkXHU2Y2VhXHU2MGM1XHU3ZWVhXHU5NmY2XHU3ODhlIiwgImFsYnVtTmFtZSI6ICJcdThkZThcdTY1ZjZcdTRlZTMiLCAiYWxidW1JZCI6ICIwMDBidmlCbDRGalRwTyIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MTciLCAic29uZ0lkIjogNjgwMjg0LCAiYWxidW1NaWQiOiAiMDAwYnZpQmw0RmpUcE8iLCAic3RyTWVkaWFNaWQiOiAiMDAxWmVvMVA0YTVqMHYiLCAic29uZ21pZCI6ICIwMDIyYjdPWDJTVFU4NiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAwYnZpQmw0RmpUcE8uanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy45NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuODQgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNy41MCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjk0IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuODQgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjcuNTAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAyMmI3T1gyU1RVODYiLCAidGl0bGUiOiAiXHU2MjExXHU4NDNkXHU2Y2VhXHU2MGM1XHU3ZWVhXHU5NmY2XHU3ODhlIiwgImR1cmF0aW9uIjogIjA0OjE3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU4ZGU4XHU2NWY2XHU0ZWUzIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAwYnZpQmw0RmpUcE8uanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "红尘客栈-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3ZWEyXHU1YzE4XHU1YmEyXHU2ODA4IiwgImFsYnVtTmFtZSI6ICJcdTUzNDFcdTRlOGNcdTY1YjBcdTRmNWMiLCAiYWxidW1JZCI6ICIwMDNPdzg1RTNwbm9xaSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MzQiLCAic29uZ0lkIjogNTE3NzY4MCwgImFsYnVtTWlkIjogIjAwM093ODVFM3Bub3FpIiwgInN0ck1lZGlhTWlkIjogIjAwMGQ1VlhhMW1GSzRHIiwgInNvbmdtaWQiOiAiMDAzeHY0dzMxM3RaSFYiLCAiaW1nIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI1MDB4NTAwTTAwMDAwM093ODVFM3Bub3FpLmpwZyIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuMTggTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMC40NiBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjI3LjIwIE1CIn1dLCAiX3R5cGVzIjogeyIxMjhrIjogeyJzaXplIjogIjQuMTggTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTAuNDYgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjcuMjAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzeHY0dzMxM3RaSFYiLCAidGl0bGUiOiAiXHU3ZWEyXHU1YzE4XHU1YmEyXHU2ODA4IiwgImR1cmF0aW9uIjogIjA0OjM0IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1MzQxXHU0ZThjXHU2NWIwXHU0ZjVjIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAzT3c4NUUzcG5vcWkuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "蒲公英的约定-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU4NGIyXHU1MTZjXHU4MmYxXHU3Njg0XHU3ZWE2XHU1YjlhIiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MDciLCAic29uZ0lkIjogMTAyMzQwOTY1LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNDBvNnEzSnZmenIiLCAic29uZ21pZCI6ICIwMDRZaTVCRDNrc29BTiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy43NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNDMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNS41NCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjc3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNDMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjUuNTQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDA0WWk1QkQza3NvQU4iLCAidGl0bGUiOiAiXHU4NGIyXHU1MTZjXHU4MmYxXHU3Njg0XHU3ZWE2XHU1YjlhIiwgImR1cmF0aW9uIjogIjA0OjA3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "手写的从前-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU2MjRiXHU1MTk5XHU3Njg0XHU0ZWNlXHU1MjRkIiwgImFsYnVtTmFtZSI6ICJcdTU0Y2VcdTU0NjZcdWZmMGNcdTRlMGRcdTk1MTlcdTU0ZTYiLCAiYWxidW1JZCI6ICIwMDF1cWVqczNkNkVJRCIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6NTciLCAic29uZ0lkIjogMTAxNzg3ODcwLCAiYWxidW1NaWQiOiAiMDAxdXFlanMzZDZFSUQiLCAic3RyTWVkaWFNaWQiOiAiMDAzTzdFMVAxNDZXSUYiLCAic29uZ21pZCI6ICIwMDJ1OFpPTTRDN1FGNCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAxdXFlanMzZDZFSUQuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiNC41NCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjExLjM1IE1CIn0sIHsidHlwZSI6ICJmbGFjIiwgInNpemUiOiAiNTkuMTcgTUIifSwgeyJ0eXBlIjogImZsYWMyNGJpdCIsICJzaXplIjogIjk4LjM5IE1CIn1dLCAiX3R5cGVzIjogeyIxMjhrIjogeyJzaXplIjogIjQuNTQgTUIifSwgIjMyMGsiOiB7InNpemUiOiAiMTEuMzUgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNTkuMTcgTUIifSwgImZsYWMyNGJpdCI6IHsic2l6ZSI6ICI5OC4zOSBNQiJ9fSwgInR5cGVVcmwiOiB7fX0sICJpZCI6ICIwMDJ1OFpPTTRDN1FGNCIsICJ0aXRsZSI6ICJcdTYyNGJcdTUxOTlcdTc2ODRcdTRlY2VcdTUyNGQiLCAiZHVyYXRpb24iOiAiMDQ6NTciLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhbGJ1bSI6ICJcdTU0Y2VcdTU0NjZcdWZmMGNcdTRlMGRcdTk1MTlcdTU0ZTYiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDF1cWVqczNkNkVJRC5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "爱琴海-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3MjMxXHU3NDM0XHU2ZDc3IiwgImFsYnVtTmFtZSI6ICJcdTU5MmFcdTk2MzNcdTRlNGJcdTViNTAiLCAiYWxidW1JZCI6ICIwMDQxV1ZmaDJ2dGxKRSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6MzQiLCAic29uZ0lkIjogNjQ5NTU2MzY2LCAiYWxidW1NaWQiOiAiMDA0MVdWZmgydnRsSkUiLCAic3RyTWVkaWFNaWQiOiAiMDAzV1Byakw0ZGltRkUiLCAic29uZ21pZCI6ICIwMDNXUHJqTDRkaW1GRSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy4yNyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguMTggTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI0NS42NCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjI3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguMTggTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDUuNjQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzV1Byakw0ZGltRkUiLCAidGl0bGUiOiAiXHU3MjMxXHU3NDM0XHU2ZDc3IiwgImR1cmF0aW9uIjogIjAzOjM0IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1OTJhXHU5NjMzXHU0ZTRiXHU1YjUwIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "兰亭序-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU1MTcwXHU0ZWFkXHU1ZThmIiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MTMiLCAic29uZ0lkIjogNDQ5MjAxLCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAzVkxzaWswenRiSWIiLCAic29uZ21pZCI6ICIwMDEyOE4zcjJTWUtNRiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy44OCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNjkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNy4wMCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjg4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNjkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjcuMDAgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAxMjhOM3IyU1lLTUYiLCAidGl0bGUiOiAiXHU1MTcwXHU0ZWFkXHU1ZThmIiwgImR1cmF0aW9uIjogIjA0OjEzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "西西里-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU4OTdmXHU4OTdmXHU5MWNjIiwgImFsYnVtTmFtZSI6ICJcdTU5MmFcdTk2MzNcdTRlNGJcdTViNTAiLCAiYWxidW1JZCI6ICIwMDQxV1ZmaDJ2dGxKRSIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NDkiLCAic29uZ0lkIjogNjQ5NTU2MzczLCAiYWxidW1NaWQiOiAiMDA0MVdWZmgydnRsSkUiLCAic3RyTWVkaWFNaWQiOiAiMDAzRmRKWkgxd2xqTVUiLCAic29uZ21pZCI6ICIwMDNGZEpaSDF3bGpNVSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy41MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguNzUgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI0Ni4zMSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjUwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguNzUgTUIifSwgImZsYWMiOiB7InNpemUiOiAiNDYuMzEgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAzRmRKWkgxd2xqTVUiLCAidGl0bGUiOiAiXHU4OTdmXHU4OTdmXHU5MWNjIiwgImR1cmF0aW9uIjogIjAzOjQ5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU1OTJhXHU5NjMzXHU0ZTRiXHU1YjUwIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0MVdWZmgydnRsSkUuanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "给我一首歌的时间-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU3ZWQ5XHU2MjExXHU0ZTAwXHU5OTk2XHU2YjRjXHU3Njg0XHU2NWY2XHU5NWY0IiwgImFsYnVtTmFtZSI6ICJcdTliNTRcdTY3NzBcdTVlYTciLCAiYWxidW1JZCI6ICIwMDJOZWg4bDB1Y2lRWiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDQ6MTMiLCAic29uZ0lkIjogMTAxMDkxNDg0LCAiYWxidW1NaWQiOiAiMDAyTmVoOGwwdWNpUVoiLCAic3RyTWVkaWFNaWQiOiAiMDAwdVNKZHYxbkc2dzIiLCAic29uZ21pZCI6ICIwMDRCaFFrZTRhZEhjZiIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy44NyBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuNjcgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzMC4wOCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjg3IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuNjcgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMzAuMDggTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDA0QmhRa2U0YWRIY2YiLCAidGl0bGUiOiAiXHU3ZWQ5XHU2MjExXHU0ZTAwXHU5OTk2XHU2YjRjXHU3Njg0XHU2NWY2XHU5NWY0IiwgImR1cmF0aW9uIjogIjA0OjEzIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyTmVoOGwwdWNpUVouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}, {"name": "一路向北-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU0ZTAwXHU4ZGVmXHU1NDExXHU1MzE3IiwgImFsYnVtTmFtZSI6ICJKIElJSSBNUDMgUGxheWVyIiwgImFsYnVtSWQiOiAiMDAyTUFlb2IzekxYd1oiLCAic291cmNlIjogInR4IiwgImludGVydmFsIjogIjA0OjU0IiwgInNvbmdJZCI6IDUxMDU5ODYsICJhbGJ1bU1pZCI6ICIwMDJNQWVvYjN6TFh3WiIsICJzdHJNZWRpYU1pZCI6ICIwMDNqVDRTVTIyY2xFNSIsICJzb25nbWlkIjogIjAwMXhkMEhJMFg5R05xIiwgImltZyI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDJNQWVvYjN6TFh3Wi5qcGciLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0LjQ5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTEuMjMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICI1OC43OSBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICI0LjQ5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjExLjIzIE1CIn0sICJmbGFjIjogeyJzaXplIjogIjU4Ljc5IE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogIjAwMXhkMEhJMFg5R05xIiwgInRpdGxlIjogIlx1NGUwMFx1OGRlZlx1NTQxMVx1NTMxNyIsICJkdXJhdGlvbiI6ICIwNDo1NCIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIkogSUlJIE1QMyBQbGF5ZXIiLCAicGxhdGZvcm0iOiAidHgiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDJNQWVvYjN6TFh3Wi5qcGciLCAibHJjIjogIiIsICJscmNVcmwiOiAiIn0=", "type": "music"}, {"name": "半岛铁盒-周杰伦", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU1MzRhXHU1YzliXHU5NGMxXHU3NmQyIiwgImFsYnVtTmFtZSI6ICJcdTUxNmJcdTVlYTZcdTdhN2FcdTk1ZjQiLCAiYWxidW1JZCI6ICIwMDRNR2l0TjB6RUhwYiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAic29uZ0lkIjogOTc3NjEsICJhbGJ1bU1pZCI6ICIwMDRNR2l0TjB6RUhwYiIsICJzdHJNZWRpYU1pZCI6ICIwMDE5R1hUejFPTTZXdSIsICJzb25nbWlkIjogIjAwMk9LSW94MjhhZDlhIiwgImltZyI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSNTAweDUwME0wMDAwMDRNR2l0TjB6RUhwYi5qcGciLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICI0Ljg4IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiMTIuMTkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIzNC45MyBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICI0Ljg4IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE5IE1CIn0sICJmbGFjIjogeyJzaXplIjogIjM0LjkzIE1CIn19LCAidHlwZVVybCI6IHt9fSwgImlkIjogIjAwMk9LSW94MjhhZDlhIiwgInRpdGxlIjogIlx1NTM0YVx1NWM5Ylx1OTRjMVx1NzZkMiIsICJkdXJhdGlvbiI6ICIwNToxOSIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIlx1NTE2Ylx1NWVhNlx1N2E3YVx1OTVmNCIsICJwbGF0Zm9ybSI6ICJ0eCIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI1MDB4NTAwTTAwMDAwNE1HaXROMHpFSHBiLmpwZyIsICJscmMiOiAiIiwgImxyY1VybCI6ICIifQ==", "type": "music"}]}, {"name": "_online_play", "musics": [{"name": "走马-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU5NjQ4XHU3YzkyIiwgIm5hbWUiOiAiXHU4ZDcwXHU5YTZjIiwgImFsYnVtTmFtZSI6ICJcdTU5ODJcdTRlNWYiLCAiYWxidW1JZCI6ICIwMDRHQXJVZTI2UFh2WiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTUiLCAic29uZ0lkIjogMTAyMDY4MjE1LCAiYWxidW1NaWQiOiAiMDA0R0FyVWUyNlBYdloiLCAic3RyTWVkaWFNaWQiOiAiMDAyejBadEszTkJLSXMiLCAic29uZ21pZCI6ICIwMDJ0bDVKWjJGRVJ4TCIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0R0FyVWUyNlBYdlouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42MCBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjguOTkgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyMS44NCBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjYwIE1CIn0sICIzMjBrIjogeyJzaXplIjogIjguOTkgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjEuODQgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAydGw1SloyRkVSeEwiLCAidGl0bGUiOiAiXHU4ZDcwXHU5YTZjIiwgImR1cmF0aW9uIjogIjAzOjU1IiwgImFydGlzdCI6ICJcdTk2NDhcdTdjOTIiLCAiYWxidW0iOiAiXHU1OTgyXHU0ZTVmIiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDA0R0FyVWUyNlBYdlouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9", "type": "music"}]}, {"name": "_online_佚名", "musics": [{"name": "陈粒 - 走马 .flac-stopintime-D", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDEzMzczMDgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9kZWZhdWx0LXNvbmctaW1hZ2Uud2VicCIsICJkdXJhdGlvbiI6IDIzNiwgInRpdGxlIjogIlx1OTY0OFx1N2M5MiAtIFx1OGQ3MFx1OWE2YyAuZmxhYyIsICJhcnRpc3QiOiAic3RvcGludGltZS1EIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJjaGVuLWxpLXpvdS1tYS1mbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9", "type": "music"}, {"name": "自然环境-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTM0MTQwLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY3MDg3LTMud2VicCIsICJkdXJhdGlvbiI6IDI0NSwgInRpdGxlIjogIlx1ODFlYVx1NzEzNlx1NzNhZlx1NTg4MyIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1OGQzNFx1OGZkMVx1NTkyN1x1NTczMCIsICJ1cmxfc2x1ZyI6ICJ6aS1yYW4taHVhbi1qaW5nIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9", "type": "music"}, {"name": "空空-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTM0MTM1LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY3MDg3LTMud2VicCIsICJkdXJhdGlvbiI6IDIyNSwgInRpdGxlIjogIlx1N2E3YVx1N2E3YSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1OGQzNFx1OGZkMVx1NTkyN1x1NTczMCIsICJ1cmxfc2x1ZyI6ICJrb25nLWtvbmciLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=", "type": "music"}, {"name": "种种-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTQ1LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDE5MSwgInRpdGxlIjogIlx1NzljZFx1NzljZCIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJ6aG9uZy16aG9uZyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "抱歉抱歉-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTM0MTI4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY3MDg3LTMud2VicCIsICJkdXJhdGlvbiI6IDIzMSwgInRpdGxlIjogIlx1NjJiMVx1NmI0OVx1NjJiMVx1NmI0OSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1OGQzNFx1OGZkMVx1NTkyN1x1NTczMCIsICJ1cmxfc2x1ZyI6ICJiYW8tcWlhbi1iYW8tcWlhbiIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "性空山-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTcxLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDIzMiwgInRpdGxlIjogIlx1NjAyN1x1N2E3YVx1NWM3MSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJ4aW5nLWtvbmctc2hhbiIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "如也-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDIyMCwgInRpdGxlIjogIlx1NTk4Mlx1NGU1ZiIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJydS15ZSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "历历万乡-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDI4NSwgInRpdGxlIjogIlx1NTM4Nlx1NTM4Nlx1NGUwN1x1NGU2MSIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJsaS1saS13YW4teGlhbmciLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=", "type": "music"}, {"name": "庆祝-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNjM2LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDIyOSwgInRpdGxlIjogIlx1NWU4Nlx1Nzk1ZCIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJxaW5nLXpodSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==", "type": "music"}, {"name": "五言-陈粒", "url": "self:///api/proxy/plugin-url?data=eyJpZCI6IDc1MTMxNTgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9jaGVuLWxpLTEwLzE5MzY1OTMxLTMud2VicCIsICJkdXJhdGlvbiI6IDMyNiwgInRpdGxlIjogIlx1NGU5NFx1OGEwMCIsICJhcnRpc3QiOiAiXHU5NjQ4XHU3YzkyIiwgImFsYnVtIjogIlx1NTM0MVx1NWU3NFx1ODFlYVx1OTAwOSIsICJ1cmxfc2x1ZyI6ICJ3dS15YW4iLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=", "type": "music"}]}]', custom_play_list_json='', disable_download=False, key_word_dict={'下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_play_type_rnd', '单曲播放': 'set_play_type_sin', '顺序播放': 'set_play_type_seq', '分钟后关机': 'stop_after_minute', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '删除歌曲': 'cmd_del_music', '播放本地歌曲': 'playlocal', '本地播放歌曲': 'playlocal', '播放歌曲': 'play', '放歌曲': 'play', '在线播放': 'online_play', '播放歌手': 'singer_play', '关机': 'stop', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '播放列表': 'play_music_list', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '单曲播放', '顺序播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '删除歌曲', '播放本地歌曲', '本地播放歌曲', '播放歌曲', '放歌曲', '在线播放', '播放歌手', '暂停', '停止', '停止播放', '播放歌单', '测试自定义口令', '测试链接'], use_music_api=True, use_music_audio_id='1582971365183456177', use_music_id='355454500', log_file='xiaomusic.log.txt', fuzzy_match_cutoff=0.6, enable_fuzzy_match=True, stop_tts_msg='收到,再见', enable_config_example=False, keywords_playlocal='播放本地歌曲,本地播放歌曲', keywords_play='播放歌曲,放歌曲', keywords_online_play='在线播放', keywords_singer_play='播放歌手', keywords_stop='关机,暂停,停止,停止播放', keywords_playlist='播放列表,播放歌单', user_key_word_dict={'测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, enable_force_stop=False, devices={'419359157': Device(did='419359157', device_id='3e792e41-53c6-439f-95da-2fd68f4e61da', hardware='LX05', name='小爱音箱Play', play_type=1, cur_music='枫-周杰伦', cur_playlist='_online_webPush', playlist2music={'全部': '东风破-香香', '_online_webPush': '枫-周杰伦', '_online_lx_周杰伦-Jay 『网易云精选』': '安静 (Live)-李圣杰', '_online_play': '走马-陈粒', '_online_佚名': '陈粒 - 走马 .flac-stopintime-D'})}, group_list='', remove_id3tag=False, convert_to_mp3=False, delay_sec=0, continue_play=False, enable_file_watch=False, file_watch_debounce=10, pull_ask_sec=1, enable_pull_ask=True, auto_convert=False, crontab_json='', enable_yt_dlp_cookies=False, enable_save_tag=False, enable_analytics=True, get_ask_by_mina=False, play_type_one_tts_msg='已经设置为单曲循环', play_type_all_tts_msg='已经设置为全部循环', play_type_rnd_tts_msg='已经设置为随机播放', play_type_sin_tts_msg='已经设置为单曲播放', play_type_seq_tts_msg='已经设置为顺序播放', recently_added_playlist_len=50, enable_cmd_del_music=False, web_music_proxy=True, edge_tts_voice='zh-CN-XiaoyiNeural', enable_auto_clean_temp=True, qrcode_timeout=120) [2026-04-18 01:57:23] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:23] [0.5.1] [INFO] dependencies.py:257: disable_httpauth:True [2026-04-18 01:57:23] [0.5.1] [INFO] Started server process [1] [2026-04-18 01:57:23] [0.5.1] [INFO] Waiting for application startup. [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:57:23] [0.5.1] [INFO] xiaomusic.py:243: run_forever start [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:57:23] [0.5.1] [INFO] Application startup complete. [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:57:23] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:57:23] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 01:57:23] [0.5.1] [INFO] auth.py:65: try login [2026-04-18 01:57:23] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 01:57:23] [0.5.1] [INFO] Uvicorn running on http://['0.0.0.0', '::']:8090 (Press CTRL+C to quit) [2026-04-18 01:57:24] [0.5.1] [INFO] 172.17.0.1:49170 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:57:24] [0.5.1] [INFO] auth.py:126: 登录完成. 15951086235 [2026-04-18 01:57:24] [0.5.1] [INFO] auth.py:161: 选中的设备: {'419359157': Device(did='419359157', device_id='3e792e41-53c6-439f-95da-2fd68f4e61da', hardware='LX05', name='小爱音箱Play', play_type=1, cur_music='枫-周杰伦', cur_playlist='_online_webPush', playlist2music={'全部': '东风破-香香', '_online_webPush': '枫-周杰伦', '_online_lx_周杰伦-Jay 『网易云精选』': '安静 (Live)-李圣杰', '_online_play': '走马-陈粒', '_online_佚名': '陈粒 - 走马 .flac-stopintime-D'})} [2026-04-18 01:57:24] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:57:24] [0.5.1] [INFO] device_manager.py:63: 设备列表已更新: device_id_did={'3e792e41-53c6-439f-95da-2fd68f4e61da': '419359157'} [2026-04-18 01:57:24] [0.5.1] [INFO] device_manager.py:64: 设备分组已更新: groups={'小爱音箱Play': ['3e792e41-53c6-439f-95da-2fd68f4e61da']} [2026-04-18 01:57:24] [0.5.1] [INFO] auth.py:209: get_cookie user_data loaded [2026-04-18 01:57:24] [0.5.1] [INFO] 172.17.0.1:49186 - "GET /static/default/index.html HTTP/1.0" 304 [2026-04-18 01:57:25] [0.5.1] [INFO] 172.17.0.1:49192 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:57:25] [0.5.1] [INFO] 172.17.0.1:49196 - "GET /getversion HTTP/1.0" 200 [2026-04-18 01:57:25] [0.5.1] [INFO] 172.17.0.1:49224 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:57:25] [0.5.1] [INFO] 172.17.0.1:49210 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 01:57:25] [0.5.1] [INFO] 172.17.0.1:49240 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:57:25] [0.5.1] [INFO] 172.17.0.1:49242 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:57:26] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 15, "loop_type": 1 }'}} [2026-04-18 01:57:26] [0.5.1] [INFO] device_player.py:834: get_volume. volume:15 [2026-04-18 01:57:26] [0.5.1] [INFO] 172.17.0.1:49212 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 01:57:26] [0.5.1] [INFO] 172.17.0.1:43232 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:57:28] [0.5.1] [INFO] 172.17.0.1:43248 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDg5NDUuMzA3MjIyNCwiaWF0IjoxNzc2NDQ4NjQ1LjMwNzIyMzh9.91ZbtkcWau3mn0qmFubS3KhQQuULMFes5E5fKkkqJVw HTTP/1.0" 404 [2026-04-18 01:57:28] [0.5.1] [INFO] 172.17.0.1:43256 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:57:28] [0.5.1] [INFO] 172.17.0.1:43250 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 01:57:30] [0.5.1] [INFO] 172.17.0.1:43270 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:57:32] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:57:32] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:57:32] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:57:32] [0.5.1] [INFO] 172.17.0.1:43286 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:57:33] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:57:33] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:57:33] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:57:33] [0.5.1] [INFO] 172.17.0.1:43302 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:57:34] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:57:34] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:57:34] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:57:34] [0.5.1] [INFO] 172.17.0.1:43316 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:57:34] [0.5.1] [INFO] 172.17.0.1:43326 - "GET /api/password/check HTTP/1.0" 200 [2026-04-18 01:57:34] [0.5.1] [INFO] 172.17.0.1:43334 - "GET /api/back-conf/load HTTP/1.0" 200 [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:35] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448655036"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:35] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:35] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:35] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448655036: False [2026-04-18 01:57:35] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:35] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:57:35] [0.5.1] [INFO] 172.17.0.1:43344 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 01:57:35] [0.5.1] [INFO] 172.17.0.1:43352 - "GET /api/plugin-source/load HTTP/1.0" 200 [2026-04-18 01:57:36] [0.5.1] [INFO] 172.17.0.1:34522 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:2327: Plugin config updated for enabled plugin Audiomack [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:37] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776448657512"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:37] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448657512: True [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:37] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:37] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448657815"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:37] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:37] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:37] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448657815: False [2026-04-18 01:57:38] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776448657.814094, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:57:38] [0.5.1] [INFO] 172.17.0.1:34532 - "PUT /api/js-plugins/Audiomack/enable HTTP/1.0" 200 [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:38] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776448658210"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:38] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448658210: True [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:38] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448658513"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:38] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:38] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:38] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448658513: False [2026-04-18 01:57:38] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:38] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776448658.5120764, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:57:38] [0.5.1] [INFO] 172.17.0.1:34538 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 01:57:41] [0.5.1] [INFO] 172.17.0.1:34544 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:57:41] [0.5.1] [INFO] 172.17.0.1:34548 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 01:57:43] [0.5.1] [INFO] 172.17.0.1:34550 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:57:45] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:57:45] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:57:45] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 01:57:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 01:57:45] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 10} [2026-04-18 01:57:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 10}, "id": "msg_1776448665906"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:46] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448665906: True [2026-04-18 01:57:46] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 01:57:46] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:57:46] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 01:57:46] [0.5.1] [INFO] 172.17.0.1:34556 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:57:49] [0.5.1] [INFO] 172.17.0.1:50596 - "GET /api/password/check HTTP/1.0" 200 [2026-04-18 01:57:49] [0.5.1] [INFO] 172.17.0.1:50612 - "GET /api/back-conf/load HTTP/1.0" 200 [2026-04-18 01:57:49] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:57:49] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:49] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:49] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 01:57:49] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:49] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776448669979"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:50] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:50] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448669979: True [2026-04-18 01:57:50] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 01:57:50] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:50] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:50] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448670282"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:50] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:50] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:50] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:50] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448670282: False [2026-04-18 01:57:50] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:50] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776448670.2809076, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:57:50] [0.5.1] [INFO] 172.17.0.1:50622 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 01:57:50] [0.5.1] [INFO] 172.17.0.1:50626 - "GET /api/plugin-source/load HTTP/1.0" 200 [2026-04-18 01:57:51] [0.5.1] [INFO] 172.17.0.1:50628 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:2382: Plugin config updated for enabled plugin Audiomack [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448672483"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:52] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:52] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448672483: False [2026-04-18 01:57:52] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:57:52] [0.5.1] [INFO] 172.17.0.1:50640 - "PUT /api/js-plugins/Audiomack/disable HTTP/1.0" 200 [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:57:52] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:57:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448672876"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:52] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:57:52] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:53] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448672876: False [2026-04-18 01:57:53] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:57:53] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:57:53] [0.5.1] [INFO] 172.17.0.1:50648 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 01:57:54] [0.5.1] [INFO] 172.17.0.1:50670 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:57:54] [0.5.1] [INFO] 172.17.0.1:50660 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 01:57:56] [0.5.1] [INFO] 172.17.0.1:43990 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:58:07] [0.5.1] [INFO] command_handler.py:51: 收到消息:播放歌手周杰伦 控制面板:False did:419359157 [2026-04-18 01:58:07] [0.5.1] [INFO] command_handler.py:137: 匹配到指令. opkey:播放歌手 opvalue:singer_play oparg:周杰伦 [2026-04-18 01:58:07] [0.5.1] [INFO] xiaomusic.py:298: 手动推送链接:http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 01:58:08] [0.5.1] [ERROR] device_player.py:761: _get_audio_id Error https://api2.mina.mi.com/music/search: {'code': 999, 'message': 'Unknown error', 'data': None} [2026-04-18 01:58:09] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/static/silence.mp3 audio_id:1582971365183456177 [2026-04-18 01:58:09] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/static/silence.mp3 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 01:58:09] [0.5.1] [INFO] online_music.py:410: 已重置追加歌曲页码 [2026-04-18 01:58:09] [0.5.1] [INFO] online_music.py:510: 搜索关键字周杰伦,搜索歌手名周杰伦 [2026-04-18 01:58:09] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:58:09] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:58:09] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:58:09] [0.5.1] [INFO] online_music.py:371: 在线搜索歌手的歌曲列表: {'success': True, 'data': [], 'total': 0, 'sources': {}, 'page': 1, 'limit': 10, 'artist': '佚名'} [2026-04-18 01:58:12] [0.5.1] [INFO] 172.17.0.1:51104 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:58:12] [0.5.1] [INFO] 172.17.0.1:51102 - "GET /getversion HTTP/1.0" 200 [2026-04-18 01:58:12] [0.5.1] [INFO] 172.17.0.1:51108 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 01:58:12] [0.5.1] [INFO] 172.17.0.1:51116 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:13] [0.5.1] [INFO] 172.17.0.1:51128 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:13] [0.5.1] [INFO] 172.17.0.1:51122 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:13] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 15, "loop_type": 1 }'}} [2026-04-18 01:58:13] [0.5.1] [INFO] device_player.py:834: get_volume. volume:15 [2026-04-18 01:58:13] [0.5.1] [INFO] 172.17.0.1:51110 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:14] [0.5.1] [INFO] 172.17.0.1:51132 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:58:15] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:58:15] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:58:15] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 01:58:15] [0.5.1] [INFO] 172.17.0.1:51148 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 01:58:15] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:58:15] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:58:15] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:58:15] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:58:15] [0.5.1] [INFO] 172.17.0.1:51152 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 01:58:15] [0.5.1] [INFO] 172.17.0.1:51160 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:15] [0.5.1] [INFO] 172.17.0.1:51162 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:17] [0.5.1] [INFO] 172.17.0.1:57444 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDg5OTMuMDE4NTc3MywiaWF0IjoxNzc2NDQ4NjkzLjAxODU3ODN9.EaaDsAgxGKhy6jrhchb2XLNJQK9Zg0CEktinNulFdO4 HTTP/1.0" 404 [2026-04-18 01:58:20] [0.5.1] [INFO] 172.17.0.1:57460 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:22] [0.5.1] [INFO] 172.17.0.1:57472 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMDAuNTIwMDk3MywiaWF0IjoxNzc2NDQ4NzAwLjUyMDA5Nzd9.HKvXUkFEqJ8JM0KKnH7Jmqs2ZiZGjCkRKFKg4cgRXKs HTTP/1.0" 404 [2026-04-18 01:58:26] [0.5.1] [INFO] 172.17.0.1:57484 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:28] [0.5.1] [INFO] 172.17.0.1:36360 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMDYuMDkwNTMzNSwiaWF0IjoxNzc2NDQ4NzA2LjA5MDUzNH0.S0qxzAgZQltSqj71Z_g4YbnNlE1AsORx3pTmpmiHTQU HTTP/1.0" 404 [2026-04-18 01:58:31] [0.5.1] [INFO] 172.17.0.1:36366 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:34] [0.5.1] [INFO] 172.17.0.1:36378 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMTEuNjQwNDgzMSwiaWF0IjoxNzc2NDQ4NzExLjY0MDQ4MzZ9.9anE8oyQxSzCrVzveQXk4036cbnDPMCo1No6ExnqKTk HTTP/1.0" 404 [2026-04-18 01:58:37] [0.5.1] [INFO] 172.17.0.1:46078 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:42] [0.5.1] [INFO] 172.17.0.1:46086 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMTcuOTQ2MzI1MywiaWF0IjoxNzc2NDQ4NzE3Ljk0NjMyNTh9.rZs36R0fdZrBzDbwHo3FXhhDJZww-Jr-xo_5J6634L4 HTTP/1.0" 404 [2026-04-18 01:58:45] [0.5.1] [INFO] 172.17.0.1:46100 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:47] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:58:47] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:58:47] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 01:58:47] [0.5.1] [INFO] 172.17.0.1:43818 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 01:58:47] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:58:47] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:58:47] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:58:47] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:58:47] [0.5.1] [INFO] 172.17.0.1:43824 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 01:58:47] [0.5.1] [INFO] 172.17.0.1:43826 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:47] [0.5.1] [INFO] 172.17.0.1:43838 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:48] [0.5.1] [INFO] 172.17.0.1:43844 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMjUuMTAxNDU5NSwiaWF0IjoxNzc2NDQ4NzI1LjEwMTQ2fQ.MdhmhI9iKEgIgyzR1QJLg5f1uTIeGBpe_XQZBQb7Ce8 HTTP/1.0" 404 [2026-04-18 01:58:49] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:58:49] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:58:49] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 01:58:49] [0.5.1] [INFO] 172.17.0.1:43860 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 01:58:49] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:58:49] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:58:49] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:58:49] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:58:49] [0.5.1] [INFO] 172.17.0.1:43862 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 01:58:49] [0.5.1] [INFO] 172.17.0.1:43866 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:49] [0.5.1] [INFO] 172.17.0.1:43880 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:49] [0.5.1] [INFO] 172.17.0.1:43886 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:50] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:58:50] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:58:50] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 01:58:50] [0.5.1] [INFO] 172.17.0.1:43898 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 01:58:50] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:58:50] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:58:50] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:58:50] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:58:50] [0.5.1] [INFO] 172.17.0.1:43904 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 01:58:51] [0.5.1] [INFO] 172.17.0.1:43914 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:51] [0.5.1] [INFO] 172.17.0.1:43920 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:51] [0.5.1] [INFO] 172.17.0.1:43934 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMjkuOTAzMzgyLCJpYXQiOjE3NzY0NDg3MjkuOTAzMzgyOH0.CsNe8MpZmiubgquVHOzg1NrO8rhVF7OPEnJ9nu94PnE HTTP/1.0" 404 [2026-04-18 01:58:51] [0.5.1] [INFO] 172.17.0.1:43942 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:51] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:58:51] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:58:51] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 01:58:51] [0.5.1] [INFO] 172.17.0.1:43948 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 01:58:51] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:58:51] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:58:51] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:58:51] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:58:51] [0.5.1] [INFO] 172.17.0.1:43958 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 01:58:52] [0.5.1] [INFO] 172.17.0.1:43966 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:52] [0.5.1] [INFO] 172.17.0.1:43980 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:52] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:58:52] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:58:52] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 01:58:52] [0.5.1] [INFO] 172.17.0.1:43992 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 01:58:52] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:58:52] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:58:52] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:58:52] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:58:52] [0.5.1] [INFO] 172.17.0.1:44000 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 01:58:52] [0.5.1] [INFO] 172.17.0.1:44016 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:58:52] [0.5.1] [INFO] 172.17.0.1:44026 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMzEuNTcyNzk4NSwiaWF0IjoxNzc2NDQ4NzMxLjU3Mjc5OTR9.rSQMid9hXWPbpo7kDKaRghOu6vdtKw1M_N1zLpxThj8 HTTP/1.0" 404 [2026-04-18 01:58:53] [0.5.1] [INFO] 172.17.0.1:44042 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:54] [0.5.1] [INFO] 172.17.0.1:44046 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:58:56] [0.5.1] [INFO] 172.17.0.1:42092 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMzQuNDI0MDU5OSwiaWF0IjoxNzc2NDQ4NzM0LjQyNDA2MDN9.OVye8ec6XobNLGKRmY-YH1f0gwDhh_JBo9T_tRqHayM HTTP/1.0" 404 [2026-04-18 01:58:59] [0.5.1] [INFO] 172.17.0.1:42096 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:59:03] [0.5.1] [INFO] 172.17.0.1:42106 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwMzkuNTIwNzE3LCJpYXQiOjE3NzY0NDg3MzkuNTIwNzE3NH0.kS8nL-6s2Ukp6z7PCcn6BMynRVk88hToEH80cSkyJvQ HTTP/1.0" 404 [2026-04-18 01:59:04] [0.5.1] [INFO] 172.17.0.1:42120 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:59:04] [0.5.1] [INFO] 172.17.0.1:42128 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 01:59:06] [0.5.1] [INFO] 172.17.0.1:42132 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:59:07] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:07] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:07] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:07] [0.5.1] [INFO] 172.17.0.1:59042 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:10] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:10] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:10] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:10] [0.5.1] [INFO] 172.17.0.1:59044 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:11] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:11] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:11] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:11] [0.5.1] [INFO] 172.17.0.1:59048 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:11] [0.5.1] [INFO] 122.96.50.157:23102 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:12] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:12] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:12] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:12] [0.5.1] [INFO] 172.17.0.1:59060 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:14] [0.5.1] [INFO] 122.96.50.157:4235 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:14] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:14] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:14] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:14] [0.5.1] [INFO] 172.17.0.1:59074 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:15] [0.5.1] [INFO] 172.17.0.1:59088 - "GET /api/password/check HTTP/1.0" 200 [2026-04-18 01:59:15] [0.5.1] [INFO] 172.17.0.1:59094 - "GET /api/back-conf/load HTTP/1.0" 200 [2026-04-18 01:59:15] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:59:15] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:59:15] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:59:15] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:59:15] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:59:15] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448755744"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:15] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:15] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:15] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:16] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448755744: False [2026-04-18 01:59:16] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:16] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:59:16] [0.5.1] [INFO] 172.17.0.1:59104 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 01:59:16] [0.5.1] [INFO] 172.17.0.1:59116 - "GET /api/plugin-source/load HTTP/1.0" 200 [2026-04-18 01:59:16] [0.5.1] [INFO] 122.97.136.182:9545 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:17] [0.5.1] [INFO] 172.17.0.1:41040 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:2327: Plugin config updated for enabled plugin Audiomack [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:59:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776448757306"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448757306: True [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:59:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448757608"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:17] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:17] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448757608: False [2026-04-18 01:59:17] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776448757.607863, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:59:17] [0.5.1] [INFO] 172.17.0.1:41052 - "PUT /api/js-plugins/Audiomack/enable HTTP/1.0" 200 [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 01:59:17] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:59:18] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776448758003"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:18] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448758003: True [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 01:59:18] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776448758306"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:18] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:18] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:18] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:18] [0.5.1] [INFO] 122.97.136.182:61619 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448758306: False [2026-04-18 01:59:18] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 01:59:18] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776448758.3050454, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 01:59:18] [0.5.1] [INFO] 172.17.0.1:41062 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 01:59:20] [0.5.1] [INFO] 122.97.136.182:4786 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:21] [0.5.1] [INFO] 172.17.0.1:41078 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:59:21] [0.5.1] [INFO] 172.17.0.1:41064 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 01:59:22] [0.5.1] [INFO] 122.96.50.157:4244 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:22] [0.5.1] [INFO] 172.17.0.1:41080 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:59:24] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:24] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:24] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 01:59:24] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 01:59:24] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 10} [2026-04-18 01:59:24] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 10}, "id": "msg_1776448764092"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:24] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448764092: True [2026-04-18 01:59:24] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 01:59:24] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:24] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 01:59:24] [0.5.1] [INFO] 172.17.0.1:41086 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:24] [0.5.1] [INFO] 122.96.50.157:4940 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:26] [0.5.1] [INFO] 122.97.136.182:20661 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:28] [0.5.1] [INFO] 122.96.50.157:34030 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:30] [0.5.1] [INFO] 122.96.50.157:45280 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:32] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:32] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:32] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:32] [0.5.1] [INFO] 172.17.0.1:48142 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:32] [0.5.1] [INFO] 122.96.50.157:46175 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:34] [0.5.1] [INFO] 122.97.136.182:38165 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:35] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:35] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:35] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 01:59:35] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 01:59:35] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 20} [2026-04-18 01:59:35] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 20}, "id": "msg_1776448775596"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:35] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448775596: True [2026-04-18 01:59:35] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 01:59:35] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 01:59:35] [0.5.1] [INFO] 172.17.0.1:48156 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=Audiomack&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 01:59:36] [0.5.1] [INFO] 122.97.136.182:38167 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:38] [0.5.1] [INFO] 122.97.136.182:61631 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:40] [0.5.1] [INFO] 122.96.50.157:23005 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:42] [0.5.1] [INFO] 122.97.136.182:38171 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:44] [0.5.1] [INFO] 122.96.50.157:26783 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:44] [0.5.1] [INFO] 172.17.0.1:60082 - "GET / HTTP/1.0" 200 [2026-04-18 01:59:45] [0.5.1] [INFO] 172.17.0.1:60092 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 01:59:45] [0.5.1] [INFO] 172.17.0.1:60096 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 01:59:45] [0.5.1] [INFO] 172.17.0.1:60108 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 01:59:45] [0.5.1] [INFO] 172.17.0.1:60122 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 01:59:47] [0.5.1] [INFO] 172.17.0.1:57738 - "GET / HTTP/1.0" 200 [2026-04-18 01:59:48] [0.5.1] [INFO] 172.17.0.1:57740 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 01:59:48] [0.5.1] [INFO] 172.17.0.1:57752 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 01:59:48] [0.5.1] [INFO] 172.17.0.1:57756 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 01:59:49] [0.5.1] [INFO] 172.17.0.1:57772 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 01:59:50] [0.5.1] [INFO] 172.17.0.1:57786 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 01:59:50] [0.5.1] [INFO] command_handler.py:51: 收到消息:播放歌手周杰伦 控制面板:False did:419359157 [2026-04-18 01:59:50] [0.5.1] [INFO] command_handler.py:137: 匹配到指令. opkey:播放歌手 opvalue:singer_play oparg:周杰伦 [2026-04-18 01:59:50] [0.5.1] [INFO] xiaomusic.py:298: 手动推送链接:http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 01:59:51] [0.5.1] [ERROR] device_player.py:761: _get_audio_id Error https://api2.mina.mi.com/music/search: {'code': 999, 'message': 'Unknown error', 'data': None} [2026-04-18 01:59:51] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/static/silence.mp3 audio_id:1582971365183456177 [2026-04-18 01:59:51] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/static/silence.mp3 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 01:59:51] [0.5.1] [INFO] online_music.py:410: 已重置追加歌曲页码 [2026-04-18 01:59:51] [0.5.1] [INFO] online_music.py:510: 搜索关键字周杰伦,搜索歌手名周杰伦 [2026-04-18 01:59:51] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 01:59:51] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 01:59:51] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 01:59:51] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 01:59:51] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 5} [2026-04-18 01:59:51] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 5}, "id": "msg_1776448791856"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:52] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448791856: True [2026-04-18 01:59:52] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 01:59:52] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 01:59:52] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:371: 在线搜索歌手的歌曲列表: {'success': True, 'data': [{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}], 'total': 10, 'sources': {'Audiomack': 20}, 'page': 1, 'limit': 10, 'artist': '佚名'} [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:375: 歌曲列表: [{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}] [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:531: 推送歌单播放, 歌单名称: _online_佚名, 歌曲数量: 10, 设备ID: 419359157 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:410: 已重置追加歌曲页码 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:839: 歌单去重完成,原始数量: 10, 去重后数量: 10 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 01:59:52] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 01:59:52] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 01:59:52] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_webPush ['晴天-周杰伦', '那天下雨了-周杰伦'] ... ['一路向北-周杰伦', '半岛铁盒-周杰伦'] with len: 20 [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:630: 根据【_online_佚名】找到播放列表【_online_佚名】 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:868: 开始播放列表_online_佚名 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=An_N9PrxJQM [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 01:59:52] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 01:59:52] [0.5.1] [INFO] 122.97.136.182:36038 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 01:59:52] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 15, "loop_type": 1 }'}} [2026-04-18 01:59:53] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 01:59:53] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 01:59:53] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=An_N9PrxJQM [2026-04-18 01:59:54] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=An_N9PrxJQM audio_id:1582971365183456177 [2026-04-18 01:59:54] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=An_N9PrxJQM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 01:59:54] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 01:59:54] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 01:59:54] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:54] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=RLGcN8XIcRk [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:519: [proxy:9a03d92a] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:54] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:524: [proxy:9a03d92a] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:552: [proxy:9a03d92a] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:597: [proxy:9a03d92a] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 01:59:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 01:59:54] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 01:59:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776448794418"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:54] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448794418: True [2026-04-18 01:59:54] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:54] [0.5.1] [INFO] 34.21.156.125:54810 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:608: [proxy:9a03d92a] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:624: [proxy:9a03d92a] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:519: [proxy:68c58e1a] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:54] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:524: [proxy:68c58e1a] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:552: [proxy:68c58e1a] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 01:59:54] [0.5.1] [INFO] file.py:597: [proxy:68c58e1a] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 01:59:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 01:59:54] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 01:59:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776448794731"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:55] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448794731: True [2026-04-18 01:59:55] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:55] [0.5.1] [INFO] 34.21.156.125:54820 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 01:59:55] [0.5.1] [INFO] file.py:608: [proxy:68c58e1a] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:55] [0.5.1] [INFO] file.py:624: [proxy:68c58e1a] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57806 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57792 - "GET /getversion HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57822 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57842 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57852 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57864 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] file.py:645: [proxy:68c58e1a] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 01:59:55] [0.5.1] [INFO] file.py:672: [proxy:68c58e1a] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:55] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 15, "loop_type": 1 }'}} [2026-04-18 01:59:55] [0.5.1] [INFO] device_player.py:834: get_volume. volume:15 [2026-04-18 01:59:55] [0.5.1] [INFO] 172.17.0.1:57832 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 01:59:55] [0.5.1] [INFO] file.py:645: [proxy:9a03d92a] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 01:59:55] [0.5.1] [INFO] file.py:672: [proxy:9a03d92a] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463194&Signature=D2cqZE1Fat066E2XSgfot2CEdVONqlkVPBjPLCiChWsiaYZyx6tCLoT8RFTWQ8j2F48niDX5ZaKmtbHSvrceBXf2jogpQIzOiQnOasupEKX1dPZ5NHlBCPW3jgCnzsujE0~2jgbt3qT4gM0NLlvKE9u2PLO9i1OKEtM8gsGnJxo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:56] [0.5.1] [INFO] 34.21.156.125:54800 - "GET /proxy/music?token=RLGcN8XIcRk HTTP/1.1" 200 [2026-04-18 01:59:56] [0.5.1] [INFO] file.py:519: [proxy:1cf76fae] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:56] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 01:59:56] [0.5.1] [INFO] file.py:524: [proxy:1cf76fae] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 01:59:56] [0.5.1] [INFO] file.py:552: [proxy:1cf76fae] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 01:59:56] [0.5.1] [INFO] file.py:597: [proxy:1cf76fae] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 01:59:56] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 01:59:56] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 01:59:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776448796632"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 01:59:56] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448796632: True [2026-04-18 01:59:56] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463196&Signature=aB~V8A3UkgIrKK53Muha4sJ2Rpb~I1EzUDvu0iIU0pwf3q2pGVg3L3kPkREuMlJCv1m7JECaIngk0XL91zmR61R~NDrP~J8CSWnN98PifGJhyj5VVk9jEve69723fm8FwbgRCenj7dQTXF~Mq1vlNvsEAUQg0gMoTYXGAAhaFvw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:56] [0.5.1] [INFO] 34.21.156.125:59490 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 01:59:56] [0.5.1] [INFO] file.py:608: [proxy:1cf76fae] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463196&Signature=aB~V8A3UkgIrKK53Muha4sJ2Rpb~I1EzUDvu0iIU0pwf3q2pGVg3L3kPkREuMlJCv1m7JECaIngk0XL91zmR61R~NDrP~J8CSWnN98PifGJhyj5VVk9jEve69723fm8FwbgRCenj7dQTXF~Mq1vlNvsEAUQg0gMoTYXGAAhaFvw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:56] [0.5.1] [INFO] file.py:624: [proxy:1cf76fae] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463196&Signature=aB~V8A3UkgIrKK53Muha4sJ2Rpb~I1EzUDvu0iIU0pwf3q2pGVg3L3kPkREuMlJCv1m7JECaIngk0XL91zmR61R~NDrP~J8CSWnN98PifGJhyj5VVk9jEve69723fm8FwbgRCenj7dQTXF~Mq1vlNvsEAUQg0gMoTYXGAAhaFvw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 01:59:56] [0.5.1] [INFO] 172.17.0.1:33584 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 01:59:56] [0.5.1] [INFO] 122.96.50.157:23012 - "GET /proxy/music?token=An_N9PrxJQM HTTP/1.1" 200 [2026-04-18 01:59:57] [0.5.1] [INFO] file.py:645: [proxy:1cf76fae] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463196&Signature=aB~V8A3UkgIrKK53Muha4sJ2Rpb~I1EzUDvu0iIU0pwf3q2pGVg3L3kPkREuMlJCv1m7JECaIngk0XL91zmR61R~NDrP~J8CSWnN98PifGJhyj5VVk9jEve69723fm8FwbgRCenj7dQTXF~Mq1vlNvsEAUQg0gMoTYXGAAhaFvw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 01:59:57] [0.5.1] [INFO] file.py:672: [proxy:1cf76fae] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776463196&Signature=aB~V8A3UkgIrKK53Muha4sJ2Rpb~I1EzUDvu0iIU0pwf3q2pGVg3L3kPkREuMlJCv1m7JECaIngk0XL91zmR61R~NDrP~J8CSWnN98PifGJhyj5VVk9jEve69723fm8FwbgRCenj7dQTXF~Mq1vlNvsEAUQg0gMoTYXGAAhaFvw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 01:59:58] [0.5.1] [INFO] 34.21.156.125:59486 - "GET /proxy/music?token=RLGcN8XIcRk HTTP/1.1" 200 [2026-04-18 01:59:59] [0.5.1] [INFO] 172.17.0.1:33592 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkwOTUuMzg4MDQyLCJpYXQiOjE3NzY0NDg3OTUuMzg4MDQyN30.vpj5iaYIbXAOFGAhUcE6JgO_aIY_YOqoQLSH1HmFlhE HTTP/1.0" 404 [2026-04-18 02:00:01] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:00:01] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:00:01] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:00:01] [0.5.1] [INFO] 172.17.0.1:33606 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:00:01] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:00:01] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:00:01] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:00:01] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:00:01] [0.5.1] [INFO] 172.17.0.1:33618 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:00:01] [0.5.1] [INFO] 172.17.0.1:33620 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:00:01] [0.5.1] [INFO] 172.17.0.1:33624 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:01] [0.5.1] [INFO] 172.17.0.1:33638 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:03] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:00:03] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:00:03] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:00:03] [0.5.1] [INFO] 172.17.0.1:33642 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:00:03] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:00:03] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:00:03] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:00:03] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:00:03] [0.5.1] [INFO] 172.17.0.1:33658 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:00:03] [0.5.1] [INFO] 172.17.0.1:33660 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:00:03] [0.5.1] [INFO] 172.17.0.1:33670 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:04] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:00:04] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:00:04] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:00:04] [0.5.1] [INFO] 172.17.0.1:33678 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:00:04] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:00:04] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:00:04] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:00:05] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:00:05] [0.5.1] [INFO] 172.17.0.1:33684 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:00:05] [0.5.1] [INFO] 172.17.0.1:33690 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:00:05] [0.5.1] [INFO] 172.17.0.1:33696 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:06] [0.5.1] [INFO] 172.17.0.1:33706 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxMDEuMzU3NDYzNiwiaWF0IjoxNzc2NDQ4ODAxLjM1NzQ2NH0.y-KpAaBK6sKA5uvSYkxZATUh5M_dcDEWyVyULXFRqew HTTP/1.0" 404 [2026-04-18 02:00:09] [0.5.1] [INFO] 172.17.0.1:51578 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:00:09] [0.5.1] [INFO] 172.17.0.1:51584 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 02:00:10] [0.5.1] [INFO] 172.17.0.1:51590 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:00:11] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:00:11] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:00:11] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:00:11] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:00:11] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 10} [2026-04-18 02:00:11] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 10}, "id": "msg_1776448811820"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:00:12] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776448811820: True [2026-04-18 02:00:12] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:00:12] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:00:12] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 02:00:12] [0.5.1] [INFO] 172.17.0.1:51604 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:00:12] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpcei8wdra [2026-04-18 02:00:12] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "299.258750" } } [2026-04-18 02:00:12] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 299.25875 seconds for file: /tmp/tmpcei8wdra [2026-04-18 02:00:12] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 七里香.FLAC-周杰伦 时长: 299.25875 秒 [2026-04-18 02:00:12] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 七里香.FLAC-周杰伦 时长到内存: 299.25875 秒 [2026-04-18 02:00:12] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:00:12] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 17.899 秒 [2026-04-18 02:00:12] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 281.360 秒 [2026-04-18 02:00:12] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:00:12] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:00:12] [0.5.1] [INFO] device_player.py:808: 281.3600466632843 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:00:12] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:00:12] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:00:14] [0.5.1] [INFO] 172.17.0.1:51612 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:00:14] [0.5.1] [INFO] 172.17.0.1:51616 - "GET /getversion HTTP/1.0" 200 [2026-04-18 02:00:14] [0.5.1] [INFO] 172.17.0.1:51618 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 02:00:14] [0.5.1] [INFO] 172.17.0.1:51630 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:00:14] [0.5.1] [INFO] 172.17.0.1:51640 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:14] [0.5.1] [INFO] 172.17.0.1:51648 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:15] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 15, "loop_type": 1 }'}} [2026-04-18 02:00:15] [0.5.1] [INFO] device_player.py:834: get_volume. volume:15 [2026-04-18 02:00:15] [0.5.1] [INFO] 172.17.0.1:51624 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:16] [0.5.1] [INFO] 172.17.0.1:41992 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:00:16] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:00:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:00:16] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:00:16] [0.5.1] [INFO] 172.17.0.1:42008 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:00:16] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:00:16] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:00:16] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:00:16] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:00:16] [0.5.1] [INFO] 172.17.0.1:42020 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:00:17] [0.5.1] [INFO] 172.17.0.1:42026 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:00:17] [0.5.1] [INFO] 172.17.0.1:42030 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:17] [0.5.1] [INFO] 172.17.0.1:42042 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxMTQuNjY5MjAxLCJpYXQiOjE3NzY0NDg4MTQuNjY5MjAxNH0.sCwY3h88IjIyPr1XcAGJRPNtQhhL_yxxo4U0eOLbHLo HTTP/1.0" 404 [2026-04-18 02:00:18] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:00:18] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:00:18] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:00:18] [0.5.1] [INFO] 172.17.0.1:42050 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:00:18] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:00:18] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:00:18] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:00:18] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:00:18] [0.5.1] [INFO] 172.17.0.1:42056 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:00:18] [0.5.1] [INFO] 172.17.0.1:42064 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:00:18] [0.5.1] [INFO] 172.17.0.1:42072 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:18] [0.5.1] [INFO] 172.17.0.1:42084 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:22] [0.5.1] [INFO] 172.17.0.1:42100 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxMTguNDE2MTY0MiwiaWF0IjoxNzc2NDQ4ODE4LjQxNjE2NDl9.HVaPhcp6T_NfN3PDnrlZ8p8DmcgEcnjpnyCVqAVGFjc HTTP/1.0" 404 [2026-04-18 02:00:25] [0.5.1] [INFO] 172.17.0.1:42114 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:26] [0.5.1] [INFO] 172.17.0.1:46106 - "GET / HTTP/1.0" 200 [2026-04-18 02:00:26] [0.5.1] [INFO] 172.17.0.1:46108 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 02:00:27] [0.5.1] [INFO] 172.17.0.1:46120 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 02:00:27] [0.5.1] [INFO] 172.17.0.1:46126 - "GET / HTTP/1.0" 200 [2026-04-18 02:00:27] [0.5.1] [INFO] 172.17.0.1:46140 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 02:00:27] [0.5.1] [INFO] 172.17.0.1:46150 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 02:00:27] [0.5.1] [INFO] 172.17.0.1:46164 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 02:00:28] [0.5.1] [INFO] 172.17.0.1:46168 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 02:00:28] [0.5.1] [INFO] 172.17.0.1:46182 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 02:00:28] [0.5.1] [INFO] 172.17.0.1:46188 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 02:00:28] [0.5.1] [INFO] 172.17.0.1:46196 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxMjUuODM0ODMzOSwiaWF0IjoxNzc2NDQ4ODI1LjgzNDgzNDN9.VG61bKbBaz9myGWRtFLNQJ5iK5cnLmb3rV5NA3zHdww HTTP/1.0" 404 [2026-04-18 02:00:31] [0.5.1] [INFO] 172.17.0.1:46210 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:35] [0.5.1] [INFO] 172.17.0.1:46216 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxMzEuODcxOTU1OSwiaWF0IjoxNzc2NDQ4ODMxLjg3MTk1NjZ9.tO3ZT2RAlQy5GrWpdPHsCqwE-AnaQaWZSBfL_qX45EQ HTTP/1.0" 404 [2026-04-18 02:00:38] [0.5.1] [INFO] 172.17.0.1:50248 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:40] [0.5.1] [INFO] 172.17.0.1:50264 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxMzguNjQ1MDM2NSwiaWF0IjoxNzc2NDQ4ODM4LjY0NTAzNzJ9.nPaM2j6bg36c7b8koJQoowQu4h8_11UEsW0zYrkEepA HTTP/1.0" 404 [2026-04-18 02:00:43] [0.5.1] [INFO] 172.17.0.1:50280 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:46] [0.5.1] [INFO] 172.17.0.1:45502 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNDMuNDA0MDY4LCJpYXQiOjE3NzY0NDg4NDMuNDA0MDY5fQ.DApERCstP4_V5DFgwtJrGKS0iI6g8jDVn_x6LVSfOUE HTTP/1.0" 404 [2026-04-18 02:00:49] [0.5.1] [INFO] 172.17.0.1:45510 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:53] [0.5.1] [INFO] 172.17.0.1:45522 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNDkuNjQwNjkzNywiaWF0IjoxNzc2NDQ4ODQ5LjY0MDY5NDZ9.1rGk-5XXusoE-zoh2RSdXTSKGEW2gsRwyXQUiFR9JHI HTTP/1.0" 404 [2026-04-18 02:00:56] [0.5.1] [INFO] 172.17.0.1:40554 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:00:57] [0.5.1] [INFO] 172.17.0.1:40570 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNTYuODI2NjExNSwiaWF0IjoxNzc2NDQ4ODU2LjgyNjYxMn0.GFpYtl91W1Yp5Me3HavFfyJwIGm7ke3HjdllqFqmsdI HTTP/1.0" 404 [2026-04-18 02:01:00] [0.5.1] [INFO] 172.17.0.1:40572 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:01] [0.5.1] [INFO] 172.17.0.1:40576 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNjAuNDEzMDE4MiwiaWF0IjoxNzc2NDQ4ODYwLjQxMzAxOX0.ShNhZiucdSsDjJRqrVC8Cqv6wYMK5Vj6nCx44IlV1W0 HTTP/1.0" 404 [2026-04-18 02:01:04] [0.5.1] [INFO] 172.17.0.1:40592 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:04] [0.5.1] [INFO] 172.17.0.1:40594 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNjQuMjIzMTMzLCJpYXQiOjE3NzY0NDg4NjQuMjIzMTMzOH0.DnlpfhmaDtJhzvnmPCUMmYuGFsCvD4b7uqlKQCqj1X0 HTTP/1.0" 404 [2026-04-18 02:01:07] [0.5.1] [INFO] 172.17.0.1:51968 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:09] [0.5.1] [INFO] 172.17.0.1:51970 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNjcuOTE3Nzc3LCJpYXQiOjE3NzY0NDg4NjcuOTE3Nzc4fQ.WMBFmZTNcunN45l02nD5dLLkHihD5aWLlprQex0ojiM HTTP/1.0" 404 [2026-04-18 02:01:12] [0.5.1] [INFO] 172.17.0.1:51974 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:17] [0.5.1] [INFO] 172.17.0.1:32786 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxNzIuMzMyMDY0NiwiaWF0IjoxNzc2NDQ4ODcyLjMzMjA2NTN9.xGDmYp5-Qvw9T0y_OJitK-rpzyYjCUblCYpiXMH4RU0 HTTP/1.0" 404 [2026-04-18 02:01:20] [0.5.1] [INFO] 172.17.0.1:32794 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:22] [0.5.1] [INFO] 172.17.0.1:32798 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxODAuNDU5MDQ4MywiaWF0IjoxNzc2NDQ4ODgwLjQ1OTA0OX0.nGHGdeNkon8hWd3flj7XYLYXyx4CqyJeUwS8PgS5x_c HTTP/1.0" 404 [2026-04-18 02:01:25] [0.5.1] [INFO] 172.17.0.1:32808 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:30] [0.5.1] [INFO] 172.17.0.1:35056 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxODUuNjAwNTYyMywiaWF0IjoxNzc2NDQ4ODg1LjYwMDU2MzN9.Mj4YNP3I3egULpdLk90jSShAY8J1M7ias6n3xwumayA HTTP/1.0" 404 [2026-04-18 02:01:33] [0.5.1] [INFO] 172.17.0.1:35066 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:36] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:01:36] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:01:36] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:01:36] [0.5.1] [INFO] 172.17.0.1:35068 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:01:36] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:01:36] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:01:36] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:01:36] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:01:36] [0.5.1] [INFO] 172.17.0.1:35074 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:01:36] [0.5.1] [INFO] 172.17.0.1:38618 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:01:36] [0.5.1] [INFO] 172.17.0.1:38630 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:37] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:01:37] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:01:37] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:01:37] [0.5.1] [INFO] 172.17.0.1:38638 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:01:37] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:01:37] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:01:37] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:01:37] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:01:37] [0.5.1] [INFO] 172.17.0.1:38640 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:01:37] [0.5.1] [INFO] 172.17.0.1:38646 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:01:37] [0.5.1] [INFO] 172.17.0.1:38660 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:38] [0.5.1] [INFO] 172.17.0.1:38666 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkxOTMuODI0MDc3OCwiaWF0IjoxNzc2NDQ4ODkzLjgyNDA3ODN9.9_jxqsuw5URKIqLkbUlmyMGtLP11eNTxij41MfDQjRE HTTP/1.0" 404 [2026-04-18 02:01:41] [0.5.1] [INFO] 172.17.0.1:38678 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:44] [0.5.1] [INFO] 172.17.0.1:38684 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMDEuODkzMzAxNSwiaWF0IjoxNzc2NDQ4OTAxLjg5MzMwMjJ9.QyDslasH_oy1aBPwfifndKjhiXtmgXOxn2XK3tPiEVk HTTP/1.0" 404 [2026-04-18 02:01:47] [0.5.1] [INFO] 172.17.0.1:46500 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:51] [0.5.1] [INFO] 172.17.0.1:46516 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMDcuNzY1NzA1OCwiaWF0IjoxNzc2NDQ4OTA3Ljc2NTcwNjV9.7at5XhzyP8DjQJLqvEfgpZDVUH-EUE-TXZR1huAvJmA HTTP/1.0" 404 [2026-04-18 02:01:54] [0.5.1] [INFO] 172.17.0.1:46526 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:01:57] [0.5.1] [INFO] 172.17.0.1:60866 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMTQuNTkzODc0NywiaWF0IjoxNzc2NDQ4OTE0LjU5Mzg3NTR9.kBnN1TD5KG0tpDXS3GSV_nGb7z5EwUoanZTVLzUCcAk HTTP/1.0" 404 [2026-04-18 02:02:01] [0.5.1] [INFO] 172.17.0.1:60876 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:03] [0.5.1] [INFO] 172.17.0.1:60890 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMjEuMDQ3NDY5NCwiaWF0IjoxNzc2NDQ4OTIxLjA0NzQ3fQ.HrdjPXr1TxDHx6Zzm6A04W5gamXVuMRSdHPSK5TdcHg HTTP/1.0" 404 [2026-04-18 02:02:06] [0.5.1] [INFO] 172.17.0.1:35224 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:09] [0.5.1] [INFO] 172.17.0.1:35226 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMjYuODE0NTM4MiwiaWF0IjoxNzc2NDQ4OTI2LjgxNDUzODd9.7ZqmZnjbnB8jyV8tsSbLLksWfwiWDWBRpg8ie4YRR-M HTTP/1.0" 404 [2026-04-18 02:02:12] [0.5.1] [INFO] 172.17.0.1:35240 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:15] [0.5.1] [INFO] 172.17.0.1:35256 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMzIuMzg0OTkzNiwiaWF0IjoxNzc2NDQ4OTMyLjM4NDk5NDV9.S8rqPPPRHqjAdQiP9UAG_O1mrdBEYPInriD--MKjyP4 HTTP/1.0" 404 [2026-04-18 02:02:18] [0.5.1] [INFO] 172.17.0.1:58546 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:23] [0.5.1] [INFO] 172.17.0.1:58556 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyMzguMzY0MjI3NSwiaWF0IjoxNzc2NDQ4OTM4LjM2NDIyODd9.XjPd8BV35JH0bW2_X-DKBfcXfVhm2ZlyjwDWHPrNVJY HTTP/1.0" 404 [2026-04-18 02:02:26] [0.5.1] [INFO] 172.17.0.1:39474 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:28] [0.5.1] [INFO] 172.17.0.1:39488 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyNDYuNTM1NDI4MywiaWF0IjoxNzc2NDQ4OTQ2LjUzNTQyODh9.BvYkvIyNGUKE2ZQCLY1SOcBZGxTIw3jPW-F6G2wtBt8 HTTP/1.0" 404 [2026-04-18 02:02:31] [0.5.1] [INFO] 172.17.0.1:39502 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:35] [0.5.1] [INFO] 172.17.0.1:39514 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyNTEuMTY2MDY1MiwiaWF0IjoxNzc2NDQ4OTUxLjE2NjA2Nn0.RkHbtSpi2U3sjqGAbfh7TDF-7ypxnuWEFlkCbpd9zyU HTTP/1.0" 404 [2026-04-18 02:02:38] [0.5.1] [INFO] 172.17.0.1:52564 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:43] [0.5.1] [INFO] 172.17.0.1:52574 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyNTguODE0ODE5MywiaWF0IjoxNzc2NDQ4OTU4LjgxNDgyfQ.SURKG_v8fUTtm5MXB_QuYCuDLDxfjyU4BRhMUp1zRcw HTTP/1.0" 404 [2026-04-18 02:02:46] [0.5.1] [INFO] 172.17.0.1:38132 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:51] [0.5.1] [INFO] 172.17.0.1:38148 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyNjYuOTU4NTY5NSwiaWF0IjoxNzc2NDQ4OTY2Ljk1ODU3fQ.vkBnknoFiR_yV1q1CVEhn6o932RduIulC0HpzqzZF2o HTTP/1.0" 404 [2026-04-18 02:02:54] [0.5.1] [INFO] 172.17.0.1:38162 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:54] [0.5.1] [INFO] 172.17.0.1:38176 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyNzQuMjU4MzI4LCJpYXQiOjE3NzY0NDg5NzQuMjU4MzI5Mn0.cyqbqKtReRNmIms_oDTfQ-2uiF-_itcQbrSzmudrDhg HTTP/1.0" 404 [2026-04-18 02:02:57] [0.5.1] [INFO] 172.17.0.1:40546 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:02:57] [0.5.1] [INFO] 172.17.0.1:40562 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyNzcuNjM2MDgwMywiaWF0IjoxNzc2NDQ4OTc3LjYzNjA4MX0.re8bo8XJBzJRzsv6ayuvA2VR-9_AAjnbVruu3Wz_kW8 HTTP/1.0" 404 [2026-04-18 02:03:01] [0.5.1] [INFO] 172.17.0.1:40576 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:01] [0.5.1] [INFO] 172.17.0.1:40588 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyODEuMDMxODUyNywiaWF0IjoxNzc2NDQ4OTgxLjAzMTg1MzJ9.3my6JySkqbLXRxSAtEauKU0ecQjDHTxMLIOk9hA2h_c HTTP/1.0" 404 [2026-04-18 02:03:04] [0.5.1] [INFO] 172.17.0.1:40592 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:04] [0.5.1] [INFO] 172.17.0.1:40604 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyODQuNDIyMTg0LCJpYXQiOjE3NzY0NDg5ODQuNDIyMTg0N30.P_XjxdqvWTW3YF_LhsPc9MtdDs-tHY28-_hm0yD2Pwg HTTP/1.0" 404 [2026-04-18 02:03:07] [0.5.1] [INFO] 172.17.0.1:58928 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:08] [0.5.1] [INFO] 172.17.0.1:58944 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyODcuODE5OTgwNCwiaWF0IjoxNzc2NDQ4OTg3LjgxOTk4MX0.8gLzgIV0qWDZKxoa-SwHvcz5SHIvWsEgHELh7ao3eVo HTTP/1.0" 404 [2026-04-18 02:03:11] [0.5.1] [INFO] 172.17.0.1:58950 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:11] [0.5.1] [INFO] 172.17.0.1:58966 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyOTEuMzg5MzU4NSwiaWF0IjoxNzc2NDQ4OTkxLjM4OTM1OX0.Y7Ho8pnc-uGSRDFeQjfnkzNnFpNvZkjt_mRg5tTlPfk HTTP/1.0" 404 [2026-04-18 02:03:14] [0.5.1] [INFO] 172.17.0.1:58974 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:15] [0.5.1] [INFO] 172.17.0.1:58980 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyOTQuNzkxOTU0NSwiaWF0IjoxNzc2NDQ4OTk0Ljc5MTk1NTV9.s8Mhwfd-OFq6K62WHkbOV7VPJX-dPm57671qfrC6OgI HTTP/1.0" 404 [2026-04-18 02:03:18] [0.5.1] [INFO] 172.17.0.1:34662 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:18] [0.5.1] [INFO] 172.17.0.1:34670 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkyOTguMjExODAxMywiaWF0IjoxNzc2NDQ4OTk4LjIxMTgwMn0.uMdEsWETUy-pc-TAvzxDuagoiPEkSujdoES5KO469Ck HTTP/1.0" 404 [2026-04-18 02:03:21] [0.5.1] [INFO] 172.17.0.1:34674 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:21] [0.5.1] [INFO] 172.17.0.1:34680 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMDEuNjAzMjg3LCJpYXQiOjE3NzY0NDkwMDEuNjAzMjg3NX0.n-IdWYOy27VwWekmtwMkf57W6soMKqWaDhgLqYtfT5k HTTP/1.0" 404 [2026-04-18 02:03:25] [0.5.1] [INFO] 172.17.0.1:34684 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:25] [0.5.1] [INFO] 172.17.0.1:34696 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMDUuMDI0NTQ1MiwiaWF0IjoxNzc2NDQ5MDA1LjAyNDU0Nn0.AC4fiaDi2qleh9h4MKje8YIe-rgVtaZZcB5J9zvTnE0 HTTP/1.0" 404 [2026-04-18 02:03:28] [0.5.1] [INFO] 172.17.0.1:39874 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:28] [0.5.1] [INFO] 172.17.0.1:39878 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMDguNDI0MTcwNywiaWF0IjoxNzc2NDQ5MDA4LjQyNDE3MTJ9.RqHJP5bmvvCeyAQVOHh_JK3zYz_rczmBg6F-K0PcqQY HTTP/1.0" 404 [2026-04-18 02:03:31] [0.5.1] [INFO] 172.17.0.1:39880 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:32] [0.5.1] [INFO] 172.17.0.1:39884 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMTEuODk3NTAyMiwiaWF0IjoxNzc2NDQ5MDExLjg5NzUwMjd9.drUqmWaR37AtXvKzJchsoIDCetR4ttm9HTVsYJozpAc HTTP/1.0" 404 [2026-04-18 02:03:35] [0.5.1] [INFO] 172.17.0.1:39898 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:35] [0.5.1] [INFO] 172.17.0.1:39912 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMTUuNDA1NjE1NiwiaWF0IjoxNzc2NDQ5MDE1LjQwNTYxNn0.BcKbgeQ39QYqV2nuXR4TqR7Z-80P79JPABwp-Y2xfUM HTTP/1.0" 404 [2026-04-18 02:03:39] [0.5.1] [INFO] 172.17.0.1:39406 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:39] [0.5.1] [INFO] 172.17.0.1:39414 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMTkuMDI2MDY5NCwiaWF0IjoxNzc2NDQ5MDE5LjAyNjA3MDR9.p1VPmILp-JOR8sqx5bXNgdzsywnCbikgwxP_0kzyHQs HTTP/1.0" 404 [2026-04-18 02:03:42] [0.5.1] [INFO] 172.17.0.1:39422 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:43] [0.5.1] [INFO] 172.17.0.1:39428 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMjIuNTI3NzM4NiwiaWF0IjoxNzc2NDQ5MDIyLjUyNzczOTh9.2odNilBSH_scymOiqOACM2XDQhZYpxKtwiu9lk26Og4 HTTP/1.0" 404 [2026-04-18 02:03:46] [0.5.1] [INFO] 172.17.0.1:37982 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:49] [0.5.1] [INFO] 172.17.0.1:37990 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMjYuMzcyMzM5NywiaWF0IjoxNzc2NDQ5MDI2LjM3MjM0MDJ9.C2hHbStcwwLkZbja2OX1Z6zmNclE-tY7khyQ2tQfmIY HTTP/1.0" 404 [2026-04-18 02:03:52] [0.5.1] [INFO] 172.17.0.1:38004 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:03:55] [0.5.1] [INFO] 172.17.0.1:38020 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMzIuMTY5NzY1MiwiaWF0IjoxNzc2NDQ5MDMyLjE2OTc2NTd9.Qxs-3tV8q1LyT3ZfP1hhyUd_MWbnsLg_NGgAZOWDoUk HTTP/1.0" 404 [2026-04-18 02:03:59] [0.5.1] [INFO] 172.17.0.1:36428 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:04] [0.5.1] [INFO] 172.17.0.1:36434 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzMzkuMDQzNjI3NywiaWF0IjoxNzc2NDQ5MDM5LjA0MzYyODJ9.bzROEyjulJQqEEy-6urtKC4WClZIB8WQ3LVqRD3woPo HTTP/1.0" 404 [2026-04-18 02:04:06] [0.5.1] [INFO] device.py:67: set_volume 419359157 0 [2026-04-18 02:04:06] [0.5.1] [INFO] device_player.py:812: set_volume. did: 419359157 volume: 0 [2026-04-18 02:04:07] [0.5.1] [INFO] 172.17.0.1:59276 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:07] [0.5.1] [INFO] 172.17.0.1:59274 - "POST /setvolume HTTP/1.0" 200 [2026-04-18 02:04:11] [0.5.1] [INFO] 172.17.0.1:59284 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzNDcuNjM4NTk5MiwiaWF0IjoxNzc2NDQ5MDQ3LjYzODU5OTZ9.OS8CSuyGqZHP3BAQ1gY1qGwsnwiLycfi8liKxiBK5ks HTTP/1.0" 404 [2026-04-18 02:04:14] [0.5.1] [INFO] 172.17.0.1:59300 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:18] [0.5.1] [INFO] 172.17.0.1:35542 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzNTQuOTM4MjU3NywiaWF0IjoxNzc2NDQ5MDU0LjkzODI1ODR9.j6JrNN910R_3t29X1C6IqDYFArwS0nJiWm2rpi-FV3M HTTP/1.0" 404 [2026-04-18 02:04:21] [0.5.1] [INFO] 172.17.0.1:35554 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:23] [0.5.1] [INFO] 172.17.0.1:35556 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzNjEuNTU3ODAxLCJpYXQiOjE3NzY0NDkwNjEuNTU3ODAxNX0.KTK2Qa3DSsw6Xl8f-Yh4fW7KbXC5wU5FFghQb0rm8mk HTTP/1.0" 404 [2026-04-18 02:04:26] [0.5.1] [INFO] 172.17.0.1:51428 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:28] [0.5.1] [INFO] 172.17.0.1:51432 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzNjYuOTQxNDUxNSwiaWF0IjoxNzc2NDQ5MDY2Ljk0MTQ1MjN9.oo3hFGyB1X5OPtvius5hc4J3MFxFsmD2gL_ZhYuZVNA HTTP/1.0" 404 [2026-04-18 02:04:32] [0.5.1] [INFO] 172.17.0.1:51442 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:35] [0.5.1] [INFO] 172.17.0.1:51446 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzNzIuMDQ0ODExMiwiaWF0IjoxNzc2NDQ5MDcyLjA0NDgxMTd9.psrA8em1HYla66NoMaoDdH222E6qARg78i_rICWkzoo HTTP/1.0" 404 [2026-04-18 02:04:38] [0.5.1] [INFO] 172.17.0.1:42204 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:42] [0.5.1] [INFO] 172.17.0.1:42212 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzNzguMzc5MDYzMSwiaWF0IjoxNzc2NDQ5MDc4LjM3OTA2MzZ9.98pUjs27vE0qnbzYl0Stm3avoHS0t2yv-z-XEPgbC30 HTTP/1.0" 404 [2026-04-18 02:04:46] [0.5.1] [INFO] 172.17.0.1:42222 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:47] [0.5.1] [INFO] 172.17.0.1:46298 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzODYuMDE3NDE3NCwiaWF0IjoxNzc2NDQ5MDg2LjAxNzQxOH0.nM4fxL_C0TAMCM00G-xBXgh9Gv9hFuUucRbnejF8RZk HTTP/1.0" 404 [2026-04-18 02:04:50] [0.5.1] [INFO] 172.17.0.1:46308 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:53] [0.5.1] [INFO] 172.17.0.1:46316 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzOTAuNjU5MzMwOCwiaWF0IjoxNzc2NDQ5MDkwLjY1OTMzMTZ9.ElQq4jT-dBqFM1CFkJHcVjRb6SWuq_-8p66CX5wA7Bo HTTP/1.0" 404 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 02:04:53] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:04:53] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:04:53] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:04:53] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:53] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=QZo-5YvPpiY [2026-04-18 02:04:53] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:04:54] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:04:54] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:04:55] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:04:55] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:04:55] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=QZo-5YvPpiY [2026-04-18 02:04:56] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=QZo-5YvPpiY audio_id:1582971365183456177 [2026-04-18 02:04:56] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=QZo-5YvPpiY ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:04:56] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:04:56] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:04:56] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:56] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=jCJY5XGJpL4 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:519: [proxy:5894d2fa] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:56] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:524: [proxy:5894d2fa] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:552: [proxy:5894d2fa] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:597: [proxy:5894d2fa] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:04:56] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:04:56] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 02:04:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449096225"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:04:56] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449096225: True [2026-04-18 02:04:56] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463496&Signature=Qm2tWT9wP7WH95RruNcRDvF1cV2ofyS14B1boDoWRajOyMsbso-JetqIQbt65htqhA31XzKC5gqlxNprvjVTVPg7OdnxcS5YxqAn1RySG02Ug5kgUK7Z04K705OI9tKq5NXmnm~~0W1hA2o6uvEbk3nsuZlvDiZ0lJPeshyu0CY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:56] [0.5.1] [INFO] 34.21.156.125:54956 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:608: [proxy:5894d2fa] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463496&Signature=Qm2tWT9wP7WH95RruNcRDvF1cV2ofyS14B1boDoWRajOyMsbso-JetqIQbt65htqhA31XzKC5gqlxNprvjVTVPg7OdnxcS5YxqAn1RySG02Ug5kgUK7Z04K705OI9tKq5NXmnm~~0W1hA2o6uvEbk3nsuZlvDiZ0lJPeshyu0CY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:624: [proxy:5894d2fa] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463496&Signature=Qm2tWT9wP7WH95RruNcRDvF1cV2ofyS14B1boDoWRajOyMsbso-JetqIQbt65htqhA31XzKC5gqlxNprvjVTVPg7OdnxcS5YxqAn1RySG02Ug5kgUK7Z04K705OI9tKq5NXmnm~~0W1hA2o6uvEbk3nsuZlvDiZ0lJPeshyu0CY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:04:56] [0.5.1] [INFO] 172.17.0.1:43588 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:04:56] [0.5.1] [INFO] 172.17.0.1:43590 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzOTYuNTQxNTE0NiwiaWF0IjoxNzc2NDQ5MDk2LjU0MTUxNTh9.8vvleuVG9-vayJ257mCmx8bZ2uO-aaPIVT2jVdwhE0k HTTP/1.0" 404 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:519: [proxy:f6fb2722] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:56] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:524: [proxy:f6fb2722] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:552: [proxy:f6fb2722] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:04:56] [0.5.1] [INFO] file.py:597: [proxy:f6fb2722] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:04:56] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:04:56] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 02:04:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449096990"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:04:57] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449096990: True [2026-04-18 02:04:57] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463497&Signature=YwKQNtUGnXfyq27kHHy7oAqp00BueLVj-5~MuU1EyB7kckWbivSl4u43UFLOXVGP-f225xIr0dY2z8I6csaP~ieUXyZr8iiwINxatUpoyFZwsyPeW~A0XUkDRBwVqVXGcFwXsZYREW5-FSWh4yJRNnAMjC58BrBXfNuEEnrbHDI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:57] [0.5.1] [INFO] 34.21.156.125:48858 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:04:57] [0.5.1] [INFO] file.py:608: [proxy:f6fb2722] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463497&Signature=YwKQNtUGnXfyq27kHHy7oAqp00BueLVj-5~MuU1EyB7kckWbivSl4u43UFLOXVGP-f225xIr0dY2z8I6csaP~ieUXyZr8iiwINxatUpoyFZwsyPeW~A0XUkDRBwVqVXGcFwXsZYREW5-FSWh4yJRNnAMjC58BrBXfNuEEnrbHDI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:57] [0.5.1] [INFO] file.py:624: [proxy:f6fb2722] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463497&Signature=YwKQNtUGnXfyq27kHHy7oAqp00BueLVj-5~MuU1EyB7kckWbivSl4u43UFLOXVGP-f225xIr0dY2z8I6csaP~ieUXyZr8iiwINxatUpoyFZwsyPeW~A0XUkDRBwVqVXGcFwXsZYREW5-FSWh4yJRNnAMjC58BrBXfNuEEnrbHDI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:645: [proxy:5894d2fa] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463496&Signature=Qm2tWT9wP7WH95RruNcRDvF1cV2ofyS14B1boDoWRajOyMsbso-JetqIQbt65htqhA31XzKC5gqlxNprvjVTVPg7OdnxcS5YxqAn1RySG02Ug5kgUK7Z04K705OI9tKq5NXmnm~~0W1hA2o6uvEbk3nsuZlvDiZ0lJPeshyu0CY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:672: [proxy:5894d2fa] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463496&Signature=Qm2tWT9wP7WH95RruNcRDvF1cV2ofyS14B1boDoWRajOyMsbso-JetqIQbt65htqhA31XzKC5gqlxNprvjVTVPg7OdnxcS5YxqAn1RySG02Ug5kgUK7Z04K705OI9tKq5NXmnm~~0W1hA2o6uvEbk3nsuZlvDiZ0lJPeshyu0CY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:645: [proxy:f6fb2722] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463497&Signature=YwKQNtUGnXfyq27kHHy7oAqp00BueLVj-5~MuU1EyB7kckWbivSl4u43UFLOXVGP-f225xIr0dY2z8I6csaP~ieUXyZr8iiwINxatUpoyFZwsyPeW~A0XUkDRBwVqVXGcFwXsZYREW5-FSWh4yJRNnAMjC58BrBXfNuEEnrbHDI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:672: [proxy:f6fb2722] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463497&Signature=YwKQNtUGnXfyq27kHHy7oAqp00BueLVj-5~MuU1EyB7kckWbivSl4u43UFLOXVGP-f225xIr0dY2z8I6csaP~ieUXyZr8iiwINxatUpoyFZwsyPeW~A0XUkDRBwVqVXGcFwXsZYREW5-FSWh4yJRNnAMjC58BrBXfNuEEnrbHDI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:58] [0.5.1] [INFO] 34.21.156.125:54950 - "GET /proxy/music?token=jCJY5XGJpL4 HTTP/1.1" 200 [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:519: [proxy:26f14e31] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:58] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:524: [proxy:26f14e31] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:552: [proxy:26f14e31] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:04:58] [0.5.1] [INFO] file.py:597: [proxy:26f14e31] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:04:59] [0.5.1] [INFO] 122.96.50.157:52069 - "GET /proxy/music?token=QZo-5YvPpiY HTTP/1.1" 200 [2026-04-18 02:04:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:04:59] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 02:04:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449099009"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:04:59] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449099009: True [2026-04-18 02:04:59] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463499&Signature=SDsbkrfvDd0Ku6t4yAEJl~I66Io5k8MQRm-wlq4jexSnwT24WJn7Lm1n7~zpVttszQ9F19t2tBck8DRK9Hvct3W0QBx~V1GEK0LUWzKWOhxh3IDAVqhaNoihGX90KPqe6naa5C1k4JqN7QkIE1rryqHLSONr~vu7Qp4CiaEsAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:59] [0.5.1] [INFO] 34.21.156.125:48882 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:04:59] [0.5.1] [INFO] file.py:608: [proxy:26f14e31] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463499&Signature=SDsbkrfvDd0Ku6t4yAEJl~I66Io5k8MQRm-wlq4jexSnwT24WJn7Lm1n7~zpVttszQ9F19t2tBck8DRK9Hvct3W0QBx~V1GEK0LUWzKWOhxh3IDAVqhaNoihGX90KPqe6naa5C1k4JqN7QkIE1rryqHLSONr~vu7Qp4CiaEsAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:59] [0.5.1] [INFO] file.py:624: [proxy:26f14e31] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463499&Signature=SDsbkrfvDd0Ku6t4yAEJl~I66Io5k8MQRm-wlq4jexSnwT24WJn7Lm1n7~zpVttszQ9F19t2tBck8DRK9Hvct3W0QBx~V1GEK0LUWzKWOhxh3IDAVqhaNoihGX90KPqe6naa5C1k4JqN7QkIE1rryqHLSONr~vu7Qp4CiaEsAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:04:59] [0.5.1] [INFO] file.py:645: [proxy:26f14e31] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463499&Signature=SDsbkrfvDd0Ku6t4yAEJl~I66Io5k8MQRm-wlq4jexSnwT24WJn7Lm1n7~zpVttszQ9F19t2tBck8DRK9Hvct3W0QBx~V1GEK0LUWzKWOhxh3IDAVqhaNoihGX90KPqe6naa5C1k4JqN7QkIE1rryqHLSONr~vu7Qp4CiaEsAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 02:04:59] [0.5.1] [INFO] file.py:672: [proxy:26f14e31] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776463499&Signature=SDsbkrfvDd0Ku6t4yAEJl~I66Io5k8MQRm-wlq4jexSnwT24WJn7Lm1n7~zpVttszQ9F19t2tBck8DRK9Hvct3W0QBx~V1GEK0LUWzKWOhxh3IDAVqhaNoihGX90KPqe6naa5C1k4JqN7QkIE1rryqHLSONr~vu7Qp4CiaEsAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:04:59] [0.5.1] [INFO] 172.17.0.1:43594 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:00] [0.5.1] [INFO] 172.17.0.1:43610 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDkzOTkuOTU0NTk5MSwiaWF0IjoxNzc2NDQ5MDk5Ljk1NDU5OTZ9.cc0rVgYvQ0mgF5nPfN8XxAg9h-07XraVo6KlJApkuuo HTTP/1.0" 404 [2026-04-18 02:05:00] [0.5.1] [INFO] 34.21.156.125:48866 - "GET /proxy/music?token=jCJY5XGJpL4 HTTP/1.1" 200 [2026-04-18 02:05:03] [0.5.1] [INFO] 172.17.0.1:43620 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:03] [0.5.1] [INFO] 172.17.0.1:43628 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MDMuMzYyNTI4LCJpYXQiOjE3NzY0NDkxMDMuMzYyNTI4OH0.XLZsO8VUlpDRclx786dn5Zqgq1YhpeTaXePp3JQOMYg HTTP/1.0" 404 [2026-04-18 02:05:06] [0.5.1] [INFO] 172.17.0.1:45872 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:07] [0.5.1] [INFO] 172.17.0.1:45874 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MDYuNzY2OTA4LCJpYXQiOjE3NzY0NDkxMDYuNzY2OTA4Nn0.yeMsBx2-z0jhKyaVZymtJ6k6tGrhReHqN_pfr_WO-a8 HTTP/1.0" 404 [2026-04-18 02:05:07] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:07] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:07] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:07] [0.5.1] [INFO] 172.17.0.1:45880 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:07] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:07] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:07] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:07] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:07] [0.5.1] [INFO] 172.17.0.1:45886 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:07] [0.5.1] [INFO] 172.17.0.1:45900 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:07] [0.5.1] [INFO] 172.17.0.1:45910 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:07] [0.5.1] [INFO] 172.17.0.1:45912 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:08] [0.5.1] [INFO] 172.17.0.1:45916 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MDcuNzI0NjM0NiwiaWF0IjoxNzc2NDQ5MTA3LjcyNDYzNTZ9.WC_O3mRzEphPH2NtWPU93_ip1_PXPE3YZ1GaIhn0zm4 HTTP/1.0" 404 [2026-04-18 02:05:09] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:09] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:09] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:09] [0.5.1] [INFO] 172.17.0.1:45922 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:09] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:09] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:09] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:09] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:09] [0.5.1] [INFO] 172.17.0.1:45926 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:09] [0.5.1] [INFO] 172.17.0.1:45934 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:09] [0.5.1] [INFO] 172.17.0.1:45952 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:09] [0.5.1] [INFO] 172.17.0.1:45942 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:09] [0.5.1] [INFO] 172.17.0.1:45960 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MDkuNTY4ODI0OCwiaWF0IjoxNzc2NDQ5MTA5LjU2ODgyNTV9.L0xWS_OoVRB5prboIe-2-s4VIHz9wUIvrb3q4AHlGr4 HTTP/1.0" 404 [2026-04-18 02:05:10] [0.5.1] [INFO] 172.17.0.1:45966 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:10] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:10] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:10] [0.5.1] [INFO] 172.17.0.1:45972 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:10] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:10] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:10] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:10] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:10] [0.5.1] [INFO] 172.17.0.1:45986 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:10] [0.5.1] [INFO] 172.17.0.1:46002 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:10] [0.5.1] [INFO] 172.17.0.1:46018 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTAuMjExODEwNCwiaWF0IjoxNzc2NDQ5MTEwLjIxMTgxMTN9.HmDrpDlbaLbHhrG381MGEOqxpKiZsTs6LMubIePJtaU HTTP/1.0" 404 [2026-04-18 02:05:10] [0.5.1] [INFO] 172.17.0.1:46026 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:11] [0.5.1] [INFO] 172.17.0.1:46028 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:11] [0.5.1] [INFO] 172.17.0.1:46030 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTEuMTA0NDkzNCwiaWF0IjoxNzc2NDQ5MTExLjEwNDQ5NH0.z96YDhgZlYApO4v4wbWiklFQDh4WjiiGWdATJb2sLtg HTTP/1.0" 404 [2026-04-18 02:05:12] [0.5.1] [INFO] 172.17.0.1:46036 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:13] [0.5.1] [INFO] 172.17.0.1:46052 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTIuOTc0MTI1OSwiaWF0IjoxNzc2NDQ5MTEyLjk3NDEyNjh9.1bSICdATMss0WM7Jrw157UyTvRUOfkdSBcjaRpBA_Yw HTTP/1.0" 404 [2026-04-18 02:05:13] [0.5.1] [INFO] 172.17.0.1:46068 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:13] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:13] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:13] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:13] [0.5.1] [INFO] 172.17.0.1:46076 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:13] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:13] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:13] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:13] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:13] [0.5.1] [INFO] 172.17.0.1:46100 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTMuNjMwMzgxMywiaWF0IjoxNzc2NDQ5MTEzLjYzMDM4Mn0.Ar-qhENBQ2RwuVqO7--D7ifJTVCRV_gPaJQTwUL4b3w HTTP/1.0" 404 [2026-04-18 02:05:13] [0.5.1] [INFO] 172.17.0.1:46090 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:14] [0.5.1] [INFO] 172.17.0.1:46114 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:14] [0.5.1] [INFO] 172.17.0.1:46126 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:14] [0.5.1] [INFO] 172.17.0.1:46132 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:14] [0.5.1] [INFO] 172.17.0.1:46144 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTQuMTY2ODYsImlhdCI6MTc3NjQ0OTExNC4xNjY4NjA4fQ.3h-vvzPQ9wuS-Vq7RajEFsjBVI4tSMMRxLF1GXXivPk HTTP/1.0" 404 [2026-04-18 02:05:14] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:14] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:14] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:14] [0.5.1] [INFO] 172.17.0.1:46158 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:14] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:14] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:14] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:14] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46174 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46182 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp42wmyy1c [2026-04-18 02:05:15] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "226.873438" } } [2026-04-18 02:05:15] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 226.873438 seconds for file: /tmp/tmp42wmyy1c [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 夜曲.FLAC-周杰伦 时长: 226.873438 秒 [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 夜曲.FLAC-周杰伦 时长到内存: 226.873438 秒 [2026-04-18 02:05:15] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:05:15] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 18.995 秒 [2026-04-18 02:05:15] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 207.879 秒 [2026-04-18 02:05:15] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:05:15] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:05:15] [0.5.1] [INFO] device_player.py:808: 207.8785706751709 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:05:15] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:05:15] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46198 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46192 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46210 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTUuMjE3ODI0MiwiaWF0IjoxNzc2NDQ5MTE1LjIxNzgyNDd9.la28AfWlbq8SqVg7QiJYIGobbiVutNQimwjJv_xv800 HTTP/1.0" 404 [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:15] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:15] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46220 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:15] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46230 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46238 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46254 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:15] [0.5.1] [INFO] 172.17.0.1:46248 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:16] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:05:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:05:16] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:05:16] [0.5.1] [INFO] 172.17.0.1:35712 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:05:16] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:05:16] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:05:16] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:05:16] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:05:16] [0.5.1] [INFO] 172.17.0.1:35716 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:05:16] [0.5.1] [INFO] 172.17.0.1:35728 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTUuOTkxMjcxMywiaWF0IjoxNzc2NDQ5MTE1Ljk5MTI3Mn0.X0-ZOwGp4iElA6LoBRsjxgXIXxRzVQ8lyMOyCsKqv4w HTTP/1.0" 404 [2026-04-18 02:05:16] [0.5.1] [INFO] 172.17.0.1:35736 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:05:16] [0.5.1] [INFO] 172.17.0.1:35744 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:16] [0.5.1] [INFO] 172.17.0.1:35750 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:17] [0.5.1] [INFO] 172.17.0.1:35766 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTYuNzM3MjYyMiwiaWF0IjoxNzc2NDQ5MTE2LjczNzI2M30.ppveP2jKrr8T86rm06PYZ_LlI6oCo28UAf4Svlpd930 HTTP/1.0" 404 [2026-04-18 02:05:17] [0.5.1] [INFO] 172.17.0.1:35768 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:05:18] [0.5.1] [INFO] 172.17.0.1:35784 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk0MTcuNjEyNDk2MSwiaWF0IjoxNzc2NDQ5MTE3LjYxMjQ5Njl9.dWVw_9pOyShlFQkYFhNdsi-ezSulZ4v-hPKW0-5FIUg HTTP/1.0" 404 [2026-04-18 02:05:18] [0.5.1] [INFO] 172.17.0.1:35786 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:05:18] [0.5.1] [INFO] 172.17.0.1:35800 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 02:05:20] [0.5.1] [INFO] 172.17.0.1:35812 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:05:22] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:22] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:22] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:05:22] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:05:22] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 10} [2026-04-18 02:05:22] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 10}, "id": "msg_1776449122639"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:22] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449122639: True [2026-04-18 02:05:22] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:05:22] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:22] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 02:05:22] [0.5.1] [INFO] 172.17.0.1:35816 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:25] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:25] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:25] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:05:25] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:05:25] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 2, 'limit': 10} [2026-04-18 02:05:25] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 2, "limit": 10}, "id": "msg_1776449125567"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:26] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449125567: True [2026-04-18 02:05:26] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:05:26] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:26] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 11478563, 'artwork': 'https://i.audiomack.com/younghsu/edaea7047e.webp', 'duration': 270, 'title': '周杰伦-等你下课.flac', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-deng-ni-xia-keflac', 'platform': 'Audiomack'}, {'id': 11478066, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 给我一首歌的时间.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-gei-wo-yi-shou-ge-de-shi-jianflac', 'platform': 'Audiomack'}, {'id': 19092258, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 239, 'title': '搁浅', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ge-qian', 'platform': 'Audiomack'}, {'id': 10921907, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦的床边故事', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 19092238, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 186, 'title': 'Mojito', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'mojito', 'platform': 'Audiomack'}, {'id': 19092252, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 300, 'title': '发如雪', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'fa-ru-xue', 'platform': 'Audiomack'}, {'id': 19092268, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 277, 'title': '霍元甲', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'huo-yuan-jia', 'platform': 'Audiomack'}, {'id': 19092253, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 259, 'title': '反方向的钟', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'fan-fang-xiang-de-zhong', 'platform': 'Audiomack'}, {'id': 11478038, 'artwork': 'https://i.audiomack.com/younghsu/d5abaa2cfd.webp', 'duration': 297, 'title': '不能说的秘密', 'artist': '周杰伦', 'album': '', 'url_slug': 'bu-neng-shuo-de-mi-mi', 'platform': 'Audiomack'}, {'id': 18955309, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 343, 'title': '以父之名', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yi-fu-zhi-ming', 'platform': 'Audiomack'}, {'id': 19092295, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 283, 'title': '说了再见', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shuo-le-zai-jian', 'platform': 'Audiomack'}, {'id': 11478054, 'artwork': 'https://i.audiomack.com/younghsu/c2023367f2.webp', 'duration': 259, 'title': '反方向的钟.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'fan-fang-xiang-de-zhongflac', 'platform': 'Audiomack'}, {'id': 19092234, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '爱的飞行日记', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ai-de-fei-xing-ri-ji', 'platform': 'Audiomack'}, {'id': 19092230, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 199, 'title': '稻香', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'dao-xiang-1', 'platform': 'Audiomack'}, {'id': 14925978, 'artwork': 'https://i.audiomack.com/hdplus/4cb5298750.webp', 'duration': 254, 'title': '给我一首歌的时间', 'artist': '周杰伦', 'album': '魔杰座', 'url_slug': '14925978', 'platform': 'Audiomack'}, {'id': 19092294, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 257, 'title': '说好的幸福呢', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shuo-hao-de-xing-fu-ne', 'platform': 'Audiomack'}, {'id': 19092245, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 297, 'title': '不能说的秘密', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'bu-neng-shuo-de-mi-mi', 'platform': 'Audiomack'}, {'id': 19092284, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 254, 'title': '兰亭序', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'lan-ting-xu', 'platform': 'Audiomack'}, {'id': 19092249, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 270, 'title': '等你下课(with 杨瑞代)', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'deng-ni-xia-ke-with-yang-rui-dai', 'platform': 'Audiomack'}] [2026-04-18 02:05:26] [0.5.1] [INFO] 172.17.0.1:35818 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=2&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:28] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:28] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:28] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:05:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:05:28] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 3, 'limit': 10} [2026-04-18 02:05:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 3, "limit": 10}, "id": "msg_1776449128151"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449128151: True [2026-04-18 02:05:28] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:05:28] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:28] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478522, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 266, 'title': '周杰伦 - 听妈妈的话.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ting-ma-ma-de-huaflac', 'platform': 'Audiomack'}, {'id': 11478407, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 248, 'title': '周杰伦 - 蒲公英的约定.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-pu-gong-ying-de-yue-dingflac', 'platform': 'Audiomack'}, {'id': 11478548, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 256, 'title': '周杰伦&梁心颐 - 珊瑚海.FLAC', 'artist': '周杰伦&梁心颐', 'album': '', 'url_slug': 'zhou-jie-lunliang-xin-yi-shan-hu-haiflac', 'platform': 'Audiomack'}, {'id': 11478496, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 257, 'title': '周杰伦 - 说好的幸福呢.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-shuo-hao-de-xing-fu-neflac', 'platform': 'Audiomack'}, {'id': 72986048, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/dc14fb2e54.webp', 'duration': 2611, 'title': '3 周杰伦第三张专辑', 'artist': '周杰伦 14张专辑', 'album': 'Jay Chou', 'url_slug': '3-zhou-jie-lun-di-san-zhang-zhuan-jimp3', 'platform': 'Audiomack'}, {'id': 72965497, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 289, 'title': '030 [Jay x JJ Part 2] 周杰伦 & 林俊杰 算什么男人 X 背对背拥抱 (Mashup)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '030-jay-x-jj-part-2-zhou-jie-lun-lin-jun-jie-suan-shen-me-nan-ren-x-bei-dui-bei-yong-bao-mashup', 'platform': 'Audiomack'}, {'id': 19092266, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 265, 'title': '花海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'hua-hai', 'platform': 'Audiomack'}, {'id': 19092263, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 327, 'title': '轨迹', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gui-ji', 'platform': 'Audiomack'}, {'id': 19092259, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 254, 'title': '给我一首歌的时间', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gei-wo-yi-shou-ge-de-shi-jian', 'platform': 'Audiomack'}, {'id': 11470078, 'artwork': 'https://i.audiomack.com/younghsu/3bb801c368.webp', 'duration': 235, 'title': '爱在西元前.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'ai-zai-xi-yuan-qianflac', 'platform': 'Audiomack'}, {'id': 19092243, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 207, 'title': '本草纲目', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ben-cao-gang-mu', 'platform': 'Audiomack'}, {'id': 19092246, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 262, 'title': '彩虹', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'cai-hong', 'platform': 'Audiomack'}, {'id': 19092304, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 227, 'title': '夜曲', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-qu', 'platform': 'Audiomack'}, {'id': 15232775, 'artwork': 'https://i.audiomack.com/hdplus/c1128d6f09.webp', 'duration': 234, 'title': '回到过去', 'artist': '周杰伦', 'album': '八度空间', 'url_slug': '15232775', 'platform': 'Audiomack'}, {'id': 11470100, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 272, 'title': '暗号.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'an-haoflac', 'platform': 'Audiomack'}, {'id': 19092291, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 297, 'title': '七里香', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qi-li-xiang', 'platform': 'Audiomack'}, {'id': 19092306, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 295, 'title': '一路向北', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yi-lu-xiang-bei', 'platform': 'Audiomack'}, {'id': 19092309, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 236, 'title': '最长的电影', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'zui-zhang-de-dian-ying', 'platform': 'Audiomack'}, {'id': 19092267, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 234, 'title': '回到过去', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'hui-dao-guo-qu', 'platform': 'Audiomack'}, {'id': 19092286, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 246, 'title': '蒲公英的约定', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'pu-gong-ying-de-yue-ding', 'platform': 'Audiomack'}] [2026-04-18 02:05:28] [0.5.1] [INFO] 172.17.0.1:41516 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=3&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:30] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:30] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:30] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:05:30] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:05:30] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 4, 'limit': 10} [2026-04-18 02:05:30] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 4, "limit": 10}, "id": "msg_1776449130398"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:30] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449130398: True [2026-04-18 02:05:30] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:05:30] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:30] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478540, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 236, 'title': '周杰伦 - 最长的电影.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-zui-chang-de-dian-yingflac', 'platform': 'Audiomack'}, {'id': 11478069, 'artwork': 'https://i.audiomack.com/younghsu/e5c079573b.webp', 'duration': 327, 'title': '周杰伦 - 轨迹.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-gui-jiflac', 'platform': 'Audiomack'}, {'id': 11478411, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 240, 'title': '周杰伦 - 青花瓷.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qing-hua-ciflac', 'platform': 'Audiomack'}, {'id': 11478752, 'artwork': 'https://i.audiomack.com/younghsu/842b5dfd74.webp', 'duration': 264, 'title': '周杰伦 - 烟花易冷.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yan-hua-yi-lengflac', 'platform': 'Audiomack'}, {'id': 19092326, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 251, 'title': '龙卷风', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'long-juan-feng', 'platform': 'Audiomack'}, {'id': 19092298, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 264, 'title': '听妈妈的话', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ting-ma-ma-de-hua', 'platform': 'Audiomack'}, {'id': 19092279, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 294, 'title': '菊花台', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ju-hua-tai', 'platform': 'Audiomack'}, {'id': 19092264, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 252, 'title': '黑色毛衣', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'hei-se-mao-yi', 'platform': 'Audiomack'}, {'id': 19616949, 'artwork': 'https://i.audiomack.com/vin-317/3b35ac7808.webp', 'duration': 273, 'title': '白色风车', 'artist': '周杰伦', 'album': '依然范特西', 'url_slug': 'bai-se-feng-che', 'platform': 'Audiomack'}, {'id': 19092303, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 241, 'title': '爷爷泡的茶', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-ye-pao-de-cha', 'platform': 'Audiomack'}, {'id': 19092302, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 263, 'title': '烟花易冷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yan-hua-yi-leng', 'platform': 'Audiomack'}, {'id': 19092299, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 260, 'title': '退后', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'tui-hou', 'platform': 'Audiomack'}, {'id': 19617141, 'artwork': 'https://i.audiomack.com/vin-317/4431559d36.webp', 'duration': 224, 'title': '稻香', 'artist': '周杰伦', 'album': '魔杰座', 'url_slug': 'dao-xiang', 'platform': 'Audiomack'}, {'id': 18980894, 'artwork': 'https://i.audiomack.com/manmyl/e856b7e593.webp', 'duration': 226, 'title': '对不起', 'artist': '周杰伦', 'album': '范特西', 'url_slug': 'dui-bu-qi', 'platform': 'Audiomack'}, {'id': 19092301, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 260, 'title': '星晴', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'xing-qing', 'platform': 'Audiomack'}, {'id': 19092297, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 242, 'title': '甜甜的', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'tian-tian-de', 'platform': 'Audiomack'}, {'id': 11478040, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 264, 'title': '彩虹', 'artist': '周杰伦', 'album': '', 'url_slug': 'cai-hong', 'platform': 'Audiomack'}, {'id': 19092082, 'artwork': 'https://i.audiomack.com/manmyl/acc0cb7bfa.webp', 'duration': 245, 'title': '最伟大的作品-FLAC', 'artist': '周杰伦', 'album': '周杰伦新专辑《最伟大的作品》完整版', 'url_slug': 'zui-wei-da-de-zuo-pin', 'platform': 'Audiomack'}, {'id': 81590103, 'artwork': 'https://i.audiomack.com/997swpnsjw/fa6f23282b.webp', 'duration': 296, 'title': '烟花易冷 R&B', 'artist': '周杰伦', 'album': '', 'url_slug': 'yan-hua-yi-leng-rb', 'platform': 'Audiomack'}, {'id': 28927973, 'artwork': 'https://i.audiomack.com/5556888/60db1e2406.webp', 'duration': 183, 'title': '圣诞星 (feat. 杨瑞代)', 'artist': '周杰伦', 'album': '圣诞星 (feat. 杨瑞代)', 'url_slug': 'sheng-dan-xing-feat-yang-rui-dai', 'platform': 'Audiomack'}] [2026-04-18 02:05:30] [0.5.1] [INFO] 172.17.0.1:41520 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=4&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:32] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:32] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:32] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:05:32] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:05:32] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 5, 'limit': 10} [2026-04-18 02:05:32] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 5, "limit": 10}, "id": "msg_1776449132488"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:32] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449132488: True [2026-04-18 02:05:32] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:05:32] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:32] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478486, 'artwork': 'https://i.audiomack.com/default-song-image.webp', 'duration': 262, 'title': '周杰伦-退后.flac', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-tui-houflac', 'platform': 'Audiomack'}, {'id': 11478369, 'artwork': 'https://i.audiomack.com/younghsu/c2023367f2.webp', 'duration': 251, 'title': '周杰伦 - 龙卷风.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-long-juan-fengflac', 'platform': 'Audiomack'}, {'id': 11478535, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 256, 'title': '周杰伦 - 园游会.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yuan-you-huiflac', 'platform': 'Audiomack'}, {'id': 11478753, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 289, 'title': '周杰伦 - 我不配.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-wo-bu-peiflac', 'platform': 'Audiomack'}, {'id': 11478073, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 253, 'title': '周杰伦 - 黑色毛衣.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hei-se-mao-yiflac', 'platform': 'Audiomack'}, {'id': 19616694, 'artwork': 'https://i.audiomack.com/vin-317/660d07d275.webp', 'duration': 241, 'title': '搁浅', 'artist': '周杰伦', 'album': '七里香', 'url_slug': 'ge-qian', 'platform': 'Audiomack'}, {'id': 19092300, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 267, 'title': '我是如此相信', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'wo-shi-ru-ci-xiang-xin', 'platform': 'Audiomack'}, {'id': 19174740, 'artwork': 'https://i.audiomack.com/manmyl/acc0cb7bfa.webp', 'duration': 266, 'title': '还在流浪', 'artist': '周杰伦', 'album': '周杰伦新专辑《最伟大的作品》完整版', 'url_slug': 'hai-zai-liu-lang', 'platform': 'Audiomack'}, {'id': 18980898, 'artwork': 'https://i.audiomack.com/manmyl/e856b7e593.webp', 'duration': 285, 'title': '开不了口', 'artist': '周杰伦', 'album': '范特西', 'url_slug': 'kai-bu-le-kou', 'platform': 'Audiomack'}, {'id': 11470065, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 281, 'title': '爱你没差.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'ai-ni-mei-chaflac', 'platform': 'Audiomack'}, {'id': 19614106, 'artwork': 'https://i.audiomack.com/vin-317/8f9700b435.webp', 'duration': 241, 'title': '爷爷泡的茶', 'artist': '周杰伦', 'album': '八度空间', 'url_slug': 'ye-ye-pao-de-cha', 'platform': 'Audiomack'}, {'id': 19174741, 'artwork': 'https://i.audiomack.com/manmyl/acc0cb7bfa.webp', 'duration': 223, 'title': '说好不哭 (with 五月天阿信)', 'artist': '周杰伦', 'album': '周杰伦新专辑《最伟大的作品》完整版', 'url_slug': 'shuo-hao-bu-ku-with-wu-yue-tian-a-xin', 'platform': 'Audiomack'}, {'id': 18980891, 'artwork': 'https://i.audiomack.com/manmyl/e856b7e593.webp', 'duration': 235, 'title': '爱在西元前', 'artist': '周杰伦', 'album': '范特西', 'url_slug': 'ai-zai-xi-yuan-qian', 'platform': 'Audiomack'}, {'id': 11478052, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 300, 'title': '发如雪.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'fa-ru-xueflac', 'platform': 'Audiomack'}, {'id': 18980931, 'artwork': 'https://i.audiomack.com/manmyl/e856b7e593.webp', 'duration': 237, 'title': '威廉古堡', 'artist': '周杰伦', 'album': '范特西', 'url_slug': 'wei-lian-gu-bao-1', 'platform': 'Audiomack'}, {'id': 19174738, 'artwork': 'https://i.audiomack.com/manmyl/acc0cb7bfa.webp', 'duration': 270, 'title': '等你下课 (with 杨瑞代)', 'artist': '周杰伦', 'album': '周杰伦新专辑《最伟大的作品》完整版', 'url_slug': 'deng-ni-xia-ke-with-yang-rui-dai-1', 'platform': 'Audiomack'}, {'id': 21809360, 'artwork': 'https://i.audiomack.com/huaijiu/d4ebd5f36f.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '11月的萧邦', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19068297, 'artwork': 'https://i.audiomack.com/manmyl/acc0cb7bfa.webp', 'duration': 284, 'title': '最伟大的作品-MV版', 'artist': '周杰伦', 'album': '周杰伦新专辑《最伟大的作品》完整版', 'url_slug': 'flac', 'platform': 'Audiomack'}, {'id': 19092308, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 254, 'title': '园游会', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yuan-you-hui', 'platform': 'Audiomack'}, {'id': 11478049, 'artwork': 'https://i.audiomack.com/younghsu/e5c079573b.webp', 'duration': 298, 'title': '断了的弦', 'artist': '周杰伦', 'album': '', 'url_slug': 'duanledexian', 'platform': 'Audiomack'}] [2026-04-18 02:05:32] [0.5.1] [INFO] 172.17.0.1:41534 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=5&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:37] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:37] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:37] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:37] [0.5.1] [INFO] 172.17.0.1:57400 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:41] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:41] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:41] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:41] [0.5.1] [INFO] 172.17.0.1:57406 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:42] [0.5.1] [INFO] 172.17.0.1:57412 - "GET /api/password/check HTTP/1.0" 200 [2026-04-18 02:05:42] [0.5.1] [INFO] 172.17.0.1:57416 - "GET /api/back-conf/load HTTP/1.0" 200 [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:42] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449142689"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:42] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449142689: True [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:05:42] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:42] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449142991"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:42] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:43] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:43] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:43] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449142991: False [2026-04-18 02:05:43] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:43] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449142.9905975, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:05:43] [0.5.1] [INFO] 172.17.0.1:57424 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:05:43] [0.5.1] [INFO] 172.17.0.1:57432 - "GET /api/plugin-source/load HTTP/1.0" 200 [2026-04-18 02:05:44] [0.5.1] [INFO] 172.17.0.1:57436 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:05:44] [0.5.1] [INFO] js_plugin_manager.py:2382: Plugin config updated for enabled plugin 聚合音源 特供版 [2026-04-18 02:05:44] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:05:44] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:05:44] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:05:44] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:05:44] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:44] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449144871"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:44] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449144871: True [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449145.1734612, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '聚合音源 特供版': {'name': '聚合音源 特供版', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:05:45] [0.5.1] [INFO] 172.17.0.1:57446 - "PUT /api/js-plugins/%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88/disable HTTP/1.0" 200 [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449145260"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449145260: True [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:05:45] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449145.5614858, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '聚合音源 特供版': {'name': '聚合音源 特供版', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:05:45] [0.5.1] [INFO] 172.17.0.1:57450 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:2327: Plugin config updated for enabled plugin 聚合音源 特供版 [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:48] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449148326"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:48] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449148326: True [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:48] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449148629"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:48] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:48] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:48] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449148629: False [2026-04-18 02:05:48] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:48] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449148.6286428, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:05:48] [0.5.1] [INFO] 172.17.0.1:36430 - "PUT /api/js-plugins/%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88/enable HTTP/1.0" 200 [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:49] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449149021"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:49] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449149021: True [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:05:49] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449149324"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:49] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:49] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:05:49] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449149324: False [2026-04-18 02:05:49] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:05:49] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449149.3228657, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:05:49] [0.5.1] [INFO] 172.17.0.1:36432 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:05:51] [0.5.1] [INFO] 172.17.0.1:36448 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:05:51] [0.5.1] [INFO] 172.17.0.1:36434 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 02:05:52] [0.5.1] [INFO] 172.17.0.1:36450 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:05:55] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:55] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:55] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:55] [0.5.1] [INFO] 172.17.0.1:36458 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:55] [0.5.1] [INFO] 27.115.124.70:60698 - "GET /static/default/index.html HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.70:60698 - "GET /static/default/materialicons.woff2 HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.101:17559 - "GET /static/default/materialiconsoutlined.woff2 HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.101:26237 - "GET /static/default/main.css?version=1775697572 HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.53:56789 - "GET /static/default/jquery-3.7.1.min.js?version=1775697572 HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.109:8155 - "GET /static/default/md.js?version=1775697572 HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.101:17559 - "GET /getsetting HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.70:60698 - "GET /getversion HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.53:56789 - "GET /musiclist HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.70:60698 - "GET /getvolume?did=web_device HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] 27.115.124.101:17559 - "GET /latestversion HTTP/1.1" 200 [2026-04-18 02:05:56] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:56] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:56] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:56] [0.5.1] [INFO] 172.17.0.1:35762 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:57] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:57] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:57] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:57] [0.5.1] [INFO] 172.17.0.1:35764 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:58] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:05:58] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:05:58] [0.5.1] [ERROR] online_music.py:751: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:05:58] [0.5.1] [INFO] 172.17.0.1:35770 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E8%81%9A%E5%90%88%E9%9F%B3%E6%BA%90%20%E7%89%B9%E4%BE%9B%E7%89%88&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:05:59] [0.5.1] [INFO] 27.115.124.38:64780 - "GET /static/default/favicon.ico HTTP/1.1" 200 [2026-04-18 02:06:00] [0.5.1] [INFO] 27.115.124.70:32115 - "GET /static/default/favicon.ico HTTP/1.1" 200 [2026-04-18 02:06:55] [0.5.1] [INFO] 172.17.0.1:54082 - "GET /api/password/check HTTP/1.0" 200 [2026-04-18 02:06:55] [0.5.1] [INFO] 172.17.0.1:54094 - "GET /api/back-conf/load HTTP/1.0" 200 [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:06:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449216037"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:06:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449216037: True [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:06:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449216339"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:06:56] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:06:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:06:56] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449216339: False [2026-04-18 02:06:56] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:06:56] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449216.3384807, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:06:56] [0.5.1] [INFO] 172.17.0.1:54104 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:06:56] [0.5.1] [INFO] 172.17.0.1:35376 - "GET /api/plugin-source/load HTTP/1.0" 200 [2026-04-18 02:06:57] [0.5.1] [INFO] 172.17.0.1:35386 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:06:59] [0.5.1] [WARNING] js_plugin_manager.py:761: Plugin 小秋音乐 already exists, will overwrite [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:778: Successfully downloaded and saved plugin: 小秋音乐 [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:2513: Plugin config updated for 小秋音乐 [2026-04-18 02:06:59] [0.5.1] [WARNING] js_plugin_manager.py:761: Plugin 小蜗音乐 already exists, will overwrite [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:778: Successfully downloaded and saved plugin: 小蜗音乐 [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:2513: Plugin config updated for 小蜗音乐 [2026-04-18 02:06:59] [0.5.1] [WARNING] js_plugin_manager.py:761: Plugin 小芸音乐 already exists, will overwrite [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:778: Successfully downloaded and saved plugin: 小芸音乐 [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:2513: Plugin config updated for 小芸音乐 [2026-04-18 02:06:59] [0.5.1] [WARNING] js_plugin_manager.py:761: Plugin 小枸音乐 already exists, will overwrite [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:778: Successfully downloaded and saved plugin: 小枸音乐 [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:2513: Plugin config updated for 小枸音乐 [2026-04-18 02:06:59] [0.5.1] [WARNING] js_plugin_manager.py:761: Plugin 小蜜音乐 already exists, will overwrite [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:778: Successfully downloaded and saved plugin: 小蜜音乐 [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:2513: Plugin config updated for 小蜜音乐 [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:06:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:06:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449219903"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449219903: True [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:00] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449220206"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:00] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449220206: False [2026-04-18 02:07:00] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449220.204859, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:07:00] [0.5.1] [INFO] 172.17.0.1:35388 - "POST /api/plugin-source/refresh HTTP/1.0" 200 [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:00] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449220604"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449220604: True [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:07:00] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:00] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449220906"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:00] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:01] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:01] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:01] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449220906: False [2026-04-18 02:07:01] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:01] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449220.905748, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'name': '小秋音乐_0.3.0_Huibq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:07:01] [0.5.1] [INFO] 172.17.0.1:35390 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:2327: Plugin config updated for enabled plugin 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449248396"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449248396: True [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:07:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449248700"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:28] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:28] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449248700: False [2026-04-18 02:07:29] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst he = require(\"he\");\nconst pageSize = 20;\nfunction formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s) => s.name).join(\", \"),\n artwork: albummid\n ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg`\n : undefined,\n album: albumname,\n lrc: _.lyric || undefined,\n albumid: albumid,\n albummid: albummid,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic ||\n `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc,\n };\n}\nfunction formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum,\n };\n}\nconst searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\",\n};\nconst headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\",\n};\nasync function searchBase(query, page, type) {\n const res = (await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: pageSize,\n page_num: page,\n query: query,\n search_type: type,\n },\n },\n },\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * pageSize,\n data: res.req_1.data.body[searchTypeMap[type]].list,\n };\n}\nasync function searchMusic(query, page) {\n const songs = await searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const albums = await searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map(formatAlbumItem),\n };\n}\nasync function searchArtist(query, page) {\n const artists = await searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map(formatArtistItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const musicSheet = await searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item) => ({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name,\n })),\n };\n}\nasync function searchLyric(query, page) {\n const songs = await searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it) => (Object.assign(Object.assign({}, formatMusicItem(it)), { rawLrcTxt: it.content }))),\n };\n}\nfunction getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) {\n s = sArr[1];\n }\n else {\n return key ? undefined : {};\n }\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item) => {\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n }\n catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction changeUrlQuery(obj, baseUrl) {\n const query = getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key) => {\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") {\n queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n }\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst typeMap = {\n m4a: {\n s: \"C400\",\n e: \".m4a\",\n },\n 128: {\n s: \"M500\",\n e: \".mp3\",\n },\n 320: {\n s: \"M800\",\n e: \".mp3\",\n },\n ape: {\n s: \"A000\",\n e: \".ape\",\n },\n flac: {\n s: \"F000\",\n e: \".flac\",\n },\n};\nasync function getAlbumInfo(albumItem) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000,\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2,\n },\n module: \"music.musichallAlbum.AlbumSongList\",\n },\n }),\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, axios_1.default)({\n url: url,\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n musicList: res.albumSonglist.data.songList\n .map((item) => {\n const _ = item.songInfo;\n return formatMusicItem(_);\n }),\n };\n}\nasync function getArtistSongs(artistItem, page) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * pageSize,\n num: pageSize,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, axios_1.default)({\n url: url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * pageSize,\n data: res.singer.data.songlist.map(formatMusicItem),\n };\n}\nasync function getArtistAlbums(artistItem, page) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * pageSize,\n num: pageSize / 1,\n exstatus: 1,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, axios_1.default)({\n url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * pageSize,\n data: res.singerAlbum.data.list.map(formatAlbumItem),\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n return getArtistSongs(artistItem, page);\n }\n if (type === \"album\") {\n return getArtistAlbums(artistItem, page);\n }\n}\nasync function getLyric(musicItem) {\n const result = (await (0, axios_1.default)({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: { Referer: \"https://y.qq.com\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) {\n translation = he.decode(CryptoJs.enc.Base64.parse(res.trans).toString(CryptoJs.enc.Utf8));\n }\n return {\n rawLrc: he.decode(CryptoJs.enc.Base64.parse(res.lyric).toString(CryptoJs.enc.Utf8)),\n translation,\n };\n}\nasync function importMusicSheet(urlLike) {\n let id;\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n }\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) ||\n [])[1];\n }\n if (!id) {\n id = (urlLike.match(/^(\\d+)$/) || [])[1];\n }\n if (!id) {\n return;\n }\n const result = (await (0, axios_1.default)({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: { Referer: \"https://y.qq.com/n/yqq/playlist\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map(formatMusicItem);\n}\nasync function getTopLists() {\n const list = await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return list.data.topList.data.group.map((e) => ({\n title: e.groupName,\n data: e.toplist.map((_) => ({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl,\n })),\n }));\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n const res = await (0, axios_1.default)({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList\n .map(formatMusicItem)\n });\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n })).data.data.categories;\n const data = res.slice(1).map((_) => ({\n title: _.categoryGroupName,\n data: _.items.map((tag) => ({\n id: tag.categoryId,\n title: tag.categoryName,\n })),\n }));\n const pinned = [];\n for (let d of data) {\n if (d.data.length) {\n pinned.push(d.data[0]);\n }\n }\n return {\n pinned,\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await axios_1.default.get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1,\n },\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item) => {\n var _a, _b;\n return ({\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\",\n });\n });\n return {\n isEnd,\n data,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const data = await importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data,\n };\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"320k\",\n super: \"320k\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/tx/${musicItem.songmid}/${qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n },\n })\n ).data;\n return {\n url: res.url,\n };\n}\nmodule.exports = {\n platform: \"\u5c0f\u79cb\u97f3\u4e50\",\n author: \"Huibq\",\n version: \"0.3.0\",\n srcUrl: \"https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/xiaoqiu.js\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n primaryKey: [\"id\", \"songmid\"],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getLyric,\n getAlbumInfo,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo,\n};\n", "id": "msg_1776449249008"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 小秋音乐_0.3.0_Huibq, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449249008: True [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449248.6981423, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'status': 'loaded', 'load_time': 1776449249.3142397, 'enabled': True}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:07:29] [0.5.1] [INFO] 172.17.0.1:42000 - "PUT /api/js-plugins/%E5%B0%8F%E7%A7%8B%E9%9F%B3%E4%B9%90_0.3.0_Huibq/enable HTTP/1.0" 200 [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776449249411"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449249411: True [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:07:29] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776449249714"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:29] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:29] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:30] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449249714: False [2026-04-18 02:07:30] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:07:30] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:30] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:07:30] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst he = require(\"he\");\nconst pageSize = 20;\nfunction formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s) => s.name).join(\", \"),\n artwork: albummid\n ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg`\n : undefined,\n album: albumname,\n lrc: _.lyric || undefined,\n albumid: albumid,\n albummid: albummid,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic ||\n `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc,\n };\n}\nfunction formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum,\n };\n}\nconst searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\",\n};\nconst headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\",\n};\nasync function searchBase(query, page, type) {\n const res = (await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: pageSize,\n page_num: page,\n query: query,\n search_type: type,\n },\n },\n },\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * pageSize,\n data: res.req_1.data.body[searchTypeMap[type]].list,\n };\n}\nasync function searchMusic(query, page) {\n const songs = await searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const albums = await searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map(formatAlbumItem),\n };\n}\nasync function searchArtist(query, page) {\n const artists = await searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map(formatArtistItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const musicSheet = await searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item) => ({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name,\n })),\n };\n}\nasync function searchLyric(query, page) {\n const songs = await searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it) => (Object.assign(Object.assign({}, formatMusicItem(it)), { rawLrcTxt: it.content }))),\n };\n}\nfunction getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) {\n s = sArr[1];\n }\n else {\n return key ? undefined : {};\n }\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item) => {\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n }\n catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction changeUrlQuery(obj, baseUrl) {\n const query = getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key) => {\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") {\n queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n }\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst typeMap = {\n m4a: {\n s: \"C400\",\n e: \".m4a\",\n },\n 128: {\n s: \"M500\",\n e: \".mp3\",\n },\n 320: {\n s: \"M800\",\n e: \".mp3\",\n },\n ape: {\n s: \"A000\",\n e: \".ape\",\n },\n flac: {\n s: \"F000\",\n e: \".flac\",\n },\n};\nasync function getAlbumInfo(albumItem) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000,\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2,\n },\n module: \"music.musichallAlbum.AlbumSongList\",\n },\n }),\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, axios_1.default)({\n url: url,\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n musicList: res.albumSonglist.data.songList\n .map((item) => {\n const _ = item.songInfo;\n return formatMusicItem(_);\n }),\n };\n}\nasync function getArtistSongs(artistItem, page) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * pageSize,\n num: pageSize,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, axios_1.default)({\n url: url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * pageSize,\n data: res.singer.data.songlist.map(formatMusicItem),\n };\n}\nasync function getArtistAlbums(artistItem, page) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * pageSize,\n num: pageSize / 1,\n exstatus: 1,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, axios_1.default)({\n url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * pageSize,\n data: res.singerAlbum.data.list.map(formatAlbumItem),\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n return getArtistSongs(artistItem, page);\n }\n if (type === \"album\") {\n return getArtistAlbums(artistItem, page);\n }\n}\nasync function getLyric(musicItem) {\n const result = (await (0, axios_1.default)({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: { Referer: \"https://y.qq.com\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) {\n translation = he.decode(CryptoJs.enc.Base64.parse(res.trans).toString(CryptoJs.enc.Utf8));\n }\n return {\n rawLrc: he.decode(CryptoJs.enc.Base64.parse(res.lyric).toString(CryptoJs.enc.Utf8)),\n translation,\n };\n}\nasync function importMusicSheet(urlLike) {\n let id;\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n }\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) ||\n [])[1];\n }\n if (!id) {\n id = (urlLike.match(/^(\\d+)$/) || [])[1];\n }\n if (!id) {\n return;\n }\n const result = (await (0, axios_1.default)({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: { Referer: \"https://y.qq.com/n/yqq/playlist\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map(formatMusicItem);\n}\nasync function getTopLists() {\n const list = await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return list.data.topList.data.group.map((e) => ({\n title: e.groupName,\n data: e.toplist.map((_) => ({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl,\n })),\n }));\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n const res = await (0, axios_1.default)({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList\n .map(formatMusicItem)\n });\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n })).data.data.categories;\n const data = res.slice(1).map((_) => ({\n title: _.categoryGroupName,\n data: _.items.map((tag) => ({\n id: tag.categoryId,\n title: tag.categoryName,\n })),\n }));\n const pinned = [];\n for (let d of data) {\n if (d.data.length) {\n pinned.push(d.data[0]);\n }\n }\n return {\n pinned,\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await axios_1.default.get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1,\n },\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item) => {\n var _a, _b;\n return ({\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\",\n });\n });\n return {\n isEnd,\n data,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const data = await importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data,\n };\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"320k\",\n super: \"320k\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/tx/${musicItem.songmid}/${qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n },\n })\n ).data;\n return {\n url: res.url,\n };\n}\nmodule.exports = {\n platform: \"\u5c0f\u79cb\u97f3\u4e50\",\n author: \"Huibq\",\n version: \"0.3.0\",\n srcUrl: \"https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/xiaoqiu.js\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n primaryKey: [\"id\", \"songmid\"],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getLyric,\n getAlbumInfo,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo,\n};\n", "id": "msg_1776449250028"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:30] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 小秋音乐_0.3.0_Huibq, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:30] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449250028: True [2026-04-18 02:07:30] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:30] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776449249.7125611, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'status': 'loaded', 'load_time': 1776449250.3301342, 'enabled': True}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:07:30] [0.5.1] [INFO] 172.17.0.1:42014 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:07:32] [0.5.1] [INFO] 172.17.0.1:42028 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 02:07:32] [0.5.1] [INFO] 172.17.0.1:42032 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:07:33] [0.5.1] [INFO] 172.17.0.1:42044 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:07:34] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:07:34] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 6} [2026-04-18 02:07:34] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 6}, "id": "msg_1776449254540"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449254540: True [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:07:34] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 6} [2026-04-18 02:07:35] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 6}, "id": "msg_1776449254942"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:35] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449254942: True [2026-04-18 02:07:35] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:07:35] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:07:35] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556362, 'songmid': '0044SaFh0apuR2', 'title': '那天下雨了', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680284, 'songmid': '0022b7OX2STU86', 'title': '我落泪情绪零碎', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177680, 'songmid': '003xv4w313tZHV', 'title': '红尘客栈', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340965, 'songmid': '004Yi5BD3ksoAN', 'title': '蒲公英的约定', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101787870, 'songmid': '002u8ZOM4C7QF4', 'title': '手写的从前', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556366, 'songmid': '003WPrjL4dimFE', 'title': '爱琴海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449201, 'songmid': '00128N3r2SYKMF', 'title': '兰亭序', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556373, 'songmid': '003FdJZH1wljMU', 'title': '西西里', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5105986, 'songmid': '001xd0HI0X9GNq', 'title': '一路向北', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002MAeob3zLXwZ.jpg', 'album': 'J III MP3 Player', 'albumid': 14311, 'albummid': '002MAeob3zLXwZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101091484, 'songmid': '004BhQke4adHcf', 'title': '给我一首歌的时间', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97761, 'songmid': '002OKIox28ad9a', 'title': '半岛铁盒', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}] [2026-04-18 02:07:35] [0.5.1] [INFO] 172.17.0.1:42058 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:07:38] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:07:38] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:07:38] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:07:38] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:07:38] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 20} [2026-04-18 02:07:38] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 20}, "id": "msg_1776449258456"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:07:38] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449258456: True [2026-04-18 02:07:38] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:07:38] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556362, 'songmid': '0044SaFh0apuR2', 'title': '那天下雨了', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680284, 'songmid': '0022b7OX2STU86', 'title': '我落泪情绪零碎', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177680, 'songmid': '003xv4w313tZHV', 'title': '红尘客栈', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340965, 'songmid': '004Yi5BD3ksoAN', 'title': '蒲公英的约定', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101787870, 'songmid': '002u8ZOM4C7QF4', 'title': '手写的从前', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556366, 'songmid': '003WPrjL4dimFE', 'title': '爱琴海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449201, 'songmid': '00128N3r2SYKMF', 'title': '兰亭序', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556373, 'songmid': '003FdJZH1wljMU', 'title': '西西里', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5105986, 'songmid': '001xd0HI0X9GNq', 'title': '一路向北', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002MAeob3zLXwZ.jpg', 'album': 'J III MP3 Player', 'albumid': 14311, 'albummid': '002MAeob3zLXwZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101091484, 'songmid': '004BhQke4adHcf', 'title': '给我一首歌的时间', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97761, 'songmid': '002OKIox28ad9a', 'title': '半岛铁盒', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}] [2026-04-18 02:07:38] [0.5.1] [INFO] 172.17.0.1:39748 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=%E5%B0%8F%E7%A7%8B%E9%9F%B3%E4%B9%90_0.3.0_Huibq&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39768 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39754 - "GET /getversion HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39774 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39800 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39812 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39820 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:45] [0.5.1] [INFO] 172.17.0.1:39832 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1NjUuNTY3NjM2NywiaWF0IjoxNzc2NDQ5MjY1LjU2NzYzNzJ9.kU6l4tfiL1p7lALkzfAjESdcudiRv_7oLrgxBTq0y-0 HTTP/1.0" 404 [2026-04-18 02:07:46] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:07:46] [0.5.1] [INFO] device_player.py:834: get_volume. volume:5 [2026-04-18 02:07:46] [0.5.1] [INFO] 172.17.0.1:39784 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:47] [0.5.1] [INFO] 172.17.0.1:57822 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:07:48] [0.5.1] [INFO] 172.17.0.1:57828 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:49] [0.5.1] [INFO] 172.17.0.1:57842 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1NjguOTY1NjQxLCJpYXQiOjE3NzY0NDkyNjguOTY1NjQxNX0.m7V1ahUsFr_v5_78Tzbd1_wQnn25sNKmygOgJvu8-dE HTTP/1.0" 404 [2026-04-18 02:07:52] [0.5.1] [INFO] 172.17.0.1:57852 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:52] [0.5.1] [INFO] 172.17.0.1:57858 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1NzIuMzQxMDY4LCJpYXQiOjE3NzY0NDkyNzIuMzQxMDY4NX0.H8Sh8RgMn9hKCPNVigeb2NoydtNoO_sLBWNisgx7LQo HTTP/1.0" 404 [2026-04-18 02:07:55] [0.5.1] [INFO] 172.17.0.1:57874 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:56] [0.5.1] [INFO] 172.17.0.1:57878 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1NzUuNzQ4NDA5MywiaWF0IjoxNzc2NDQ5Mjc1Ljc0ODQwOTd9.1kBbBKdHzVopb1HFdT7PRs34M9KyxM6h0V1VOphbc2s HTTP/1.0" 404 [2026-04-18 02:07:59] [0.5.1] [INFO] 172.17.0.1:51964 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:07:59] [0.5.1] [INFO] 172.17.0.1:51976 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1NzkuMTMzNTU5NSwiaWF0IjoxNzc2NDQ5Mjc5LjEzMzU2MDR9.6HUnxOSY84gNgrEGYLKRr5BIFyYSZJCBSsyOS9zuLYs HTTP/1.0" 404 [2026-04-18 02:08:02] [0.5.1] [INFO] 172.17.0.1:51982 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:02] [0.5.1] [INFO] 172.17.0.1:51992 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1ODIuNTM1ODgxMywiaWF0IjoxNzc2NDQ5MjgyLjUzNTg4MTh9.TQL934dVQqbPrkQZMxoBgzkA2WOZqHEWa3jbfMFd4JQ HTTP/1.0" 404 [2026-04-18 02:08:05] [0.5.1] [INFO] 172.17.0.1:52006 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:06] [0.5.1] [INFO] 172.17.0.1:52010 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1ODUuOTE1NTU5LCJpYXQiOjE3NzY0NDkyODUuOTE1NTU5OH0.WdubDTUeRjOe9hG_wNLNGxIk3KIcGiEG-3wX40NPacw HTTP/1.0" 404 [2026-04-18 02:08:09] [0.5.1] [INFO] 172.17.0.1:51710 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:09] [0.5.1] [INFO] 172.17.0.1:51716 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1ODkuMzEzMzM1NywiaWF0IjoxNzc2NDQ5Mjg5LjMxMzMzNjF9.CXLfvQYo_udIA3uiLNw5Tjb2n4cTv_1F3e_YW1RBgdY HTTP/1.0" 404 [2026-04-18 02:08:12] [0.5.1] [INFO] 172.17.0.1:51726 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:13] [0.5.1] [INFO] 172.17.0.1:51730 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1OTIuNzAzNTU4LCJpYXQiOjE3NzY0NDkyOTIuNzAzNTU4NH0.Rgs5r8MXcn1ufq0irCKgPZYhz4UL2VthaN1QGQKCPwU HTTP/1.0" 404 [2026-04-18 02:08:16] [0.5.1] [INFO] 172.17.0.1:51742 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:16] [0.5.1] [INFO] 172.17.0.1:48614 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1OTYuMTI5ODk2LCJpYXQiOjE3NzY0NDkyOTYuMTI5ODk2NH0.I1zM1SXaJahGz1KtY-MT1xejJ3cpFdZVKHaUTmuEycE HTTP/1.0" 404 [2026-04-18 02:08:19] [0.5.1] [INFO] 172.17.0.1:48616 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:19] [0.5.1] [INFO] 172.17.0.1:48632 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk1OTkuNTM3OTEyNCwiaWF0IjoxNzc2NDQ5Mjk5LjUzNzkxM30.iiLg-rdXaJFUS7ufPQUJH19x3wONPZYVZWj5t4v_v0Q HTTP/1.0" 404 [2026-04-18 02:08:23] [0.5.1] [INFO] 172.17.0.1:48646 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:23] [0.5.1] [INFO] 172.17.0.1:48656 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MDMuMDEzNzM5NiwiaWF0IjoxNzc2NDQ5MzAzLjAxMzc0MDN9.WgybCQmT6XCfPJTiMeAX0D-iHzt94eFo-R9v2IQ8t1w HTTP/1.0" 404 [2026-04-18 02:08:26] [0.5.1] [INFO] 172.17.0.1:45260 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:27] [0.5.1] [INFO] 172.17.0.1:45274 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MDYuNTIwOTkxMywiaWF0IjoxNzc2NDQ5MzA2LjUyMDk5MTh9.tz6XGNk7DFwjjERSBzA_QjXQ_0p0t0dgmupmFKLFSUs HTTP/1.0" 404 [2026-04-18 02:08:30] [0.5.1] [INFO] 172.17.0.1:45286 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:30] [0.5.1] [INFO] 172.17.0.1:45296 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MTAuMTA1MTAwNiwiaWF0IjoxNzc2NDQ5MzEwLjEwNTEwMTN9.S1q4OPI2Wcsd4BlucojcLzdHzsAo0ehhhJWE2RInBTQ HTTP/1.0" 404 [2026-04-18 02:08:33] [0.5.1] [INFO] 172.17.0.1:45310 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:34] [0.5.1] [INFO] 172.17.0.1:45314 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MTMuNjE2MDE4NSwiaWF0IjoxNzc2NDQ5MzEzLjYxNjAxOX0.PDeJBSgiw7LeN6MzjD2PWWomq9bDLyAlSq7AGZ950jk HTTP/1.0" 404 [2026-04-18 02:08:37] [0.5.1] [INFO] 172.17.0.1:52956 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:38] [0.5.1] [INFO] 172.17.0.1:52964 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MTcuNjg0ODk2LCJpYXQiOjE3NzY0NDkzMTcuNjg0ODk2N30.UeF7-QuGgeZSpo4AGg7pCYgp5oVMCVDwN0751lwp16c HTTP/1.0" 404 [2026-04-18 02:08:41] [0.5.1] [INFO] 172.17.0.1:52970 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 02:08:43] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:08:43] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:08:43] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:08:43] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:43] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=40NJ_44O-b0 [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:08:43] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:08:44] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:08:44] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:08:44] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:08:44] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=40NJ_44O-b0 [2026-04-18 02:08:45] [0.5.1] [INFO] 172.17.0.1:52974 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MjEuODgzMjc5NiwiaWF0IjoxNzc2NDQ5MzIxLjg4MzI4MDN9.n56II-H_oCmWTOFxoAqgXff2N2EeewnlepyP9VYFd4o HTTP/1.0" 404 [2026-04-18 02:08:45] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=40NJ_44O-b0 audio_id:1582971365183456177 [2026-04-18 02:08:45] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=40NJ_44O-b0 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:08:45] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:08:45] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:08:45] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:45] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=hEXdxMbHbd4 [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:519: [proxy:e0a24024] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:45] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:524: [proxy:e0a24024] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:552: [proxy:e0a24024] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:597: [proxy:e0a24024] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:08:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:08:45] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 02:08:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449325586"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:08:45] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449325586: True [2026-04-18 02:08:45] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463725&Signature=S4t89MyzFSEKYZoH4OSuh9dFedVIipSmS-kN4DG5nXUpS190T0rZiIW4SbmOZkzokncsg46tGQECb8ATeDDM5ENOUOB7F6mZCUczgwGnrCUMNKpEoVzMucV2Q1gUUPt2ABLW-WlQ~zB0jMxpBElyeMvUoDnCTyRCoN4k0woSaTE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:45] [0.5.1] [INFO] 34.21.156.125:55394 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:608: [proxy:e0a24024] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463725&Signature=S4t89MyzFSEKYZoH4OSuh9dFedVIipSmS-kN4DG5nXUpS190T0rZiIW4SbmOZkzokncsg46tGQECb8ATeDDM5ENOUOB7F6mZCUczgwGnrCUMNKpEoVzMucV2Q1gUUPt2ABLW-WlQ~zB0jMxpBElyeMvUoDnCTyRCoN4k0woSaTE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:624: [proxy:e0a24024] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463725&Signature=S4t89MyzFSEKYZoH4OSuh9dFedVIipSmS-kN4DG5nXUpS190T0rZiIW4SbmOZkzokncsg46tGQECb8ATeDDM5ENOUOB7F6mZCUczgwGnrCUMNKpEoVzMucV2Q1gUUPt2ABLW-WlQ~zB0jMxpBElyeMvUoDnCTyRCoN4k0woSaTE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:519: [proxy:6aec74de] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:45] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:524: [proxy:6aec74de] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:552: [proxy:6aec74de] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:08:45] [0.5.1] [INFO] file.py:597: [proxy:6aec74de] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:08:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:08:45] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 02:08:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449325901"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:08:46] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449325901: True [2026-04-18 02:08:46] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463726&Signature=iLe0ELEOiSI43DhOnl4se4xNPtsYZf5khWC6LvIMyJPw7hnXlxMrhBBFJ22iQ-f7cE7b37wn-4MMPfuXOBQpxkRizlyfWgXyxzWM~8nCUKgxMb4lObKIhrczQGN~cRz4YHJ7No68FPdm0F0CY2NcmXLisTic8rRQrT7H0B52eGI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:46] [0.5.1] [INFO] 34.21.156.125:55410 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:08:46] [0.5.1] [INFO] file.py:608: [proxy:6aec74de] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463726&Signature=iLe0ELEOiSI43DhOnl4se4xNPtsYZf5khWC6LvIMyJPw7hnXlxMrhBBFJ22iQ-f7cE7b37wn-4MMPfuXOBQpxkRizlyfWgXyxzWM~8nCUKgxMb4lObKIhrczQGN~cRz4YHJ7No68FPdm0F0CY2NcmXLisTic8rRQrT7H0B52eGI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:46] [0.5.1] [INFO] file.py:624: [proxy:6aec74de] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463726&Signature=iLe0ELEOiSI43DhOnl4se4xNPtsYZf5khWC6LvIMyJPw7hnXlxMrhBBFJ22iQ-f7cE7b37wn-4MMPfuXOBQpxkRizlyfWgXyxzWM~8nCUKgxMb4lObKIhrczQGN~cRz4YHJ7No68FPdm0F0CY2NcmXLisTic8rRQrT7H0B52eGI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:08:47] [0.5.1] [INFO] file.py:645: [proxy:6aec74de] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463726&Signature=iLe0ELEOiSI43DhOnl4se4xNPtsYZf5khWC6LvIMyJPw7hnXlxMrhBBFJ22iQ-f7cE7b37wn-4MMPfuXOBQpxkRizlyfWgXyxzWM~8nCUKgxMb4lObKIhrczQGN~cRz4YHJ7No68FPdm0F0CY2NcmXLisTic8rRQrT7H0B52eGI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 02:08:47] [0.5.1] [INFO] file.py:672: [proxy:6aec74de] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463726&Signature=iLe0ELEOiSI43DhOnl4se4xNPtsYZf5khWC6LvIMyJPw7hnXlxMrhBBFJ22iQ-f7cE7b37wn-4MMPfuXOBQpxkRizlyfWgXyxzWM~8nCUKgxMb4lObKIhrczQGN~cRz4YHJ7No68FPdm0F0CY2NcmXLisTic8rRQrT7H0B52eGI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:47] [0.5.1] [INFO] file.py:645: [proxy:e0a24024] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463725&Signature=S4t89MyzFSEKYZoH4OSuh9dFedVIipSmS-kN4DG5nXUpS190T0rZiIW4SbmOZkzokncsg46tGQECb8ATeDDM5ENOUOB7F6mZCUczgwGnrCUMNKpEoVzMucV2Q1gUUPt2ABLW-WlQ~zB0jMxpBElyeMvUoDnCTyRCoN4k0woSaTE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 02:08:47] [0.5.1] [INFO] file.py:672: [proxy:e0a24024] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463725&Signature=S4t89MyzFSEKYZoH4OSuh9dFedVIipSmS-kN4DG5nXUpS190T0rZiIW4SbmOZkzokncsg46tGQECb8ATeDDM5ENOUOB7F6mZCUczgwGnrCUMNKpEoVzMucV2Q1gUUPt2ABLW-WlQ~zB0jMxpBElyeMvUoDnCTyRCoN4k0woSaTE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:48] [0.5.1] [INFO] 122.96.50.157:62191 - "GET /proxy/music?token=40NJ_44O-b0 HTTP/1.1" 200 [2026-04-18 02:08:48] [0.5.1] [INFO] 34.21.156.125:55386 - "GET /proxy/music?token=hEXdxMbHbd4 HTTP/1.1" 200 [2026-04-18 02:08:48] [0.5.1] [INFO] file.py:519: [proxy:4101e5ff] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:48] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:08:48] [0.5.1] [INFO] file.py:524: [proxy:4101e5ff] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:08:48] [0.5.1] [INFO] file.py:552: [proxy:4101e5ff] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:08:48] [0.5.1] [INFO] file.py:597: [proxy:4101e5ff] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:08:48] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:08:48] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 02:08:48] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449328187"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:08:48] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449328187: True [2026-04-18 02:08:48] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463728&Signature=BDlvXhQZyezO2j32z3NVQIE1VzF8aGPxjAWcCJWEKA1S0G5WHnE~rq1ysmurYAdMNhtSTV3sbzzbpILoK~sPyRg~28E9QcWFW~83swslIHZgS2S1H6FR4ZmPmxL~AuvyQ3X9SQz8vOCYTeYGQi~xbNLgtzUk72fUJ4pb~L4qKBQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:48] [0.5.1] [INFO] 34.21.156.125:59396 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:08:48] [0.5.1] [INFO] file.py:608: [proxy:4101e5ff] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463728&Signature=BDlvXhQZyezO2j32z3NVQIE1VzF8aGPxjAWcCJWEKA1S0G5WHnE~rq1ysmurYAdMNhtSTV3sbzzbpILoK~sPyRg~28E9QcWFW~83swslIHZgS2S1H6FR4ZmPmxL~AuvyQ3X9SQz8vOCYTeYGQi~xbNLgtzUk72fUJ4pb~L4qKBQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:48] [0.5.1] [INFO] file.py:624: [proxy:4101e5ff] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463728&Signature=BDlvXhQZyezO2j32z3NVQIE1VzF8aGPxjAWcCJWEKA1S0G5WHnE~rq1ysmurYAdMNhtSTV3sbzzbpILoK~sPyRg~28E9QcWFW~83swslIHZgS2S1H6FR4ZmPmxL~AuvyQ3X9SQz8vOCYTeYGQi~xbNLgtzUk72fUJ4pb~L4qKBQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:08:48] [0.5.1] [INFO] 172.17.0.1:47706 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:49] [0.5.1] [INFO] file.py:645: [proxy:4101e5ff] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463728&Signature=BDlvXhQZyezO2j32z3NVQIE1VzF8aGPxjAWcCJWEKA1S0G5WHnE~rq1ysmurYAdMNhtSTV3sbzzbpILoK~sPyRg~28E9QcWFW~83swslIHZgS2S1H6FR4ZmPmxL~AuvyQ3X9SQz8vOCYTeYGQi~xbNLgtzUk72fUJ4pb~L4qKBQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 02:08:49] [0.5.1] [INFO] file.py:672: [proxy:4101e5ff] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776463728&Signature=BDlvXhQZyezO2j32z3NVQIE1VzF8aGPxjAWcCJWEKA1S0G5WHnE~rq1ysmurYAdMNhtSTV3sbzzbpILoK~sPyRg~28E9QcWFW~83swslIHZgS2S1H6FR4ZmPmxL~AuvyQ3X9SQz8vOCYTeYGQi~xbNLgtzUk72fUJ4pb~L4qKBQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:08:49] [0.5.1] [INFO] 34.21.156.125:59382 - "GET /proxy/music?token=hEXdxMbHbd4 HTTP/1.1" 200 [2026-04-18 02:08:50] [0.5.1] [INFO] 172.17.0.1:47714 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MjguNTE1ODg1LCJpYXQiOjE3NzY0NDkzMjguNTE1ODg1OH0.FtpdnMYfn5NxImuLCp8hlMS-6zC-HWNz8T1FLYFCoWI HTTP/1.0" 404 [2026-04-18 02:08:54] [0.5.1] [INFO] 172.17.0.1:47718 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:08:59] [0.5.1] [INFO] 172.17.0.1:48330 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2MzQuMDY3OTE0NywiaWF0IjoxNzc2NDQ5MzM0LjA2NzkxNTd9.MQXJzOzQgwzOm6hwj-rqaPxAH1wddHxX3kyuH34Wmy8 HTTP/1.0" 404 [2026-04-18 02:09:02] [0.5.1] [INFO] 172.17.0.1:48334 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:03] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpmd3y7jsg [2026-04-18 02:09:03] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "264.646500" } } [2026-04-18 02:09:03] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 264.6465 seconds for file: /tmp/tmpmd3y7jsg [2026-04-18 02:09:03] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 花海.FLAC-周杰伦 时长: 264.6465 秒 [2026-04-18 02:09:03] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 花海.FLAC-周杰伦 时长到内存: 264.6465 秒 [2026-04-18 02:09:03] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:09:03] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 17.690 秒 [2026-04-18 02:09:03] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 246.957 秒 [2026-04-18 02:09:03] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:09:03] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:09:03] [0.5.1] [INFO] device_player.py:808: 246.9567538585663 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:09:03] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:09:03] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:09:05] [0.5.1] [INFO] 172.17.0.1:48344 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2NDIuMzYwOTgxNywiaWF0IjoxNzc2NDQ5MzQyLjM2MDk4M30._zR1pqBs4F0ReFn143K-EWMc7q07rfOvCMYx-p6Yfz0 HTTP/1.0" 404 [2026-04-18 02:09:08] [0.5.1] [INFO] 172.17.0.1:53208 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:12] [0.5.1] [INFO] 172.17.0.1:53210 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2NDguOTY0NjI3NSwiaWF0IjoxNzc2NDQ5MzQ4Ljk2NDYyODJ9.t2Va3X8d_7vncHHUK0Ns_hos_sdtLyuahTTuopxwKXM HTTP/1.0" 404 [2026-04-18 02:09:16] [0.5.1] [INFO] 172.17.0.1:53214 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:20] [0.5.1] [INFO] 172.17.0.1:48896 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2NTYuMDg3MDY3LCJpYXQiOjE3NzY0NDkzNTYuMDg3MDY3Nn0.XLHstcHbE04ft4FfANgCjFUn3itz0wMUHTOj95D9Tbs HTTP/1.0" 404 [2026-04-18 02:09:23] [0.5.1] [INFO] 172.17.0.1:48904 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:27] [0.5.1] [INFO] 172.17.0.1:48538 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2NjMuMDg5MTQ2NiwiaWF0IjoxNzc2NDQ5MzYzLjA4OTE0NzN9.mCse93MRxFIsCmamGwMuJnCtMaElbMP7iZ9X_w4FAig HTTP/1.0" 404 [2026-04-18 02:09:30] [0.5.1] [INFO] 172.17.0.1:48544 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:34] [0.5.1] [INFO] 172.17.0.1:48546 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2NzAuOTc0NDU1NCwiaWF0IjoxNzc2NDQ5MzcwLjk3NDQ1NTh9.BjcWFAbgjssarJsM0i4W1RPB48uxOdBYkl_uPpcbvik HTTP/1.0" 404 [2026-04-18 02:09:37] [0.5.1] [INFO] 172.17.0.1:51940 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:41] [0.5.1] [INFO] 172.17.0.1:51952 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2NzcuODUxMTc4NiwiaWF0IjoxNzc2NDQ5Mzc3Ljg1MTE3OTR9.7BwUltMLX8hWc8oFUnKV3f8jV2WoK3JThjW7V6FiXhA HTTP/1.0" 404 [2026-04-18 02:09:44] [0.5.1] [INFO] 172.17.0.1:51964 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:48] [0.5.1] [INFO] 172.17.0.1:58512 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2ODQuNDY3NjM2OCwiaWF0IjoxNzc2NDQ5Mzg0LjQ2NzYzNzV9.REuoB1p83CV3QzagDjHo64mn2PQeq9P4tQiBD5pVplI HTTP/1.0" 404 [2026-04-18 02:09:52] [0.5.1] [INFO] 172.17.0.1:58528 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:09:55] [0.5.1] [INFO] 172.17.0.1:58544 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2OTIuMDg3ODc4NywiaWF0IjoxNzc2NDQ5MzkyLjA4Nzg3OTR9.Oju8xgqM566S9EjyUzEbbjuxfOx07vvdFKTXgWKn9Fc HTTP/1.0" 404 [2026-04-18 02:09:58] [0.5.1] [INFO] 172.17.0.1:56320 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:00] [0.5.1] [INFO] 172.17.0.1:56336 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk2OTguNDA3ODY4OSwiaWF0IjoxNzc2NDQ5Mzk4LjQwNzg2OTN9.6kHM_MTjGNhDPv5g_ndUs7ZP3PVa2hcjreYsIjxdZjE HTTP/1.0" 404 [2026-04-18 02:10:04] [0.5.1] [INFO] 172.17.0.1:56344 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:05] [0.5.1] [INFO] 172.17.0.1:56352 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3MDQuMDAwNzkyLCJpYXQiOjE3NzY0NDk0MDQuMDAwNzkzNX0.XFeUVvhod3rpuxOawAdLkNtzTj47NGiRcBHlKoDezKk HTTP/1.0" 404 [2026-04-18 02:10:09] [0.5.1] [INFO] 172.17.0.1:42206 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:14] [0.5.1] [INFO] 172.17.0.1:42222 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3MDkuMDYwOTgyNywiaWF0IjoxNzc2NDQ5NDA5LjA2MDk4MzJ9.lc6MGQy80C9D4hZush5EDldxKVeNKJdfRNMDN11Byf8 HTTP/1.0" 404 [2026-04-18 02:10:17] [0.5.1] [INFO] 172.17.0.1:46610 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:19] [0.5.1] [INFO] 172.17.0.1:46626 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3MTcuMTAxMzI0OCwiaWF0IjoxNzc2NDQ5NDE3LjEwMTMyNTV9.UDvYoQ_IwLcaycVhmYfJUx0B2ElN5EgckMQFt_xqWpY HTTP/1.0" 404 [2026-04-18 02:10:22] [0.5.1] [INFO] 172.17.0.1:46632 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:26] [0.5.1] [INFO] 172.17.0.1:52240 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3MjIuMzE3MDE3LCJpYXQiOjE3NzY0NDk0MjIuMzE3MDE3Nn0.ingg6XZ9ggqz2Di8QYfmczzvmozOMNZdpkj9e6QNY3Y HTTP/1.0" 404 [2026-04-18 02:10:29] [0.5.1] [INFO] 172.17.0.1:52254 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:31] [0.5.1] [INFO] 172.17.0.1:52266 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3MjkuODA4ODE5MywiaWF0IjoxNzc2NDQ5NDI5LjgwODgyNzJ9.9WPhjzEuskafNHNf7GNQJu83ZC34SsKmXGAgo6kUuT0 HTTP/1.0" 404 [2026-04-18 02:10:34] [0.5.1] [INFO] 172.17.0.1:52278 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:39] [0.5.1] [INFO] 172.17.0.1:40840 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3MzQuNjY3NzE1LCJpYXQiOjE3NzY0NDk0MzQuNjY3NzE1OH0.-jiErOrbebZiHEXqvx2K5iMJBAdIeqdJF04W0s3WaBM HTTP/1.0" 404 [2026-04-18 02:10:42] [0.5.1] [INFO] 172.17.0.1:40842 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:47] [0.5.1] [INFO] 172.17.0.1:33752 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3NDIuMzQ4MTM2NywiaWF0IjoxNzc2NDQ5NDQyLjM0ODEzNzF9.WtKPL0TmX7AY-VrARrz9Ke63BEfaZr8Rkf1WeS_rQwA HTTP/1.0" 404 [2026-04-18 02:10:50] [0.5.1] [INFO] 172.17.0.1:33760 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:54] [0.5.1] [INFO] 172.17.0.1:33768 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3NTAuNDA5NTU1NywiaWF0IjoxNzc2NDQ5NDUwLjQwOTU1NjR9.3zriVm2y50dXl3-BkLViCcxkzPwaQBZXRT_mlHa5hok HTTP/1.0" 404 [2026-04-18 02:10:57] [0.5.1] [INFO] 172.17.0.1:41380 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:10:59] [0.5.1] [INFO] 172.17.0.1:41390 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3NTcuMjU4OTIzOCwiaWF0IjoxNzc2NDQ5NDU3LjI1ODkyNDV9.EFZ77PsEhRQi5WGj10Q-goQMRtzkN2IKrZ53SXYZqvo HTTP/1.0" 404 [2026-04-18 02:11:02] [0.5.1] [INFO] 172.17.0.1:41404 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:05] [0.5.1] [INFO] 172.17.0.1:41406 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3NjIuNDg0Mzk3MiwiaWF0IjoxNzc2NDQ5NDYyLjQ4NDM5OH0.J7zezCDakrIGyGmr6Kvi1MKOZ_Rmh8PJ-9KsmaCVMbM HTTP/1.0" 404 [2026-04-18 02:11:08] [0.5.1] [INFO] 172.17.0.1:56272 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:10] [0.5.1] [INFO] 172.17.0.1:56278 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3NjguMjkyOTAyLCJpYXQiOjE3NzY0NDk0NjguMjkyOTAyNX0.XNhOifzfobXxCmtz_gTUfJlX9tkkSt5-lSx5xHXOjuA HTTP/1.0" 404 [2026-04-18 02:11:13] [0.5.1] [INFO] 172.17.0.1:56284 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:17] [0.5.1] [INFO] 172.17.0.1:34214 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3NzMuNTU5MDc5LCJpYXQiOjE3NzY0NDk0NzMuNTU5MDc5NH0.JKIhO05e27BWzBho4ASWFi4-0d1ME-o03rJ0sefGLQQ HTTP/1.0" 404 [2026-04-18 02:11:20] [0.5.1] [INFO] 172.17.0.1:34230 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:25] [0.5.1] [INFO] 172.17.0.1:34234 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3ODAuOTY4MDY1NywiaWF0IjoxNzc2NDQ5NDgwLjk2ODA2NjV9.NnsrvsEJcePQxVB5ch4WrhXa6DZ6b3aX9LMaCK1oHeU HTTP/1.0" 404 [2026-04-18 02:11:28] [0.5.1] [INFO] 172.17.0.1:52390 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:33] [0.5.1] [INFO] 172.17.0.1:52404 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3ODguOTY2MDgyNiwiaWF0IjoxNzc2NDQ5NDg4Ljk2NjA4M30.hP2wW2ZywaR0pXrmSYEszUYTgSFBmCVRQpSsy8mQEi0 HTTP/1.0" 404 [2026-04-18 02:11:37] [0.5.1] [INFO] 172.17.0.1:55848 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:40] [0.5.1] [INFO] 172.17.0.1:55860 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk3OTcuMDQxMDM4NSwiaWF0IjoxNzc2NDQ5NDk3LjA0MTAzOTV9._e_AFRoqwuzpWpgPbfNWsLPYOP-KNZWownxuUj3tOHk HTTP/1.0" 404 [2026-04-18 02:11:43] [0.5.1] [INFO] 172.17.0.1:55874 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:48] [0.5.1] [INFO] 172.17.0.1:36748 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4MDMuNTk1NDY5MiwiaWF0IjoxNzc2NDQ5NTAzLjU5NTQ3MDJ9.AxgulNwR6E-AMGozbiZIHc5sCw5HDSUsMJ5T2YGJ7CM HTTP/1.0" 404 [2026-04-18 02:11:51] [0.5.1] [INFO] 172.17.0.1:36762 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:11:56] [0.5.1] [INFO] 172.17.0.1:36772 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4MTEuODk3Mjc4MywiaWF0IjoxNzc2NDQ5NTExLjg5NzI3OX0.hO26P_OgEMURqd5H1M3GVjlCHPgWC4Sd3pChCCmIxj8 HTTP/1.0" 404 [2026-04-18 02:11:59] [0.5.1] [INFO] 172.17.0.1:56308 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:02] [0.5.1] [INFO] 172.17.0.1:56314 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4MTkuMjcwMDY3MiwiaWF0IjoxNzc2NDQ5NTE5LjI3MDA2OH0.SfnMY-Akm-jdirj6HNyW8suC7nPprQr87RHZ6ialayM HTTP/1.0" 404 [2026-04-18 02:12:05] [0.5.1] [INFO] 172.17.0.1:56328 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:07] [0.5.1] [INFO] 172.17.0.1:45914 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4MjUuOTE4MzcyOSwiaWF0IjoxNzc2NDQ5NTI1LjkxODM3MzN9.Qb5t5p8gtDMZywddh-QwFXh7TcdX5VhNxBA6M-tP6-Q HTTP/1.0" 404 [2026-04-18 02:12:10] [0.5.1] [INFO] 172.17.0.1:45926 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:15] [0.5.1] [INFO] 172.17.0.1:45942 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4MzAuNjYxNzk2NiwiaWF0IjoxNzc2NDQ5NTMwLjY2MTc5N30.sH15IcjwymgX50dLsujpmlb7Qa_8SUxJbOxSTsCZejA HTTP/1.0" 404 [2026-04-18 02:12:18] [0.5.1] [INFO] 172.17.0.1:37028 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:21] [0.5.1] [INFO] 172.17.0.1:37034 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4MzguNTI4Njk1LCJpYXQiOjE3NzY0NDk1MzguNTI4Njk2fQ.am8KQLYhGRtA50YHmrpGiX0RYSSDVkI7EEcap96qtc0 HTTP/1.0" 404 [2026-04-18 02:12:24] [0.5.1] [INFO] 172.17.0.1:37038 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:30] [0.5.1] [INFO] 172.17.0.1:45626 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4NDQuNzk2MjE1LCJpYXQiOjE3NzY0NDk1NDQuNzk2MjE1NX0.EAs0Ln_WzLDBxo53Fe3qfPun4S19saUPjgafvHHaqvA HTTP/1.0" 404 [2026-04-18 02:12:33] [0.5.1] [INFO] 172.17.0.1:45634 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:36] [0.5.1] [INFO] 172.17.0.1:58240 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4NTMuMTAzNzI2LCJpYXQiOjE3NzY0NDk1NTMuMTAzNzI2OX0.B5xRJmMqy2rFD1WPIqXTfSbvxsdky1LPw6ruQLBthqc HTTP/1.0" 404 [2026-04-18 02:12:39] [0.5.1] [INFO] 172.17.0.1:58256 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:43] [0.5.1] [INFO] 172.17.0.1:58264 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4NTkuNDQ4MTA1LCJpYXQiOjE3NzY0NDk1NTkuNDQ4MTA1OH0.anQM-WXs03dQohSQbHhmx7uE-mPns1zKpIJ_2kS_mB4 HTTP/1.0" 404 [2026-04-18 02:12:46] [0.5.1] [INFO] 172.17.0.1:53802 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:49] [0.5.1] [INFO] 172.17.0.1:53806 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4NjYuNzc4MzE5NiwiaWF0IjoxNzc2NDQ5NTY2Ljc3ODMyfQ.1Lm9zpY2_pNvMK_uHQDBaTzs4oJGGvURUfzLaCnvVcU HTTP/1.0" 404 [2026-04-18 02:12:52] [0.5.1] [INFO] 172.17.0.1:53808 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:12:55] [0.5.1] [INFO] 172.17.0.1:53816 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4NzIuMzA1Mzk4NywiaWF0IjoxNzc2NDQ5NTcyLjMwNTM5OTd9._wA-VFaiCoEd_B4xjXrrQN_fuqywz4vOv1Ks3K1eecY HTTP/1.0" 404 [2026-04-18 02:12:58] [0.5.1] [INFO] 172.17.0.1:37186 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:01] [0.5.1] [INFO] 172.17.0.1:37196 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4NzguMjczOTEzOSwiaWF0IjoxNzc2NDQ5NTc4LjI3MzkxNDN9.oTS_pHnu1Pk28v991dWWGSxjaEQdOhFCmenGYGc0gLQ HTTP/1.0" 404 [2026-04-18 02:13:04] [0.5.1] [INFO] 172.17.0.1:37208 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:09] [0.5.1] [INFO] 172.17.0.1:59948 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4ODQuNDY3MjE4LCJpYXQiOjE3NzY0NDk1ODQuNDY3MjE4NH0.8P_QvxDe9mdkUXXF9ycNEkwakQi8D2SvlFlGe1rdn0A HTTP/1.0" 404 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 02:13:10] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 02:13:10] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 02:13:10] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:13:10] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:10] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=VSHnFvDECxA [2026-04-18 02:13:10] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:13:11] [0.5.1] [INFO] 172.17.0.1:59958 - "GET / HTTP/1.0" 200 [2026-04-18 02:13:11] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:13:11] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:13:12] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:13:12] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:13:12] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=VSHnFvDECxA [2026-04-18 02:13:12] [0.5.1] [INFO] 172.17.0.1:59974 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:13] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=VSHnFvDECxA audio_id:1582971365183456177 [2026-04-18 02:13:13] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=VSHnFvDECxA ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:13:13] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:13:13] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:13:13] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:13] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=O_yeL5cHSXk [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:519: [proxy:8800229d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:524: [proxy:8800229d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:552: [proxy:8800229d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:597: [proxy:8800229d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:13:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:13:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 02:13:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449593136"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:13:13] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449593136: True [2026-04-18 02:13:13] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:13] [0.5.1] [INFO] 34.21.156.125:46176 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:608: [proxy:8800229d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:624: [proxy:8800229d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:519: [proxy:bcae9ab1] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:524: [proxy:bcae9ab1] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:552: [proxy:bcae9ab1] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:597: [proxy:bcae9ab1] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:13:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:13:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 02:13:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449593650"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:13:13] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449593650: True [2026-04-18 02:13:13] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:13] [0.5.1] [INFO] 34.21.156.125:46192 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:608: [proxy:bcae9ab1] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:13] [0.5.1] [INFO] file.py:624: [proxy:bcae9ab1] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:13:14] [0.5.1] [INFO] 172.17.0.1:59982 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4OTIuNzQyNDkzNCwiaWF0IjoxNzc2NDQ5NTkyLjc0MjQ5NH0.IsG8TkEMfneJgpeJEuH7OTMts1W4sqjzjt1nqs0tc84 HTTP/1.0" 404 [2026-04-18 02:13:14] [0.5.1] [INFO] file.py:645: [proxy:8800229d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 02:13:14] [0.5.1] [INFO] file.py:672: [proxy:8800229d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:15] [0.5.1] [INFO] file.py:645: [proxy:bcae9ab1] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 02:13:15] [0.5.1] [INFO] file.py:672: [proxy:bcae9ab1] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463993&Signature=DuT6PQOSGp5zRpR3cW~k7zV4YHDskNDBLILos4d1fENgr~ZZ2QlhjpVw8ikQt7gzcqGxZ41kJ~B0nb3FlLOvmLRqokNS9vzqi-I~amW3TtVUQrQqWQ~-yvZhaup83VArqiwhx5I3pA6pOFCN1NhuXQz-125GKWBxKIydkzwMygA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:16] [0.5.1] [INFO] 34.21.156.125:46174 - "GET /proxy/music?token=O_yeL5cHSXk HTTP/1.1" 200 [2026-04-18 02:13:16] [0.5.1] [INFO] file.py:519: [proxy:f354682d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:16] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:13:16] [0.5.1] [INFO] file.py:524: [proxy:f354682d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:13:16] [0.5.1] [INFO] file.py:552: [proxy:f354682d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:13:16] [0.5.1] [INFO] file.py:597: [proxy:f354682d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:13:16] [0.5.1] [INFO] 122.97.136.182:45349 - "GET /proxy/music?token=VSHnFvDECxA HTTP/1.1" 200 [2026-04-18 02:13:16] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:13:16] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 02:13:16] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449596133"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:13:16] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449596133: True [2026-04-18 02:13:16] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463996&Signature=g69nmj1WQgOu20EQs-3jBsndjV81W7QtSnClyztgOjp32vpiItNorqonV9hOG0oJLCgJ~jDH02FMMObYzF6WPSSe9AzxdwwwZZVGVlfUTLMGQqYjK8txrJj7Bi~LGyQXrc9NHMp2cEx7AQPt4ad-3xyrOqrGWisWVst8RbxCPEg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:16] [0.5.1] [INFO] 34.21.156.125:46198 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:13:16] [0.5.1] [INFO] file.py:608: [proxy:f354682d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463996&Signature=g69nmj1WQgOu20EQs-3jBsndjV81W7QtSnClyztgOjp32vpiItNorqonV9hOG0oJLCgJ~jDH02FMMObYzF6WPSSe9AzxdwwwZZVGVlfUTLMGQqYjK8txrJj7Bi~LGyQXrc9NHMp2cEx7AQPt4ad-3xyrOqrGWisWVst8RbxCPEg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:16] [0.5.1] [INFO] file.py:624: [proxy:f354682d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463996&Signature=g69nmj1WQgOu20EQs-3jBsndjV81W7QtSnClyztgOjp32vpiItNorqonV9hOG0oJLCgJ~jDH02FMMObYzF6WPSSe9AzxdwwwZZVGVlfUTLMGQqYjK8txrJj7Bi~LGyQXrc9NHMp2cEx7AQPt4ad-3xyrOqrGWisWVst8RbxCPEg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:13:17] [0.5.1] [INFO] file.py:645: [proxy:f354682d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463996&Signature=g69nmj1WQgOu20EQs-3jBsndjV81W7QtSnClyztgOjp32vpiItNorqonV9hOG0oJLCgJ~jDH02FMMObYzF6WPSSe9AzxdwwwZZVGVlfUTLMGQqYjK8txrJj7Bi~LGyQXrc9NHMp2cEx7AQPt4ad-3xyrOqrGWisWVst8RbxCPEg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 02:13:17] [0.5.1] [INFO] file.py:672: [proxy:f354682d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776463996&Signature=g69nmj1WQgOu20EQs-3jBsndjV81W7QtSnClyztgOjp32vpiItNorqonV9hOG0oJLCgJ~jDH02FMMObYzF6WPSSe9AzxdwwwZZVGVlfUTLMGQqYjK8txrJj7Bi~LGyQXrc9NHMp2cEx7AQPt4ad-3xyrOqrGWisWVst8RbxCPEg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:13:17] [0.5.1] [INFO] 172.17.0.1:43582 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:17] [0.5.1] [INFO] 34.21.156.125:46196 - "GET /proxy/music?token=O_yeL5cHSXk HTTP/1.1" 200 [2026-04-18 02:13:20] [0.5.1] [INFO] 172.17.0.1:43598 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk4OTcuNTEwOTEzNiwiaWF0IjoxNzc2NDQ5NTk3LjUxMDkxNDN9.IFZNhhdbf7eI5j__9SIBViQTrZhvAkCRj20ndYk2APs HTTP/1.0" 404 [2026-04-18 02:13:23] [0.5.1] [INFO] 172.17.0.1:43604 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:26] [0.5.1] [INFO] 172.17.0.1:46912 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MDMuMTY0Mzk3NSwiaWF0IjoxNzc2NDQ5NjAzLjE2NDM5ODR9.L5TR5wtZOXBQsFRE1z_eza166n3_2-gIj_7m_rVKZzc HTTP/1.0" 404 [2026-04-18 02:13:29] [0.5.1] [INFO] 172.17.0.1:46924 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:33] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpkhugbl4h [2026-04-18 02:13:33] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "295.732188" } } [2026-04-18 02:13:33] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 295.732188 seconds for file: /tmp/tmpkhugbl4h [2026-04-18 02:13:33] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 一路向北.FLAC-周杰伦 时长: 295.732188 秒 [2026-04-18 02:13:33] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 一路向北.FLAC-周杰伦 时长到内存: 295.732188 秒 [2026-04-18 02:13:33] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:13:33] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 20.165 秒 [2026-04-18 02:13:33] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 275.567 秒 [2026-04-18 02:13:33] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:13:33] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:13:33] [0.5.1] [INFO] device_player.py:808: 275.5671124594574 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:13:33] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:13:33] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:13:33] [0.5.1] [INFO] 172.17.0.1:46928 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MDkuNDAxMjg2LCJpYXQiOjE3NzY0NDk2MDkuNDAxMjg2NH0.TqsK5ftdqIPDS5fTKIMVmyQbWh38TTN8FyYS_7O2_1o HTTP/1.0" 404 [2026-04-18 02:13:36] [0.5.1] [INFO] 172.17.0.1:37474 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:40] [0.5.1] [INFO] 172.17.0.1:37490 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MTYuNzAwODk5LCJpYXQiOjE3NzY0NDk2MTYuNzAwODk5Nn0.5EAjlnQ4jISvtQJgQGgo5c0mwtV7wZx1Di6i00BZC9I HTTP/1.0" 404 [2026-04-18 02:13:43] [0.5.1] [INFO] 172.17.0.1:37498 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:45] [0.5.1] [INFO] 172.17.0.1:37512 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MjMuMjU1NzgyNiwiaWF0IjoxNzc2NDQ5NjIzLjI1NTc4MzN9.ojhPpXpDwn6B3ULctnBMPGb5MrarcXapGrWhuLp-FDM HTTP/1.0" 404 [2026-04-18 02:13:48] [0.5.1] [INFO] 172.17.0.1:51956 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:48] [0.5.1] [INFO] 172.17.0.1:51958 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MjguNTEzODA0LCJpYXQiOjE3NzY0NDk2MjguNTEzODA0NH0.JaBkl3yJJBSRZ_I4YxeDIO-7DWihbx94GqwWHxUwa1M HTTP/1.0" 404 [2026-04-18 02:13:51] [0.5.1] [INFO] 172.17.0.1:51966 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:52] [0.5.1] [INFO] 172.17.0.1:51978 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MzEuOTAzMDE5NCwiaWF0IjoxNzc2NDQ5NjMxLjkwMzAyMDR9.7ufvmTKhYtSW0vYde1I2k3XKVPxqybFXupcwBMpQYoU HTTP/1.0" 404 [2026-04-18 02:13:55] [0.5.1] [INFO] 172.17.0.1:51994 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:55] [0.5.1] [INFO] 172.17.0.1:52006 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MzUuMjg0MzQyOCwiaWF0IjoxNzc2NDQ5NjM1LjI4NDM0MzV9.72ULHN_qt6Dp_4nVtSYQbEMKST7nCkvCBwirBO79Yug HTTP/1.0" 404 [2026-04-18 02:13:58] [0.5.1] [INFO] 172.17.0.1:34786 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:13:58] [0.5.1] [INFO] 172.17.0.1:34800 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5MzguNjc2ODU3LCJpYXQiOjE3NzY0NDk2MzguNjc2ODU3N30.K7eOZ_MKVOinH9EoBjeB3nuzYhlrOjdDf8jn8-ADajg HTTP/1.0" 404 [2026-04-18 02:14:02] [0.5.1] [INFO] 172.17.0.1:34814 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:02] [0.5.1] [INFO] 172.17.0.1:34828 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NDIuMDU0OTIzOCwiaWF0IjoxNzc2NDQ5NjQyLjA1NDkyNDJ9.Tp1k1C8f3bUshx5xI7fOObqOEyVFeKCXy8DlAQdynYk HTTP/1.0" 404 [2026-04-18 02:14:05] [0.5.1] [INFO] 172.17.0.1:34836 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:05] [0.5.1] [INFO] 172.17.0.1:34842 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NDUuNDQzOTE2OCwiaWF0IjoxNzc2NDQ5NjQ1LjQ0MzkxNzN9.Sh8eb8Jszy76YGCXs88by9mnm9S7cmx_EI9ZSgAHrCw HTTP/1.0" 404 [2026-04-18 02:14:08] [0.5.1] [INFO] 172.17.0.1:47950 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:09] [0.5.1] [INFO] 172.17.0.1:47954 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NDguODM3NTQ5LCJpYXQiOjE3NzY0NDk2NDguODM3NTV9.R3HKT9jf4ozHQAx-w5dOk5L038AEPZBL9qryQ1jTYH8 HTTP/1.0" 404 [2026-04-18 02:14:12] [0.5.1] [INFO] 172.17.0.1:47958 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:12] [0.5.1] [INFO] 172.17.0.1:47972 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NTIuMjI2NjM2MiwiaWF0IjoxNzc2NDQ5NjUyLjIyNjYzNzF9.0LYhq5N4_o7CWgNQJLueiVqO0w-CnKWJzuBFIXdaiX0 HTTP/1.0" 404 [2026-04-18 02:14:15] [0.5.1] [INFO] 172.17.0.1:47976 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:15] [0.5.1] [INFO] 172.17.0.1:47980 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NTUuNjY2MDQ2MSwiaWF0IjoxNzc2NDQ5NjU1LjY2NjA0Njl9.EDuVTK_s_G_OTHzlhPbzAtEDFyR_UodiTm_B-xGr3lM HTTP/1.0" 404 [2026-04-18 02:14:19] [0.5.1] [INFO] 172.17.0.1:60076 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:19] [0.5.1] [INFO] 172.17.0.1:60082 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NTkuMDU2MzEwMiwiaWF0IjoxNzc2NDQ5NjU5LjA1NjMxMX0._RSp_a7F0QGc6kL6VUoJaUWokj9A3r52nK3N776709M HTTP/1.0" 404 [2026-04-18 02:14:22] [0.5.1] [INFO] 172.17.0.1:60098 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:22] [0.5.1] [INFO] 172.17.0.1:60102 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NjIuNDc4ODI3NSwiaWF0IjoxNzc2NDQ5NjYyLjQ3ODgyODR9.V4N0r12pBbcWtJQkfh8UwkfOiS1Ryxvas6sgdIoInrc HTTP/1.0" 404 [2026-04-18 02:14:25] [0.5.1] [INFO] 172.17.0.1:60104 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:26] [0.5.1] [INFO] 172.17.0.1:47468 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NjUuOTI2NTg2NCwiaWF0IjoxNzc2NDQ5NjY1LjkyNjU4Njl9.am-Ge4X8bwASiZXRVB8V6WT5_H3qb4jJh9O3jzv4IK4 HTTP/1.0" 404 [2026-04-18 02:14:29] [0.5.1] [INFO] 172.17.0.1:47476 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:29] [0.5.1] [INFO] 172.17.0.1:47484 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NjkuMzg1OTU1MywiaWF0IjoxNzc2NDQ5NjY5LjM4NTk1NTh9.wg530slwVjnlt5u7khTLQ7aQNPX_KAmNRmluxBGoz4g HTTP/1.0" 404 [2026-04-18 02:14:33] [0.5.1] [INFO] 172.17.0.1:47486 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:33] [0.5.1] [INFO] 172.17.0.1:47500 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NzMuMDU5ODI1MiwiaWF0IjoxNzc2NDQ5NjczLjA1OTgyNTd9.P6s8w6orFJ_S3eZNXBcJzHx2L_u3zL6dbW5wpnUxKyg HTTP/1.0" 404 [2026-04-18 02:14:37] [0.5.1] [INFO] 172.17.0.1:60088 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:37] [0.5.1] [INFO] 172.17.0.1:60090 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5NzcuMDMzODIxMywiaWF0IjoxNzc2NDQ5Njc3LjAzMzgyMjN9.zYaEgzawFMN_UwlUQiiHAOJsEFZ08nz4QbCaMYxXEhA HTTP/1.0" 404 [2026-04-18 02:14:41] [0.5.1] [INFO] 172.17.0.1:60094 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:43] [0.5.1] [INFO] 172.17.0.1:60110 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5ODEuMDE1NDY1MywiaWF0IjoxNzc2NDQ5NjgxLjAxNTQ2Nn0.pNyuvQF0vg6hi_gpa9cee0FAFkaC3DONv_MRAVuSyDU HTTP/1.0" 404 [2026-04-18 02:14:46] [0.5.1] [INFO] 172.17.0.1:53054 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:50] [0.5.1] [INFO] 172.17.0.1:53062 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5ODYuNDYyODc1NiwiaWF0IjoxNzc2NDQ5Njg2LjQ2Mjg3NjN9.SfL8cKtHrKhQQP_mDnQMlRL-wxDFcnTbCb91EYx6AD4 HTTP/1.0" 404 [2026-04-18 02:14:53] [0.5.1] [INFO] 172.17.0.1:53064 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:14:57] [0.5.1] [INFO] 172.17.0.1:48934 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NDk5OTMuMzY0MDAwOCwiaWF0IjoxNzc2NDQ5NjkzLjM2NDAwMTV9.2_NMRuO4TYW_lS5muTuFxLpOs4JwoO0A_HTE73u8VuE HTTP/1.0" 404 [2026-04-18 02:15:00] [0.5.1] [INFO] 172.17.0.1:48936 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:02] [0.5.1] [INFO] 172.17.0.1:48938 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwMDAuMjMzMjQ3NSwiaWF0IjoxNzc2NDQ5NzAwLjIzMzI0OH0.2aiN0R_7bIaIwbvXFGaoIRDrZ9Tz0xnONd2W2AaUuk8 HTTP/1.0" 404 [2026-04-18 02:15:05] [0.5.1] [INFO] 172.17.0.1:48946 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:09] [0.5.1] [INFO] 172.17.0.1:52408 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwMDUuMDk1MDA3NCwiaWF0IjoxNzc2NDQ5NzA1LjA5NTAwOH0.IH53qmB96oX9jlqGezWJlVhydZACAIwyknkAWGOnCek HTTP/1.0" 404 [2026-04-18 02:15:12] [0.5.1] [INFO] 172.17.0.1:52416 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:16] [0.5.1] [INFO] 172.17.0.1:54684 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwMTIuMjE2NjE4NSwiaWF0IjoxNzc2NDQ5NzEyLjIxNjYxOX0.1gzG2klqEoRRnSzMJr4zIgXLppdTV0-oLIHw4vlH6us HTTP/1.0" 404 [2026-04-18 02:15:19] [0.5.1] [INFO] 172.17.0.1:54700 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:24] [0.5.1] [INFO] 172.17.0.1:54712 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwMTkuNDE3MDYzMiwiaWF0IjoxNzc2NDQ5NzE5LjQxNzA2NH0.7VFXdTFY-hSgnz6QR4rMNG9l3KUMQwyefSN6nlCbPcI HTTP/1.0" 404 [2026-04-18 02:15:27] [0.5.1] [INFO] 172.17.0.1:41752 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:32] [0.5.1] [INFO] 172.17.0.1:41768 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwMjcuNDYzMDU2LCJpYXQiOjE3NzY0NDk3MjcuNDYzMDU2Nn0.SbrcZQX325kIzGfd7oZ4X01Fr8SsmSOzafwowbUqEbM HTTP/1.0" 404 [2026-04-18 02:15:35] [0.5.1] [INFO] 172.17.0.1:41776 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:38] [0.5.1] [INFO] 172.17.0.1:45244 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwMzUuMjUzNTA3OSwiaWF0IjoxNzc2NDQ5NzM1LjI1MzUwODZ9.K7wAQqUePDj73N-cBnlfUMM4XqyGlFuDH6tYV195ygw HTTP/1.0" 404 [2026-04-18 02:15:41] [0.5.1] [INFO] 172.17.0.1:45260 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:43] [0.5.1] [INFO] 172.17.0.1:45268 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNDEuNTA1MTc3LCJpYXQiOjE3NzY0NDk3NDEuNTA1MTc3NX0.DwUld5rcoZrYk-Qlrm1RCd2EF7eRgKRzFJVwwAPb7oo HTTP/1.0" 404 [2026-04-18 02:15:46] [0.5.1] [INFO] 172.17.0.1:55480 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:49] [0.5.1] [INFO] 172.17.0.1:55496 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNDYuNTUyNjU5MywiaWF0IjoxNzc2NDQ5NzQ2LjU1MjY2fQ.LggqRRa1GeZte8Vus3xjNAXYfXJA4LyTqrRiZO94ZmI HTTP/1.0" 404 [2026-04-18 02:15:53] [0.5.1] [INFO] 172.17.0.1:55500 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:15:55] [0.5.1] [INFO] 172.17.0.1:55504 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNTMuMDA1MDM2LCJpYXQiOjE3NzY0NDk3NTMuMDA1MDM2OH0.iYRvDClH2JQZ6tBaHaUKStFBuu-qnKItkSDaMTrACv0 HTTP/1.0" 404 [2026-04-18 02:15:58] [0.5.1] [INFO] 172.17.0.1:47360 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:02] [0.5.1] [INFO] 172.17.0.1:47372 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNTguNTg0ODQyNCwiaWF0IjoxNzc2NDQ5NzU4LjU4NDg0M30.sCLEbQ8n5gHfhOBfiw6ZNu53RHbZ60Zq7DOnhTC1vHg HTTP/1.0" 404 [2026-04-18 02:16:05] [0.5.1] [INFO] 172.17.0.1:47378 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:06] [0.5.1] [INFO] 172.17.0.1:48236 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNjUuMTg3MjUwOSwiaWF0IjoxNzc2NDQ5NzY1LjE4NzI1MTh9.hICC3_YZd36JQohbx6CxOoRLHP9imDNcMz4EFVhSKDo HTTP/1.0" 404 [2026-04-18 02:16:09] [0.5.1] [INFO] 172.17.0.1:48246 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:14] [0.5.1] [INFO] 172.17.0.1:48258 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNjkuOTE2MjI2MSwiaWF0IjoxNzc2NDQ5NzY5LjkxNjIyNjZ9.5XzEVe_aTdiVqRwR8Y74FhHQsGPoCTV29kdlVNMA4g8 HTTP/1.0" 404 [2026-04-18 02:16:17] [0.5.1] [INFO] 172.17.0.1:45246 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:18] [0.5.1] [INFO] 172.17.0.1:45262 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwNzcuMjIzNTUyMiwiaWF0IjoxNzc2NDQ5Nzc3LjIyMzU1M30.8fqs06W8NRFTQcm5nKP6zQ5cBwJ3-GzrPBcKOiMc4ro HTTP/1.0" 404 [2026-04-18 02:16:21] [0.5.1] [INFO] 172.17.0.1:45276 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:25] [0.5.1] [INFO] 172.17.0.1:45280 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwODEuOTA4MzMzNSwiaWF0IjoxNzc2NDQ5NzgxLjkwODMzNDN9.GyPEnOneAAxz_raCy17LFD3zoGRtCg8xayNAVxpiylA HTTP/1.0" 404 [2026-04-18 02:16:28] [0.5.1] [INFO] 172.17.0.1:35204 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:30] [0.5.1] [INFO] 172.17.0.1:35218 - "GET / HTTP/1.0" 200 [2026-04-18 02:16:33] [0.5.1] [INFO] 172.17.0.1:35234 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwODguMzMzOTcwNSwiaWF0IjoxNzc2NDQ5Nzg4LjMzMzk3MX0.K0GVBIemySNbPIz0ANCLuFdcQm1G9fEbSO-Uf0U-Ebc HTTP/1.0" 404 [2026-04-18 02:16:36] [0.5.1] [INFO] 172.17.0.1:36438 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:40] [0.5.1] [INFO] 172.17.0.1:36450 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAwOTYuNjAyNzk2NiwiaWF0IjoxNzc2NDQ5Nzk2LjYwMjc5N30.T_wo12Wz-SclqFI5_QKpJwxeUQ_eZOAqT0ZljhD1aoI HTTP/1.0" 404 [2026-04-18 02:16:43] [0.5.1] [INFO] 172.17.0.1:36452 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:46] [0.5.1] [INFO] 172.17.0.1:44940 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAxMDMuMjY2ODk1OCwiaWF0IjoxNzc2NDQ5ODAzLjI2Njg5N30.-Agzi2-vnJ_A-4Wk0MXXLZY3FCDnPci0sXLYN2bFcQo HTTP/1.0" 404 [2026-04-18 02:16:49] [0.5.1] [INFO] 172.17.0.1:44948 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:53] [0.5.1] [INFO] 172.17.0.1:44956 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAxMDkuMzUxNDgxNywiaWF0IjoxNzc2NDQ5ODA5LjM1MTQ4MjJ9.9-uXALg0uI0E_yCdLiEjJj2NC9ffauDfRFT2dAhP_P4 HTTP/1.0" 404 [2026-04-18 02:16:56] [0.5.1] [INFO] 172.17.0.1:44968 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:16:58] [0.5.1] [INFO] 172.17.0.1:48904 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAxMTYuMTQ0NDEwNiwiaWF0IjoxNzc2NDQ5ODE2LjE0NDQxMX0.mzGbkBhV1voGzFUblyIuxx2ZQ9qQ8o6KQDdx6Jz18Iw HTTP/1.0" 404 [2026-04-18 02:17:01] [0.5.1] [INFO] 172.17.0.1:48910 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:17:04] [0.5.1] [INFO] 172.17.0.1:48920 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAxMjEuOTIzNTc2NiwiaWF0IjoxNzc2NDQ5ODIxLjkyMzU3N30.QLL7M2rJ_dDVB8tlV0Ls0wuSgzjlYEaVwiRvNhM_grk HTTP/1.0" 404 [2026-04-18 02:17:08] [0.5.1] [INFO] 172.17.0.1:37264 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:17:10] [0.5.1] [INFO] 172.17.0.1:37266 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTAxMjguMDI1ODgwMywiaWF0IjoxNzc2NDQ5ODI4LjAyNTg4MX0.hS9Pqvbn_WBl-bxprhbhqLSlg9xunZxUsuGTmwNpQ6g HTTP/1.0" 404 [2026-04-18 02:17:13] [0.5.1] [INFO] 172.17.0.1:37280 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:17:16] [0.5.1] [INFO] 172.17.0.1:59606 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 02:18:08] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 02:18:08] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 02:18:08] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:18:08] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:08] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=baYQNoHbjf8 [2026-04-18 02:18:08] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:18:09] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:18:09] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:18:10] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:18:10] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:18:10] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=baYQNoHbjf8 [2026-04-18 02:18:11] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=baYQNoHbjf8 audio_id:1582971365183456177 [2026-04-18 02:18:11] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=baYQNoHbjf8 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:18:11] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:18:11] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:18:11] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:11] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=NDVxhzm5XsI [2026-04-18 02:18:11] [0.5.1] [INFO] file.py:519: [proxy:e8488915] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:11] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:18:11] [0.5.1] [INFO] file.py:524: [proxy:e8488915] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:11] [0.5.1] [INFO] file.py:552: [proxy:e8488915] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:18:11] [0.5.1] [INFO] file.py:597: [proxy:e8488915] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:18:11] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:18:11] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 02:18:11] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449891746"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:18:12] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449891746: True [2026-04-18 02:18:12] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464291&Signature=RGQNcmbjnulLyQ-wbMZn3f6iTmQDqMWrNS1AwsOS1MjbmUyQLrLJlUhkCmWInRim3RfLq0Bf~EljfK6KgHV6N9T0Dc6zG4yae4Cb2KdNLyn9bVJDfTDtdosb~czDzA1iHJRia1Ubi0GVS9vKspL1nW-U6j0bVYKOXmRkkMK7yys_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:12] [0.5.1] [INFO] 34.21.156.125:39750 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:608: [proxy:e8488915] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464291&Signature=RGQNcmbjnulLyQ-wbMZn3f6iTmQDqMWrNS1AwsOS1MjbmUyQLrLJlUhkCmWInRim3RfLq0Bf~EljfK6KgHV6N9T0Dc6zG4yae4Cb2KdNLyn9bVJDfTDtdosb~czDzA1iHJRia1Ubi0GVS9vKspL1nW-U6j0bVYKOXmRkkMK7yys_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:624: [proxy:e8488915] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464291&Signature=RGQNcmbjnulLyQ-wbMZn3f6iTmQDqMWrNS1AwsOS1MjbmUyQLrLJlUhkCmWInRim3RfLq0Bf~EljfK6KgHV6N9T0Dc6zG4yae4Cb2KdNLyn9bVJDfTDtdosb~czDzA1iHJRia1Ubi0GVS9vKspL1nW-U6j0bVYKOXmRkkMK7yys_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:519: [proxy:f59fd9e0] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:12] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:524: [proxy:f59fd9e0] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:552: [proxy:f59fd9e0] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:597: [proxy:f59fd9e0] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:18:12] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:18:12] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 02:18:12] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449892060"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:18:12] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449892060: True [2026-04-18 02:18:12] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464292&Signature=R4b4AyQmbCUq6WwRSq0lGLkpAzsroVL5gbX39DJCBD6Ty31apDPNm7KYY1PTdEx~dI2lP92xRQHkXsDIRbyELtrH5-CwzSn~Sbwje7fY7lobl~9iJsP~HzjbTVEPx7UNvlIY1EYq5c87hpSayhWRxEtL1076~VIskcze2KH26lY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:12] [0.5.1] [INFO] 34.21.156.125:39766 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:608: [proxy:f59fd9e0] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464292&Signature=R4b4AyQmbCUq6WwRSq0lGLkpAzsroVL5gbX39DJCBD6Ty31apDPNm7KYY1PTdEx~dI2lP92xRQHkXsDIRbyELtrH5-CwzSn~Sbwje7fY7lobl~9iJsP~HzjbTVEPx7UNvlIY1EYq5c87hpSayhWRxEtL1076~VIskcze2KH26lY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:12] [0.5.1] [INFO] file.py:624: [proxy:f59fd9e0] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464292&Signature=R4b4AyQmbCUq6WwRSq0lGLkpAzsroVL5gbX39DJCBD6Ty31apDPNm7KYY1PTdEx~dI2lP92xRQHkXsDIRbyELtrH5-CwzSn~Sbwje7fY7lobl~9iJsP~HzjbTVEPx7UNvlIY1EYq5c87hpSayhWRxEtL1076~VIskcze2KH26lY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:18:13] [0.5.1] [INFO] file.py:645: [proxy:e8488915] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464291&Signature=RGQNcmbjnulLyQ-wbMZn3f6iTmQDqMWrNS1AwsOS1MjbmUyQLrLJlUhkCmWInRim3RfLq0Bf~EljfK6KgHV6N9T0Dc6zG4yae4Cb2KdNLyn9bVJDfTDtdosb~czDzA1iHJRia1Ubi0GVS9vKspL1nW-U6j0bVYKOXmRkkMK7yys_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 02:18:13] [0.5.1] [INFO] file.py:672: [proxy:e8488915] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464291&Signature=RGQNcmbjnulLyQ-wbMZn3f6iTmQDqMWrNS1AwsOS1MjbmUyQLrLJlUhkCmWInRim3RfLq0Bf~EljfK6KgHV6N9T0Dc6zG4yae4Cb2KdNLyn9bVJDfTDtdosb~czDzA1iHJRia1Ubi0GVS9vKspL1nW-U6j0bVYKOXmRkkMK7yys_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:13] [0.5.1] [INFO] file.py:645: [proxy:f59fd9e0] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464292&Signature=R4b4AyQmbCUq6WwRSq0lGLkpAzsroVL5gbX39DJCBD6Ty31apDPNm7KYY1PTdEx~dI2lP92xRQHkXsDIRbyELtrH5-CwzSn~Sbwje7fY7lobl~9iJsP~HzjbTVEPx7UNvlIY1EYq5c87hpSayhWRxEtL1076~VIskcze2KH26lY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 02:18:13] [0.5.1] [INFO] file.py:672: [proxy:f59fd9e0] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464292&Signature=R4b4AyQmbCUq6WwRSq0lGLkpAzsroVL5gbX39DJCBD6Ty31apDPNm7KYY1PTdEx~dI2lP92xRQHkXsDIRbyELtrH5-CwzSn~Sbwje7fY7lobl~9iJsP~HzjbTVEPx7UNvlIY1EYq5c87hpSayhWRxEtL1076~VIskcze2KH26lY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:14] [0.5.1] [INFO] 122.96.50.157:6608 - "GET /proxy/music?token=baYQNoHbjf8 HTTP/1.1" 200 [2026-04-18 02:18:14] [0.5.1] [INFO] 34.21.156.125:39738 - "GET /proxy/music?token=NDVxhzm5XsI HTTP/1.1" 200 [2026-04-18 02:18:14] [0.5.1] [INFO] file.py:519: [proxy:6df7fb81] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:14] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:18:14] [0.5.1] [INFO] file.py:524: [proxy:6df7fb81] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:18:14] [0.5.1] [INFO] file.py:552: [proxy:6df7fb81] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:18:14] [0.5.1] [INFO] file.py:597: [proxy:6df7fb81] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:18:14] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:18:14] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 02:18:14] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776449894427"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:18:14] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776449894427: True [2026-04-18 02:18:14] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464294&Signature=T79T-8YJwokiZlvPXKtJhf3K4CCHW6ULE85x~qWp5nDhoVT6VrEgt9PT~1oHUvLcFp~U6DBg6yfeqDcIkj9oLzWT1iNWq2Es-W-2Ei10vQk1TQ-efMjSBuFFD5Uq6NhY7FGDtgWxS1dJJdVphLIKE1s~S6GpfHCrisjgD8iSWfs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:14] [0.5.1] [INFO] 34.21.156.125:39780 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:18:14] [0.5.1] [INFO] file.py:608: [proxy:6df7fb81] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464294&Signature=T79T-8YJwokiZlvPXKtJhf3K4CCHW6ULE85x~qWp5nDhoVT6VrEgt9PT~1oHUvLcFp~U6DBg6yfeqDcIkj9oLzWT1iNWq2Es-W-2Ei10vQk1TQ-efMjSBuFFD5Uq6NhY7FGDtgWxS1dJJdVphLIKE1s~S6GpfHCrisjgD8iSWfs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:14] [0.5.1] [INFO] file.py:624: [proxy:6df7fb81] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464294&Signature=T79T-8YJwokiZlvPXKtJhf3K4CCHW6ULE85x~qWp5nDhoVT6VrEgt9PT~1oHUvLcFp~U6DBg6yfeqDcIkj9oLzWT1iNWq2Es-W-2Ei10vQk1TQ-efMjSBuFFD5Uq6NhY7FGDtgWxS1dJJdVphLIKE1s~S6GpfHCrisjgD8iSWfs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:18:15] [0.5.1] [INFO] file.py:645: [proxy:6df7fb81] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464294&Signature=T79T-8YJwokiZlvPXKtJhf3K4CCHW6ULE85x~qWp5nDhoVT6VrEgt9PT~1oHUvLcFp~U6DBg6yfeqDcIkj9oLzWT1iNWq2Es-W-2Ei10vQk1TQ-efMjSBuFFD5Uq6NhY7FGDtgWxS1dJJdVphLIKE1s~S6GpfHCrisjgD8iSWfs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 02:18:15] [0.5.1] [INFO] file.py:672: [proxy:6df7fb81] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776464294&Signature=T79T-8YJwokiZlvPXKtJhf3K4CCHW6ULE85x~qWp5nDhoVT6VrEgt9PT~1oHUvLcFp~U6DBg6yfeqDcIkj9oLzWT1iNWq2Es-W-2Ei10vQk1TQ-efMjSBuFFD5Uq6NhY7FGDtgWxS1dJJdVphLIKE1s~S6GpfHCrisjgD8iSWfs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:18:16] [0.5.1] [INFO] 34.21.156.125:39778 - "GET /proxy/music?token=NDVxhzm5XsI HTTP/1.1" 200 [2026-04-18 02:18:29] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpkr83d3fi [2026-04-18 02:18:29] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "254.014688" } } [2026-04-18 02:18:29] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 254.014688 seconds for file: /tmp/tmpkr83d3fi [2026-04-18 02:18:29] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 兰亭序.FLAC-周杰伦 时长: 254.014688 秒 [2026-04-18 02:18:29] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 兰亭序.FLAC-周杰伦 时长到内存: 254.014688 秒 [2026-04-18 02:18:29] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:18:29] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 17.613 秒 [2026-04-18 02:18:29] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 236.401 秒 [2026-04-18 02:18:29] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:18:29] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:18:29] [0.5.1] [INFO] device_player.py:808: 236.4014811365967 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:18:29] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:18:29] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:19:39] [0.5.1] [INFO] 172.17.0.1:39108 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 02:19:57] [0.5.1] [INFO] 172.17.0.1:59656 - "GET / HTTP/1.0" 200 [2026-04-18 02:20:00] [0.5.1] [INFO] 172.17.0.1:59662 - "GET / HTTP/1.0" 200 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 02:22:25] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 02:22:25] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 02:22:25] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:22:25] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:25] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=ucPoaBMcDhE [2026-04-18 02:22:25] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:22:26] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:22:27] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:22:27] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:22:27] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:22:27] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=ucPoaBMcDhE [2026-04-18 02:22:28] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=ucPoaBMcDhE audio_id:1582971365183456177 [2026-04-18 02:22:28] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=ucPoaBMcDhE ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:22:28] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:22:28] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:22:28] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:28] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=_qoar-4wKMU [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:519: [proxy:d0f00bac] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:28] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:524: [proxy:d0f00bac] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:552: [proxy:d0f00bac] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:597: [proxy:d0f00bac] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:22:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:22:28] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 02:22:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450148558"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:22:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450148558: True [2026-04-18 02:22:28] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:28] [0.5.1] [INFO] 34.21.156.125:52098 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:608: [proxy:d0f00bac] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:624: [proxy:d0f00bac] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:519: [proxy:63af2177] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:28] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:524: [proxy:63af2177] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:552: [proxy:63af2177] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:22:28] [0.5.1] [INFO] file.py:597: [proxy:63af2177] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:22:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:22:28] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 02:22:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450148874"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:22:29] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450148874: True [2026-04-18 02:22:29] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:29] [0.5.1] [INFO] 34.21.156.125:52110 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:22:29] [0.5.1] [INFO] file.py:608: [proxy:63af2177] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:29] [0.5.1] [INFO] file.py:624: [proxy:63af2177] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:22:30] [0.5.1] [INFO] file.py:645: [proxy:d0f00bac] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 02:22:30] [0.5.1] [INFO] file.py:672: [proxy:d0f00bac] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:30] [0.5.1] [INFO] file.py:645: [proxy:63af2177] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 02:22:30] [0.5.1] [INFO] file.py:672: [proxy:63af2177] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464548&Signature=Ooe8qqs-QxSw0lWzWGJDqr9tZDbkwQ1JVfK4khz0pC5HFm32HaaTyxeE8dUesjtEXagqVQ3nZJUbl4NoduvlLnL66QcKIVkip2y5nSNB~2A4gaty0~6RW-ZgrQMtiWxlfI7GHAeN99nciGGasgH3uf1~Lh5C6fv6xGcVe2pzDyg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:31] [0.5.1] [INFO] 122.96.50.157:11478 - "GET /proxy/music?token=ucPoaBMcDhE HTTP/1.1" 200 [2026-04-18 02:22:31] [0.5.1] [INFO] 34.21.156.125:52090 - "GET /proxy/music?token=_qoar-4wKMU HTTP/1.1" 200 [2026-04-18 02:22:31] [0.5.1] [INFO] file.py:519: [proxy:9fbe8d0e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:31] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:22:31] [0.5.1] [INFO] file.py:524: [proxy:9fbe8d0e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:22:31] [0.5.1] [INFO] file.py:552: [proxy:9fbe8d0e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:22:31] [0.5.1] [INFO] file.py:597: [proxy:9fbe8d0e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:22:31] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:22:31] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 02:22:31] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450151296"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:22:31] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450151296: True [2026-04-18 02:22:31] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464551&Signature=XwcGtrAchOdlLXOZkGFw5wYAES-vWWqppxfTmwC-t3kZ2OX29gsP1sD4W0yTZfdwooGu466MV42qnOu0PoxgSKLczWIrDOx6MHkA0nxlN0g5fFs-JhKsMqe1o9DRvfNGPwT~GFfqHxI4ch30Iub6jya~qdyp2-i6wKkhZR7ruOE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:31] [0.5.1] [INFO] 34.21.156.125:52124 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:22:31] [0.5.1] [INFO] file.py:608: [proxy:9fbe8d0e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464551&Signature=XwcGtrAchOdlLXOZkGFw5wYAES-vWWqppxfTmwC-t3kZ2OX29gsP1sD4W0yTZfdwooGu466MV42qnOu0PoxgSKLczWIrDOx6MHkA0nxlN0g5fFs-JhKsMqe1o9DRvfNGPwT~GFfqHxI4ch30Iub6jya~qdyp2-i6wKkhZR7ruOE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:31] [0.5.1] [INFO] file.py:624: [proxy:9fbe8d0e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464551&Signature=XwcGtrAchOdlLXOZkGFw5wYAES-vWWqppxfTmwC-t3kZ2OX29gsP1sD4W0yTZfdwooGu466MV42qnOu0PoxgSKLczWIrDOx6MHkA0nxlN0g5fFs-JhKsMqe1o9DRvfNGPwT~GFfqHxI4ch30Iub6jya~qdyp2-i6wKkhZR7ruOE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:22:32] [0.5.1] [INFO] file.py:645: [proxy:9fbe8d0e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464551&Signature=XwcGtrAchOdlLXOZkGFw5wYAES-vWWqppxfTmwC-t3kZ2OX29gsP1sD4W0yTZfdwooGu466MV42qnOu0PoxgSKLczWIrDOx6MHkA0nxlN0g5fFs-JhKsMqe1o9DRvfNGPwT~GFfqHxI4ch30Iub6jya~qdyp2-i6wKkhZR7ruOE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 02:22:32] [0.5.1] [INFO] file.py:672: [proxy:9fbe8d0e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776464551&Signature=XwcGtrAchOdlLXOZkGFw5wYAES-vWWqppxfTmwC-t3kZ2OX29gsP1sD4W0yTZfdwooGu466MV42qnOu0PoxgSKLczWIrDOx6MHkA0nxlN0g5fFs-JhKsMqe1o9DRvfNGPwT~GFfqHxI4ch30Iub6jya~qdyp2-i6wKkhZR7ruOE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:22:33] [0.5.1] [INFO] 34.21.156.125:52122 - "GET /proxy/music?token=_qoar-4wKMU HTTP/1.1" 200 [2026-04-18 02:22:49] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpbd78wd4f [2026-04-18 02:22:49] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "342.047313" } } [2026-04-18 02:22:49] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 342.047313 seconds for file: /tmp/tmpbd78wd4f [2026-04-18 02:22:49] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 以父之名.FLAC-周杰伦 时长: 342.047313 秒 [2026-04-18 02:22:49] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 以父之名.FLAC-周杰伦 时长到内存: 342.047313 秒 [2026-04-18 02:22:49] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:22:49] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 20.707 秒 [2026-04-18 02:22:49] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 321.340 秒 [2026-04-18 02:22:49] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:22:49] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:22:49] [0.5.1] [INFO] device_player.py:808: 321.3404331457977 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:22:49] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:22:49] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:23:54] [0.5.1] [INFO] 172.17.0.1:45026 - "GET / HTTP/1.0" 200 [2026-04-18 02:27:23] [0.5.1] [INFO] 172.17.0.1:42930 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 02:28:10] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 02:28:10] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 02:28:10] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:28:10] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:10] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=OMXY8FsVVPc [2026-04-18 02:28:10] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:28:12] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:28:12] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:28:13] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:28:13] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:28:13] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=OMXY8FsVVPc [2026-04-18 02:28:14] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=OMXY8FsVVPc audio_id:1582971365183456177 [2026-04-18 02:28:14] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=OMXY8FsVVPc ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:28:14] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:28:14] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:28:14] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:14] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=cVmPPr-DOvU [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:519: [proxy:dfdc13d7] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:14] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:524: [proxy:dfdc13d7] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:552: [proxy:dfdc13d7] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:597: [proxy:dfdc13d7] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:28:14] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:28:14] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 02:28:14] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450494051"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:28:14] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450494051: True [2026-04-18 02:28:14] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:14] [0.5.1] [INFO] 34.21.156.125:54974 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:608: [proxy:dfdc13d7] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:624: [proxy:dfdc13d7] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:519: [proxy:68ebe430] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:14] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:524: [proxy:68ebe430] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:552: [proxy:68ebe430] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:597: [proxy:68ebe430] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:28:14] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:28:14] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 02:28:14] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450494366"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:28:14] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450494366: True [2026-04-18 02:28:14] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:14] [0.5.1] [INFO] 34.21.156.125:54976 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:608: [proxy:68ebe430] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:14] [0.5.1] [INFO] file.py:624: [proxy:68ebe430] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:28:15] [0.5.1] [INFO] file.py:645: [proxy:68ebe430] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 02:28:15] [0.5.1] [INFO] file.py:672: [proxy:68ebe430] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:15] [0.5.1] [INFO] file.py:645: [proxy:dfdc13d7] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 02:28:15] [0.5.1] [INFO] file.py:672: [proxy:dfdc13d7] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464894&Signature=b8DaeyiSvfbvr8pNboOIBSWZjPlLqNV2LKSOwkrqyM6jqtFSZ-NRjsioy3gEE9nVDqu9hHJ~yr7GP4M2BIeO61H03Cdl7~OwmzXEXkVXsj6fHaljFmwxoWtK~j2ODHk-v4R4In5JAG-YypddBekHMrsl95RxNySrMx1lSObnM5o_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:16] [0.5.1] [INFO] 122.97.136.182:41745 - "GET /proxy/music?token=OMXY8FsVVPc HTTP/1.1" 200 [2026-04-18 02:28:16] [0.5.1] [INFO] 34.21.156.125:54970 - "GET /proxy/music?token=cVmPPr-DOvU HTTP/1.1" 200 [2026-04-18 02:28:16] [0.5.1] [INFO] file.py:519: [proxy:170549c8] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:16] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:28:16] [0.5.1] [INFO] file.py:524: [proxy:170549c8] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:28:16] [0.5.1] [INFO] file.py:552: [proxy:170549c8] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:28:16] [0.5.1] [INFO] file.py:597: [proxy:170549c8] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:28:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:28:17] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 02:28:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450497003"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:28:17] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450497003: True [2026-04-18 02:28:17] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464897&Signature=IOqzYI4qOYEZYPJgPH04EaGGg1WcwVgD5xUANj-BnRT2fCpHviSjz1e-9lSyNna0B6v6WPUHbvpQXV3XRcWZwkvZwF3OBXU4EzWRwLCmO~vf1JemXvtSdmN6UDTtCM1YJY1Je-6Wc9I2EBS6ka~y7K5RjoZnkue6phTDW9bL7Gs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:17] [0.5.1] [INFO] 34.21.156.125:44854 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:28:17] [0.5.1] [INFO] file.py:608: [proxy:170549c8] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464897&Signature=IOqzYI4qOYEZYPJgPH04EaGGg1WcwVgD5xUANj-BnRT2fCpHviSjz1e-9lSyNna0B6v6WPUHbvpQXV3XRcWZwkvZwF3OBXU4EzWRwLCmO~vf1JemXvtSdmN6UDTtCM1YJY1Je-6Wc9I2EBS6ka~y7K5RjoZnkue6phTDW9bL7Gs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:17] [0.5.1] [INFO] file.py:624: [proxy:170549c8] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464897&Signature=IOqzYI4qOYEZYPJgPH04EaGGg1WcwVgD5xUANj-BnRT2fCpHviSjz1e-9lSyNna0B6v6WPUHbvpQXV3XRcWZwkvZwF3OBXU4EzWRwLCmO~vf1JemXvtSdmN6UDTtCM1YJY1Je-6Wc9I2EBS6ka~y7K5RjoZnkue6phTDW9bL7Gs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:28:18] [0.5.1] [INFO] file.py:645: [proxy:170549c8] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464897&Signature=IOqzYI4qOYEZYPJgPH04EaGGg1WcwVgD5xUANj-BnRT2fCpHviSjz1e-9lSyNna0B6v6WPUHbvpQXV3XRcWZwkvZwF3OBXU4EzWRwLCmO~vf1JemXvtSdmN6UDTtCM1YJY1Je-6Wc9I2EBS6ka~y7K5RjoZnkue6phTDW9bL7Gs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 02:28:18] [0.5.1] [INFO] file.py:672: [proxy:170549c8] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776464897&Signature=IOqzYI4qOYEZYPJgPH04EaGGg1WcwVgD5xUANj-BnRT2fCpHviSjz1e-9lSyNna0B6v6WPUHbvpQXV3XRcWZwkvZwF3OBXU4EzWRwLCmO~vf1JemXvtSdmN6UDTtCM1YJY1Je-6Wc9I2EBS6ka~y7K5RjoZnkue6phTDW9bL7Gs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:28:18] [0.5.1] [INFO] 34.21.156.125:44840 - "GET /proxy/music?token=cVmPPr-DOvU HTTP/1.1" 200 [2026-04-18 02:28:30] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpmxgfe6rl [2026-04-18 02:28:30] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "228.675875" } } [2026-04-18 02:28:30] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 228.675875 seconds for file: /tmp/tmpmxgfe6rl [2026-04-18 02:28:30] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 夜的第七章.FLAC-周杰伦 时长: 228.675875 秒 [2026-04-18 02:28:30] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 夜的第七章.FLAC-周杰伦 时长到内存: 228.675875 秒 [2026-04-18 02:28:30] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:28:30] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 16.331 秒 [2026-04-18 02:28:30] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 212.345 秒 [2026-04-18 02:28:30] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:28:30] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:28:30] [0.5.1] [INFO] device_player.py:808: 212.34533148193358 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:28:30] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:28:30] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 明明就.FLAC-周杰伦 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 明明就.FLAC-周杰伦, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 明明就.FLAC-周杰伦 allow_download:True [2026-04-18 02:32:02] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 明明就.FLAC-周杰伦】找到歌曲【['周杰伦 - 明明就.FLAC-周杰伦']】 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 明明就.FLAC-周杰伦'] 1 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 明明就.FLAC-周杰伦 [2026-04-18 02:32:02] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 明明就.FLAC-周杰伦 [2026-04-18 02:32:02] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:32:02] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 明明就.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:02] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=oLbzMkx_aVo [2026-04-18 02:32:02] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:32:03] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:32:03] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 5, "loop_type": 1 }'}} [2026-04-18 02:32:04] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:32:04] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:32:04] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=oLbzMkx_aVo [2026-04-18 02:32:05] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=oLbzMkx_aVo audio_id:1582971365183456177 [2026-04-18 02:32:05] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=oLbzMkx_aVo ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:32:05] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 明明就.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:32:05] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:32:05] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 明明就.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:05] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=FegZ4SXNOhA [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:519: [proxy:d2f1dfc2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:05] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:524: [proxy:d2f1dfc2] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:552: [proxy:d2f1dfc2] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:597: [proxy:d2f1dfc2] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:32:05] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:32:05] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'} [2026-04-18 02:32:05] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478382, "artwork": "https://i.audiomack.com/younghsu/72dae5b8c6.webp", "duration": 261, "title": "\u5468\u6770\u4f26 - \u660e\u660e\u5c31.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ming-ming-jiuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450725380"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:32:05] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450725380: True [2026-04-18 02:32:05] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:05] [0.5.1] [INFO] 34.21.156.125:33846 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:608: [proxy:d2f1dfc2] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:624: [proxy:d2f1dfc2] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:519: [proxy:6f40ddfc] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:05] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:524: [proxy:6f40ddfc] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:552: [proxy:6f40ddfc] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:32:05] [0.5.1] [INFO] file.py:597: [proxy:6f40ddfc] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:32:05] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:32:05] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'} [2026-04-18 02:32:05] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478382, "artwork": "https://i.audiomack.com/younghsu/72dae5b8c6.webp", "duration": 261, "title": "\u5468\u6770\u4f26 - \u660e\u660e\u5c31.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ming-ming-jiuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450725695"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:32:05] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450725695: True [2026-04-18 02:32:05] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:05] [0.5.1] [INFO] 34.21.156.125:33858 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:32:06] [0.5.1] [INFO] file.py:608: [proxy:6f40ddfc] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:06] [0.5.1] [INFO] file.py:624: [proxy:6f40ddfc] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:32:07] [0.5.1] [INFO] file.py:645: [proxy:6f40ddfc] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8379827 [2026-04-18 02:32:07] [0.5.1] [INFO] file.py:672: [proxy:6f40ddfc] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:07] [0.5.1] [INFO] file.py:645: [proxy:d2f1dfc2] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8379827 [2026-04-18 02:32:07] [0.5.1] [INFO] file.py:672: [proxy:d2f1dfc2] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465125&Signature=Gi2P~9qHJzd9jvtqYkC2U232yYxvyApCFw6pWXMoPDuMa3x2SkyWRyZprBbY~--S2dV4l~HHglnVAI2xc~UBD3bqL-aNLnwQB3fg7TFwgeET0zM7qtE78vP4Hmf04A~GEz-eAsgNT7ZsH~zgf6BsxEoUFqf2auNHwpHQs3FQw2g_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:08] [0.5.1] [INFO] 34.21.156.125:33834 - "GET /proxy/music?token=FegZ4SXNOhA HTTP/1.1" 200 [2026-04-18 02:32:08] [0.5.1] [INFO] 122.96.50.157:17129 - "GET /proxy/music?token=oLbzMkx_aVo HTTP/1.1" 200 [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:519: [proxy:a82d1e9a] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:08] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:524: [proxy:a82d1e9a] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:552: [proxy:a82d1e9a] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:597: [proxy:a82d1e9a] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:32:08] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:32:08] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'} [2026-04-18 02:32:08] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478382, "artwork": "https://i.audiomack.com/younghsu/72dae5b8c6.webp", "duration": 261, "title": "\u5468\u6770\u4f26 - \u660e\u660e\u5c31.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ming-ming-jiuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450728069"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:32:08] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450728069: True [2026-04-18 02:32:08] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465128&Signature=HsLdsyD8lASGRNEcJXt-uLRAVCRappl~0tJm3WR7e-9HESbHklactrOPoAnVwK5TvLwkREtTHIVnu0h2SHarCMPkyqWy1xcw9vtlKpf1MNKrXavd8445uKfpglY4DZBQrtCuIRUyvMOx0-ejXCviprK7nTgEx3fJNk0OFGnlMT4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:08] [0.5.1] [INFO] 34.21.156.125:49222 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:608: [proxy:a82d1e9a] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzgyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS83MmRhZTViOGM2LndlYnAiLCAiZHVyYXRpb24iOiAyNjEsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTY2MGVcdTY2MGVcdTVjMzEuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbWluZy1taW5nLWppdWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465128&Signature=HsLdsyD8lASGRNEcJXt-uLRAVCRappl~0tJm3WR7e-9HESbHklactrOPoAnVwK5TvLwkREtTHIVnu0h2SHarCMPkyqWy1xcw9vtlKpf1MNKrXavd8445uKfpglY4DZBQrtCuIRUyvMOx0-ejXCviprK7nTgEx3fJNk0OFGnlMT4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:624: [proxy:a82d1e9a] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465128&Signature=HsLdsyD8lASGRNEcJXt-uLRAVCRappl~0tJm3WR7e-9HESbHklactrOPoAnVwK5TvLwkREtTHIVnu0h2SHarCMPkyqWy1xcw9vtlKpf1MNKrXavd8445uKfpglY4DZBQrtCuIRUyvMOx0-ejXCviprK7nTgEx3fJNk0OFGnlMT4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:645: [proxy:a82d1e9a] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465128&Signature=HsLdsyD8lASGRNEcJXt-uLRAVCRappl~0tJm3WR7e-9HESbHklactrOPoAnVwK5TvLwkREtTHIVnu0h2SHarCMPkyqWy1xcw9vtlKpf1MNKrXavd8445uKfpglY4DZBQrtCuIRUyvMOx0-ejXCviprK7nTgEx3fJNk0OFGnlMT4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8379827 [2026-04-18 02:32:08] [0.5.1] [INFO] file.py:672: [proxy:a82d1e9a] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ming-ming-jiuflac__1665069739.m4a?Expires=1776465128&Signature=HsLdsyD8lASGRNEcJXt-uLRAVCRappl~0tJm3WR7e-9HESbHklactrOPoAnVwK5TvLwkREtTHIVnu0h2SHarCMPkyqWy1xcw9vtlKpf1MNKrXavd8445uKfpglY4DZBQrtCuIRUyvMOx0-ejXCviprK7nTgEx3fJNk0OFGnlMT4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:32:09] [0.5.1] [INFO] 34.21.156.125:49206 - "GET /proxy/music?token=FegZ4SXNOhA HTTP/1.1" 200 [2026-04-18 02:32:22] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpbgqs62br [2026-04-18 02:32:22] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "260.414688" } } [2026-04-18 02:32:22] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 260.414688 seconds for file: /tmp/tmpbgqs62br [2026-04-18 02:32:22] [0.5.1] [INFO] music_library.py:838: 网络音乐 周杰伦 - 明明就.FLAC-周杰伦 时长: 260.414688 秒 [2026-04-18 02:32:22] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 周杰伦 - 明明就.FLAC-周杰伦 时长到内存: 260.414688 秒 [2026-04-18 02:32:22] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:32:22] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 16.749 秒 [2026-04-18 02:32:22] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 260.415 秒, 调整后定时器时长: 243.665 秒 [2026-04-18 02:32:22] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:32:22] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:32:22] [0.5.1] [INFO] device_player.py:808: 243.6652916758423 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:32:22] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:32:22] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 明明就.FLAC-周杰伦 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 02:36:25] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 02:36:25] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 02:36:25] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:36:25] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:36:25] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=wedYlEqiuCI [2026-04-18 02:36:25] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:36:26] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:36:26] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 6, "loop_type": 1 }'}} [2026-04-18 02:36:26] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:36:26] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=wedYlEqiuCI [2026-04-18 02:36:28] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=wedYlEqiuCI audio_id:1582971365183456177 [2026-04-18 02:36:28] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=wedYlEqiuCI ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:36:28] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 02:36:28] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:36:28] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:36:28] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=WWZ-Exfn2oo [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:519: [proxy:38c5815d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 02:36:28] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:524: [proxy:38c5815d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:552: [proxy:38c5815d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:597: [proxy:38c5815d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:36:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:36:28] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 02:36:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450988044"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:36:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450988044: True [2026-04-18 02:36:28] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:28] [0.5.1] [INFO] 34.21.156.125:40364 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:608: [proxy:38c5815d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:624: [proxy:38c5815d] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:519: [proxy:e41fc2e6] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 02:36:28] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:524: [proxy:e41fc2e6] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:552: [proxy:e41fc2e6] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:597: [proxy:e41fc2e6] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:36:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:36:28] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 02:36:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450988430"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:36:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450988430: True [2026-04-18 02:36:28] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:28] [0.5.1] [INFO] 34.21.156.125:40366 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:608: [proxy:e41fc2e6] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:28] [0.5.1] [INFO] file.py:624: [proxy:e41fc2e6] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:36:29] [0.5.1] [INFO] file.py:645: [proxy:38c5815d] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 02:36:29] [0.5.1] [INFO] file.py:672: [proxy:38c5815d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:29] [0.5.1] [INFO] file.py:645: [proxy:e41fc2e6] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 02:36:29] [0.5.1] [INFO] file.py:672: [proxy:e41fc2e6] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465388&Signature=d4ue7opYUewr2KhxT~i0LzkkqPkp0HCvDUQFQS57Y7PGHPbph8j8WdZzB3cVDFpsuoVa~NWRc-v7Z8fxC4RejHRavxXmo3qknvVfMNMM1IvFVkqfP1F0GoCjNm9gmV0-dqkBnuGXAvgf9utjbR8ZGkkPxnSt2ojPBKZB6fDDbic_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:31] [0.5.1] [INFO] 34.21.156.125:40356 - "GET /proxy/music?token=WWZ-Exfn2oo HTTP/1.1" 200 [2026-04-18 02:36:31] [0.5.1] [INFO] file.py:519: [proxy:711e68cd] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 02:36:31] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:36:31] [0.5.1] [INFO] file.py:524: [proxy:711e68cd] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 02:36:31] [0.5.1] [INFO] file.py:552: [proxy:711e68cd] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:36:31] [0.5.1] [INFO] file.py:597: [proxy:711e68cd] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:36:31] [0.5.1] [INFO] 122.97.136.182:23227 - "GET /proxy/music?token=wedYlEqiuCI HTTP/1.1" 200 [2026-04-18 02:36:31] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:36:31] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 02:36:31] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776450991318"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:36:31] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776450991318: True [2026-04-18 02:36:31] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465391&Signature=HWqftoVg4pJ9l4M65nsXS-q7idpwHy~ycBtnJSZSiltA3Vqpg6waZLXWpV30kxVjEL2LAFWO5IoESJLH3yO92lfZ~0gsS5-uY4Jw4SM0AtCbZi2QUSrBQyJZLm31tFjfoKdPR2Sa3-jgEmcDBF~4cj01pr1uIABDufLzhf4MCho_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:31] [0.5.1] [INFO] 34.21.156.125:40382 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:36:31] [0.5.1] [INFO] file.py:608: [proxy:711e68cd] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465391&Signature=HWqftoVg4pJ9l4M65nsXS-q7idpwHy~ycBtnJSZSiltA3Vqpg6waZLXWpV30kxVjEL2LAFWO5IoESJLH3yO92lfZ~0gsS5-uY4Jw4SM0AtCbZi2QUSrBQyJZLm31tFjfoKdPR2Sa3-jgEmcDBF~4cj01pr1uIABDufLzhf4MCho_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:31] [0.5.1] [INFO] file.py:624: [proxy:711e68cd] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465391&Signature=HWqftoVg4pJ9l4M65nsXS-q7idpwHy~ycBtnJSZSiltA3Vqpg6waZLXWpV30kxVjEL2LAFWO5IoESJLH3yO92lfZ~0gsS5-uY4Jw4SM0AtCbZi2QUSrBQyJZLm31tFjfoKdPR2Sa3-jgEmcDBF~4cj01pr1uIABDufLzhf4MCho_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:36:32] [0.5.1] [INFO] 172.17.0.1:53988 - "GET /.git/config HTTP/1.0" 404 [2026-04-18 02:36:32] [0.5.1] [INFO] file.py:645: [proxy:711e68cd] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465391&Signature=HWqftoVg4pJ9l4M65nsXS-q7idpwHy~ycBtnJSZSiltA3Vqpg6waZLXWpV30kxVjEL2LAFWO5IoESJLH3yO92lfZ~0gsS5-uY4Jw4SM0AtCbZi2QUSrBQyJZLm31tFjfoKdPR2Sa3-jgEmcDBF~4cj01pr1uIABDufLzhf4MCho_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 02:36:32] [0.5.1] [INFO] file.py:672: [proxy:711e68cd] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776465391&Signature=HWqftoVg4pJ9l4M65nsXS-q7idpwHy~ycBtnJSZSiltA3Vqpg6waZLXWpV30kxVjEL2LAFWO5IoESJLH3yO92lfZ~0gsS5-uY4Jw4SM0AtCbZi2QUSrBQyJZLm31tFjfoKdPR2Sa3-jgEmcDBF~4cj01pr1uIABDufLzhf4MCho_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:36:33] [0.5.1] [INFO] 34.21.156.125:40372 - "GET /proxy/music?token=WWZ-Exfn2oo HTTP/1.1" 200 [2026-04-18 02:36:45] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp_pj6zzus [2026-04-18 02:36:45] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "228.728125" } } [2026-04-18 02:36:45] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 228.728125 seconds for file: /tmp/tmp_pj6zzus [2026-04-18 02:36:45] [0.5.1] [INFO] music_library.py:838: 网络音乐 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 时长: 228.728125 秒 [2026-04-18 02:36:45] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 时长到内存: 228.728125 秒 [2026-04-18 02:36:45] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:36:45] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 17.262 秒 [2026-04-18 02:36:45] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 211.466 秒 [2026-04-18 02:36:45] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:36:45] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:36:45] [0.5.1] [INFO] device_player.py:808: 211.46567978858948 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:36:45] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:36:45] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:36:55] [0.5.1] [INFO] 172.17.0.1:49440 - "GET /.git/config HTTP/1.0" 404 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首', '搁浅- Jay chou 周杰伦-冰淇凌'] with len: 10 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 02:40:16] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 02:40:16] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 02:40:16] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:40:16] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:16] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=IZpwL8vXxfs [2026-04-18 02:40:16] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:40:17] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:40:17] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:40:18] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:40:18] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:40:18] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=IZpwL8vXxfs [2026-04-18 02:40:19] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=IZpwL8vXxfs audio_id:1582971365183456177 [2026-04-18 02:40:19] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=IZpwL8vXxfs ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:40:19] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 02:40:19] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:40:19] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:19] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=qiQknRFWgnw [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:519: [proxy:687776a5] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:19] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:524: [proxy:687776a5] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:552: [proxy:687776a5] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:597: [proxy:687776a5] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:40:19] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:40:19] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 02:40:19] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776451219134"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:40:19] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451219134: True [2026-04-18 02:40:19] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:19] [0.5.1] [INFO] 34.21.156.125:55764 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:608: [proxy:687776a5] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:624: [proxy:687776a5] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:519: [proxy:53b1ca8f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:19] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:524: [proxy:53b1ca8f] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:552: [proxy:53b1ca8f] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:597: [proxy:53b1ca8f] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:40:19] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:40:19] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 02:40:19] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776451219448"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:40:19] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451219448: True [2026-04-18 02:40:19] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:19] [0.5.1] [INFO] 34.21.156.125:55772 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:608: [proxy:53b1ca8f] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:19] [0.5.1] [INFO] file.py:624: [proxy:53b1ca8f] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:645: [proxy:687776a5] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:683: [proxy:687776a5] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:645: [proxy:53b1ca8f] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:683: [proxy:53b1ca8f] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 02:40:20] [0.5.1] [INFO] 34.21.156.125:55748 - "GET /proxy/music?token=qiQknRFWgnw HTTP/1.1" 200 [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:738: [proxy:687776a5] stream finished total_bytes=16384 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:519: [proxy:f514ed67] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:20] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:524: [proxy:f514ed67] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:552: [proxy:f514ed67] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:40:20] [0.5.1] [INFO] file.py:597: [proxy:f514ed67] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:40:20] [0.5.1] [INFO] 122.97.136.182:58198 - "GET /proxy/music?token=IZpwL8vXxfs HTTP/1.1" 200 [2026-04-18 02:40:20] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:40:20] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 02:40:20] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776451220853"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:40:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451220853: True [2026-04-18 02:40:21] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465620&Signature=fGt2LxwJcuVR01mHbzcarmFtWhftCjpLI4VVmcTd1Wx4X78x2~0RhJY0dZU5-bMwCH2SZNvYsI4Qgg904GdnnerR9IjnTAyoRineVryi6-QsgCZV6kU8ncXg-45zRiSD1cLOAqKcmjKvKi3yTIrvTiJxexvnlB3IXbUAEV4DKTs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:21] [0.5.1] [INFO] 34.21.156.125:55780 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 02:40:21] [0.5.1] [INFO] file.py:608: [proxy:f514ed67] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465620&Signature=fGt2LxwJcuVR01mHbzcarmFtWhftCjpLI4VVmcTd1Wx4X78x2~0RhJY0dZU5-bMwCH2SZNvYsI4Qgg904GdnnerR9IjnTAyoRineVryi6-QsgCZV6kU8ncXg-45zRiSD1cLOAqKcmjKvKi3yTIrvTiJxexvnlB3IXbUAEV4DKTs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:21] [0.5.1] [INFO] file.py:624: [proxy:f514ed67] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465620&Signature=fGt2LxwJcuVR01mHbzcarmFtWhftCjpLI4VVmcTd1Wx4X78x2~0RhJY0dZU5-bMwCH2SZNvYsI4Qgg904GdnnerR9IjnTAyoRineVryi6-QsgCZV6kU8ncXg-45zRiSD1cLOAqKcmjKvKi3yTIrvTiJxexvnlB3IXbUAEV4DKTs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:40:21] [0.5.1] [INFO] file.py:645: [proxy:f514ed67] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465620&Signature=fGt2LxwJcuVR01mHbzcarmFtWhftCjpLI4VVmcTd1Wx4X78x2~0RhJY0dZU5-bMwCH2SZNvYsI4Qgg904GdnnerR9IjnTAyoRineVryi6-QsgCZV6kU8ncXg-45zRiSD1cLOAqKcmjKvKi3yTIrvTiJxexvnlB3IXbUAEV4DKTs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 02:40:21] [0.5.1] [INFO] file.py:683: [proxy:f514ed67] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 02:40:21] [0.5.1] [INFO] 34.21.156.125:55778 - "GET /proxy/music?token=qiQknRFWgnw HTTP/1.1" 200 [2026-04-18 02:40:24] [0.5.1] [INFO] file.py:738: [proxy:f514ed67] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465620&Signature=fGt2LxwJcuVR01mHbzcarmFtWhftCjpLI4VVmcTd1Wx4X78x2~0RhJY0dZU5-bMwCH2SZNvYsI4Qgg904GdnnerR9IjnTAyoRineVryi6-QsgCZV6kU8ncXg-45zRiSD1cLOAqKcmjKvKi3yTIrvTiJxexvnlB3IXbUAEV4DKTs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:40:24] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp331505n8 [2026-04-18 02:40:24] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "268.654875" } } [2026-04-18 02:40:24] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 268.654875 seconds for file: /tmp/tmp331505n8 [2026-04-18 02:40:24] [0.5.1] [INFO] music_library.py:838: 网络音乐 搁浅- Jay chou 周杰伦-冰淇凌 时长: 268.654875 秒 [2026-04-18 02:40:24] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 搁浅- Jay chou 周杰伦-冰淇凌 时长到内存: 268.654875 秒 [2026-04-18 02:40:24] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:40:24] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 5.465 秒 [2026-04-18 02:40:24] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 263.190 秒 [2026-04-18 02:40:24] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:40:24] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:40:24] [0.5.1] [INFO] device_player.py:808: 263.18950696754456 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:40:24] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:40:24] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:41:24] [0.5.1] [INFO] online_music.py:393: 追加歌手歌曲,当前页码: 1 [2026-04-18 02:41:24] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:41:24] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:41:24] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: Jay chou 周杰伦 [2026-04-18 02:41:24] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:41:24] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': ' Jay chou 周杰伦', 'page': 1, 'limit': 3} [2026-04-18 02:41:24] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": " Jay chou \u5468\u6770\u4f26", "page": 1, "limit": 3}, "id": "msg_1776451284593"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451284593: True [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: Jay chou 周杰伦 [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': ' Jay chou 周杰伦', 'page': 1, 'limit': 3} [2026-04-18 02:41:25] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": " Jay chou \u5468\u6770\u4f26", "page": 1, "limit": 3}, "id": "msg_1776451285097"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451285097: True [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: True, found 8 results [2026-04-18 02:41:25] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:41:25] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556362, 'songmid': '0044SaFh0apuR2', 'title': '那天下雨了', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101091484, 'songmid': '004BhQke4adHcf', 'title': '给我一首歌的时间', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340965, 'songmid': '004Yi5BD3ksoAN', 'title': '蒲公英的约定', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5105986, 'songmid': '001xd0HI0X9GNq', 'title': '一路向北', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002MAeob3zLXwZ.jpg', 'album': 'J III MP3 Player', 'albumid': 14311, 'albummid': '002MAeob3zLXwZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556366, 'songmid': '003WPrjL4dimFE', 'title': '爱琴海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449201, 'songmid': '00128N3r2SYKMF', 'title': '兰亭序', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680284, 'songmid': '0022b7OX2STU86', 'title': '我落泪情绪零碎', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556373, 'songmid': '003FdJZH1wljMU', 'title': '西西里', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177680, 'songmid': '003xv4w313tZHV', 'title': '红尘客栈', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556365, 'songmid': '003wwuRJ3OmrGc', 'title': '七月的极光', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449200, 'songmid': '0042QMDR1VzSsx', 'title': '说好的幸福呢', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 21809360, 'artwork': 'https://i.audiomack.com/huaijiu/d4ebd5f36f.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '11月的萧邦', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 21809503, 'artwork': 'https://i.audiomack.com/huaijiu/7e2dce3db3.webp', 'duration': 237, 'title': '周杰伦 - 爱在西元前.flac', 'artist': 'huaijiu', 'album': '', 'url_slug': 'zhou-jie-lun-ai-zai-xi-yuan-qianflac', 'platform': 'Audiomack'}, {'id': 21809357, 'artwork': 'https://i.audiomack.com/huaijiu/6e6345c5d3.webp', 'duration': 254, 'title': '兰亭序', 'artist': '周杰伦', 'album': '魔杰座', 'url_slug': 'lan-ting-xu', 'platform': 'Audiomack'}, {'id': 21797730, 'artwork': 'https://i.audiomack.com/huaijiu/fbccdeb5b3.webp', 'duration': 265, 'title': '反方向的钟', 'artist': '周杰伦', 'album': 'Jay', 'url_slug': 'fan-fang-xiang-de-zhong', 'platform': 'Audiomack'}, {'id': 21797726, 'artwork': 'https://i.audiomack.com/huaijiu/bc86992afc.webp', 'duration': 263, 'title': '烟花易冷', 'artist': '周杰伦', 'album': '跨时代', 'url_slug': 'yan-hua-yi-leng', 'platform': 'Audiomack'}, {'id': 21809361, 'artwork': 'https://i.audiomack.com/huaijiu/5e2625d49e.webp', 'duration': 279, 'title': '斗牛', 'artist': '周杰伦', 'album': 'Jay', 'url_slug': 'dou-niu', 'platform': 'Audiomack'}] [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:839: 歌单去重完成,原始数量: 10, 去重后数量: 10 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:41:25] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:41:25] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:41:25] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:41:25] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:41:25] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:43:21] [0.5.1] [INFO] file.py:738: [proxy:53b1ca8f] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776465619&Signature=blACGq0~iY~VjgHZLIK6m8rkcyjlp9vcLzbcURy5ddk~W~Ao3tSk0C4XDeTyCrKnY0OUNqygqUng1WhLrHtGzJgTxI3XDpM6uFcdeL4L99ysO2-7U2vcQMg5HZ-sPEx3L-KzTcuSVm4~CeBXR5HoADzJQjFykRE0YkCmiOFr~qM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅-周杰伦 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅-周杰伦 allow_download:True [2026-04-18 02:44:47] [0.5.1] [INFO] music_library.py:591: 根据【搁浅-周杰伦】找到歌曲【['搁浅-周杰伦']】 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅-周杰伦'] 1 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅-周杰伦 [2026-04-18 02:44:47] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅-周杰伦 [2026-04-18 02:44:47] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:47] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:47] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=YqZ5J_WGMrg [2026-04-18 02:44:47] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:44:48] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:44:49] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:44:49] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:44:49] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:44:49] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=YqZ5J_WGMrg [2026-04-18 02:44:50] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=YqZ5J_WGMrg audio_id:1582971365183456177 [2026-04-18 02:44:50] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=YqZ5J_WGMrg ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:44:50] [0.5.1] [INFO] device_player.py:368: 【搁浅-周杰伦】已经开始播放了 [2026-04-18 02:44:50] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:50] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:50] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=SqVJlBFJ_94 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:519: [proxy:3393b3bb] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:50] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:524: [proxy:3393b3bb] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:552: [proxy:3393b3bb] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:597: [proxy:3393b3bb] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:50] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:50] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:50] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102065750, "songmid": "001Bbywq2gicae", "title": "\u6401\u6d45", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg", "album": "\u4e03\u91cc\u9999", "albumid": 20612, "albummid": "003DFRzD192KKD", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451490722"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:50] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:50] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:50] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451490722: False [2026-04-18 02:44:50] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:50] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:50] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:50] [0.5.1] [INFO] 34.21.156.125:44258 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:608: [proxy:3393b3bb] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:624: [proxy:3393b3bb] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:519: [proxy:e84ff7dd] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:50] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:524: [proxy:e84ff7dd] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:552: [proxy:e84ff7dd] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:50] [0.5.1] [INFO] file.py:597: [proxy:e84ff7dd] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:50] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:50] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:50] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102065750, "songmid": "001Bbywq2gicae", "title": "\u6401\u6d45", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg", "album": "\u4e03\u91cc\u9999", "albumid": 20612, "albummid": "003DFRzD192KKD", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451490943"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:51] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451490943: False [2026-04-18 02:44:51] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44262 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:608: [proxy:e84ff7dd] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:624: [proxy:e84ff7dd] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44262 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44258 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:645: [proxy:e84ff7dd] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:683: [proxy:e84ff7dd] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:645: [proxy:3393b3bb] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:683: [proxy:3393b3bb] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:51] [0.5.1] [INFO] 122.96.50.157:40837 - "GET /proxy/music?token=YqZ5J_WGMrg HTTP/1.1" 200 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:738: [proxy:e84ff7dd] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44256 - "GET /proxy/music?token=SqVJlBFJ_94 HTTP/1.1" 200 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:738: [proxy:3393b3bb] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:519: [proxy:384a2b4d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:51] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:524: [proxy:384a2b4d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:552: [proxy:384a2b4d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:597: [proxy:384a2b4d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:51] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:51] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:51] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102065750, "songmid": "001Bbywq2gicae", "title": "\u6401\u6d45", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg", "album": "\u4e03\u91cc\u9999", "albumid": 20612, "albummid": "003DFRzD192KKD", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451491180"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:51] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451491180: False [2026-04-18 02:44:51] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44286 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:608: [proxy:384a2b4d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1MCwgInNvbmdtaWQiOiAiMDAxQmJ5d3EyZ2ljYWUiLCAidGl0bGUiOiAiXHU2NDAxXHU2ZDQ1IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:624: [proxy:384a2b4d] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44286 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:645: [proxy:384a2b4d] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:683: [proxy:384a2b4d] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:51] [0.5.1] [INFO] 34.21.156.125:44274 - "GET /proxy/music?token=SqVJlBFJ_94 HTTP/1.1" 200 [2026-04-18 02:44:51] [0.5.1] [INFO] file.py:738: [proxy:384a2b4d] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:51] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp0_exzwso [2026-04-18 02:44:51] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:51] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:44:51] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmp0_exzwso [2026-04-18 02:44:51] [0.5.1] [INFO] music_library.py:838: 网络音乐 搁浅-周杰伦 时长: 1.405533 秒 [2026-04-18 02:44:51] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 搁浅-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:44:51] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:44:51] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.761 秒 [2026-04-18 02:44:51] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.644 秒 [2026-04-18 02:44:51] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:51] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:51] [0.5.1] [INFO] device_player.py:808: 0.6443020544128417 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:44:51] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:44:51] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:305: get_next_music 夜曲-周杰伦 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:306: _play_next. name:夜曲-周杰伦, cur_music:搁浅-周杰伦 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:夜曲-周杰伦 allow_download:True [2026-04-18 02:44:52] [0.5.1] [INFO] music_library.py:591: 根据【夜曲-周杰伦】找到歌曲【['夜曲-周杰伦']】 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:254: play_internal. names:['夜曲-周杰伦'] 1 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:348: cur_music 夜曲-周杰伦 [2026-04-18 02:44:52] [0.5.1] [INFO] music_library.py:1072: get_music_url name:夜曲-周杰伦 [2026-04-18 02:44:52] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:52] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:夜曲-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:52] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=vLmNrb5bmkE [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:44:52] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:44:53] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:44:53] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:44:53] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:44:53] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=vLmNrb5bmkE [2026-04-18 02:44:54] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=vLmNrb5bmkE audio_id:1582971365183456177 [2026-04-18 02:44:54] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=vLmNrb5bmkE ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:44:54] [0.5.1] [INFO] device_player.py:368: 【夜曲-周杰伦】已经开始播放了 [2026-04-18 02:44:54] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:54] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:夜曲-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:54] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=rPfwk_cCRLs [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:519: [proxy:e6d8d341] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:54] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:524: [proxy:e6d8d341] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:552: [proxy:e6d8d341] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:597: [proxy:e6d8d341] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:54] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 718477, "songmid": "001zMQr71F1Qo8", "title": "\u591c\u66f2", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg", "album": "\u5341\u4e00\u6708\u7684\u8427\u90a6", "albumid": 60671, "albummid": "0024bjiL2aocxT", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451494603"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:54] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:54] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:54] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451494603: False [2026-04-18 02:44:54] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:54] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:54] [0.5.1] [INFO] music.py:98: plugin-url {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:54] [0.5.1] [INFO] 34.21.156.125:44308 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:608: [proxy:e6d8d341] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:624: [proxy:e6d8d341] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:519: [proxy:ca57717f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:54] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:524: [proxy:ca57717f] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:552: [proxy:ca57717f] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:54] [0.5.1] [INFO] file.py:597: [proxy:ca57717f] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:54] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 718477, "songmid": "001zMQr71F1Qo8", "title": "\u591c\u66f2", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg", "album": "\u5341\u4e00\u6708\u7684\u8427\u90a6", "albumid": 60671, "albummid": "0024bjiL2aocxT", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451494821"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:54] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:54] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451494821: False [2026-04-18 02:44:55] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [INFO] music.py:98: plugin-url {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44312 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:608: [proxy:ca57717f] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:624: [proxy:ca57717f] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44308 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:645: [proxy:e6d8d341] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:683: [proxy:e6d8d341] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44300 - "GET /proxy/music?token=rPfwk_cCRLs HTTP/1.1" 200 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:738: [proxy:e6d8d341] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44312 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:519: [proxy:43e889d4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:55] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:524: [proxy:43e889d4] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:552: [proxy:43e889d4] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:597: [proxy:43e889d4] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:645: [proxy:ca57717f] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:683: [proxy:ca57717f] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:55] [0.5.1] [INFO] 122.97.136.182:62443 - "GET /proxy/music?token=vLmNrb5bmkE HTTP/1.1" 200 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:738: [proxy:ca57717f] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:55] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:55] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 718477, "songmid": "001zMQr71F1Qo8", "title": "\u591c\u66f2", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg", "album": "\u5341\u4e00\u6708\u7684\u8427\u90a6", "albumid": 60671, "albummid": "0024bjiL2aocxT", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451495060"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:55] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451495060: False [2026-04-18 02:44:55] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:55] [0.5.1] [INFO] music.py:98: plugin-url {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44326 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:608: [proxy:43e889d4] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3NywgInNvbmdtaWQiOiAiMDAxek1RcjcxRjFRbzgiLCAidGl0bGUiOiAiXHU1OTFjXHU2NmYyIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:624: [proxy:43e889d4] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44326 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:645: [proxy:43e889d4] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:683: [proxy:43e889d4] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:55] [0.5.1] [INFO] 34.21.156.125:44324 - "GET /proxy/music?token=rPfwk_cCRLs HTTP/1.1" 200 [2026-04-18 02:44:55] [0.5.1] [INFO] file.py:738: [proxy:43e889d4] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:55] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmphzg4jc6d [2026-04-18 02:44:55] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:44:55] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmphzg4jc6d [2026-04-18 02:44:55] [0.5.1] [INFO] music_library.py:838: 网络音乐 夜曲-周杰伦 时长: 1.405533 秒 [2026-04-18 02:44:55] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 夜曲-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:44:55] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:44:55] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.757 秒 [2026-04-18 02:44:55] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.649 秒 [2026-04-18 02:44:55] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:55] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:55] [0.5.1] [INFO] device_player.py:808: 0.6487969598846435 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:44:55] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:44:55] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:305: get_next_music 枫-周杰伦 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:306: _play_next. name:枫-周杰伦, cur_music:夜曲-周杰伦 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:枫-周杰伦 allow_download:True [2026-04-18 02:44:56] [0.5.1] [INFO] music_library.py:591: 根据【枫-周杰伦】找到歌曲【['枫-周杰伦']】 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:254: play_internal. names:['枫-周杰伦'] 1 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:348: cur_music 枫-周杰伦 [2026-04-18 02:44:56] [0.5.1] [INFO] music_library.py:1072: get_music_url name:枫-周杰伦 [2026-04-18 02:44:56] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:56] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:枫-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:56] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=cCBrb2NfG_s [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:44:56] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:44:57] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:44:57] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:44:57] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=cCBrb2NfG_s [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=cCBrb2NfG_s audio_id:1582971365183456177 [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=cCBrb2NfG_s ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:368: 【枫-周杰伦】已经开始播放了 [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:枫-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=zd0lsHTP_k8 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:519: [proxy:eb2690ee] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:524: [proxy:eb2690ee] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:552: [proxy:eb2690ee] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:597: [proxy:eb2690ee] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:58] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 718479, "songmid": "003KtYhg4frNXC", "title": "\u67ab", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg", "album": "\u5341\u4e00\u6708\u7684\u8427\u90a6", "albumid": 60671, "albummid": "0024bjiL2aocxT", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451498185"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451498185: False [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [INFO] music.py:98: plugin-url {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57936 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:608: [proxy:eb2690ee] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:624: [proxy:eb2690ee] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:519: [proxy:5a80a76b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:524: [proxy:5a80a76b] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:552: [proxy:5a80a76b] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:597: [proxy:5a80a76b] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:58] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 718479, "songmid": "003KtYhg4frNXC", "title": "\u67ab", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg", "album": "\u5341\u4e00\u6708\u7684\u8427\u90a6", "albumid": 60671, "albummid": "0024bjiL2aocxT", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451498403"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451498403: False [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [INFO] music.py:98: plugin-url {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57946 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:608: [proxy:5a80a76b] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:624: [proxy:5a80a76b] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57936 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:645: [proxy:eb2690ee] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:683: [proxy:eb2690ee] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57932 - "GET /proxy/music?token=zd0lsHTP_k8 HTTP/1.1" 200 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:738: [proxy:eb2690ee] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:519: [proxy:572abd82] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:524: [proxy:572abd82] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:552: [proxy:572abd82] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:597: [proxy:572abd82] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57946 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:645: [proxy:5a80a76b] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:683: [proxy:5a80a76b] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:58] [0.5.1] [INFO] 122.96.50.157:33138 - "GET /proxy/music?token=cCBrb2NfG_s HTTP/1.1" 200 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:738: [proxy:5a80a76b] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:44:58] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 718479, "songmid": "003KtYhg4frNXC", "title": "\u67ab", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg", "album": "\u5341\u4e00\u6708\u7684\u8427\u90a6", "albumid": 60671, "albummid": "0024bjiL2aocxT", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451498644"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451498644: False [2026-04-18 02:44:58] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:44:58] [0.5.1] [INFO] music.py:98: plugin-url {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57954 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:608: [proxy:572abd82] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcxODQ3OSwgInNvbmdtaWQiOiAiMDAzS3RZaGc0ZnJOWEMiLCAidGl0bGUiOiAiXHU2N2FiIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDI0YmppTDJhb2N4VC5qcGciLCAiYWxidW0iOiAiXHU1MzQxXHU0ZTAwXHU2NzA4XHU3Njg0XHU4NDI3XHU5MGE2IiwgImFsYnVtaWQiOiA2MDY3MSwgImFsYnVtbWlkIjogIjAwMjRiamlMMmFvY3hUIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:624: [proxy:572abd82] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57954 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:645: [proxy:572abd82] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:683: [proxy:572abd82] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:44:58] [0.5.1] [INFO] 34.21.156.125:57950 - "GET /proxy/music?token=zd0lsHTP_k8 HTTP/1.1" 200 [2026-04-18 02:44:58] [0.5.1] [INFO] file.py:738: [proxy:572abd82] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:44:58] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpu8s3cfzk [2026-04-18 02:44:58] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:44:58] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmpu8s3cfzk [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:838: 网络音乐 枫-周杰伦 时长: 1.405533 秒 [2026-04-18 02:44:58] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 枫-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:44:58] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.753 秒 [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.653 秒 [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:58] [0.5.1] [INFO] device_player.py:808: 0.6525663576202392 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:44:58] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:44:58] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:305: get_next_music 花海-周杰伦 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:306: _play_next. name:花海-周杰伦, cur_music:枫-周杰伦 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:花海-周杰伦 allow_download:True [2026-04-18 02:44:59] [0.5.1] [INFO] music_library.py:591: 根据【花海-周杰伦】找到歌曲【['花海-周杰伦']】 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:254: play_internal. names:['花海-周杰伦'] 1 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:348: cur_music 花海-周杰伦 [2026-04-18 02:44:59] [0.5.1] [INFO] music_library.py:1072: get_music_url name:花海-周杰伦 [2026-04-18 02:44:59] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:44:59] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:花海-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:44:59] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=It8jRKNqEbo [2026-04-18 02:44:59] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:00] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:00] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:01] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:01] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:01] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=It8jRKNqEbo [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=It8jRKNqEbo audio_id:1582971365183456177 [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=It8jRKNqEbo ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:368: 【花海-周杰伦】已经开始播放了 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:花海-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=r-M-PPNvXu0 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:519: [proxy:58a3e971] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:524: [proxy:58a3e971] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:552: [proxy:58a3e971] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:597: [proxy:58a3e971] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:02] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 449198, "songmid": "003cI52o4daJJL", "title": "\u82b1\u6d77", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg", "album": "\u9b54\u6770\u5ea7", "albumid": 36062, "albummid": "002Neh8l0uciQZ", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451502081"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:02] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:45:02] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451502081: False [2026-04-18 02:45:02] [0.5.1] [ERROR] js_plugin_manager.py:2052: JS Plugin Manager getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:45:02] [0.5.1] [ERROR] online_music.py:970: Plugin 小秋音乐_0.3.0_Huibq get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 小秋音乐_0.3.0_Huibq: Request failed with status code 403 [2026-04-18 02:45:02] [0.5.1] [INFO] music.py:98: plugin-url {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57978 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:519: [proxy:e44b65fc] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:524: [proxy:e44b65fc] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:552: [proxy:e44b65fc] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:597: [proxy:e44b65fc] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:608: [proxy:58a3e971] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:624: [proxy:58a3e971] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:02] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 449198, "songmid": "003cI52o4daJJL", "title": "\u82b1\u6d77", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg", "album": "\u9b54\u6770\u5ea7", "albumid": 36062, "albummid": "002Neh8l0uciQZ", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451502301"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451502301: True [2026-04-18 02:45:02] [0.5.1] [INFO] music.py:98: plugin-url {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57982 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:608: [proxy:e44b65fc] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:624: [proxy:e44b65fc] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57978 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:645: [proxy:58a3e971] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:683: [proxy:58a3e971] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57962 - "GET /proxy/music?token=r-M-PPNvXu0 HTTP/1.1" 200 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:738: [proxy:58a3e971] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:519: [proxy:bd4af0d9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:524: [proxy:bd4af0d9] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:552: [proxy:bd4af0d9] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:597: [proxy:bd4af0d9] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57982 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:645: [proxy:e44b65fc] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:683: [proxy:e44b65fc] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:02] [0.5.1] [INFO] 122.96.50.157:33139 - "GET /proxy/music?token=It8jRKNqEbo HTTP/1.1" 200 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:738: [proxy:e44b65fc] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:02] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 449198, "songmid": "003cI52o4daJJL", "title": "\u82b1\u6d77", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg", "album": "\u9b54\u6770\u5ea7", "albumid": 36062, "albummid": "002Neh8l0uciQZ", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451502540"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:02] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451502540: True [2026-04-18 02:45:02] [0.5.1] [INFO] music.py:98: plugin-url {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57996 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:608: [proxy:bd4af0d9] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTE5OCwgInNvbmdtaWQiOiAiMDAzY0k1Mm80ZGFKSkwiLCAidGl0bGUiOiAiXHU4MmIxXHU2ZDc3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:624: [proxy:bd4af0d9] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57996 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:645: [proxy:bd4af0d9] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:683: [proxy:bd4af0d9] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:02] [0.5.1] [INFO] 34.21.156.125:57986 - "GET /proxy/music?token=r-M-PPNvXu0 HTTP/1.1" 200 [2026-04-18 02:45:02] [0.5.1] [INFO] file.py:738: [proxy:bd4af0d9] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:02] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp4qw4acv6 [2026-04-18 02:45:02] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:45:02] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmp4qw4acv6 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:838: 网络音乐 花海-周杰伦 时长: 1.405533 秒 [2026-04-18 02:45:02] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 花海-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:45:02] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.757 秒 [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.649 秒 [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:02] [0.5.1] [INFO] device_player.py:808: 0.6489032945709228 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:02] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:02] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:305: get_next_music 稻香-周杰伦 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:306: _play_next. name:稻香-周杰伦, cur_music:花海-周杰伦 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:稻香-周杰伦 allow_download:True [2026-04-18 02:45:03] [0.5.1] [INFO] music_library.py:591: 根据【稻香-周杰伦】找到歌曲【['稻香-周杰伦']】 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:254: play_internal. names:['稻香-周杰伦'] 1 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:348: cur_music 稻香-周杰伦 [2026-04-18 02:45:03] [0.5.1] [INFO] music_library.py:1072: get_music_url name:稻香-周杰伦 [2026-04-18 02:45:03] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:03] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:稻香-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:03] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=DT7o6L9BPNk [2026-04-18 02:45:03] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:04] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:04] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:04] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:04] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:04] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=DT7o6L9BPNk [2026-04-18 02:45:05] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=DT7o6L9BPNk audio_id:1582971365183456177 [2026-04-18 02:45:05] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=DT7o6L9BPNk ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:05] [0.5.1] [INFO] device_player.py:368: 【稻香-周杰伦】已经开始播放了 [2026-04-18 02:45:05] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:05] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:稻香-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:05] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=jvXsXvAGphQ [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:519: [proxy:9a7d26e2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:05] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:524: [proxy:9a7d26e2] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:552: [proxy:9a7d26e2] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:597: [proxy:9a7d26e2] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:05] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:05] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:05] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 449205, "songmid": "003aAYrm3GE0Ac", "title": "\u7a3b\u9999", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg", "album": "\u9b54\u6770\u5ea7", "albumid": 36062, "albummid": "002Neh8l0uciQZ", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451505563"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:05] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451505563: True [2026-04-18 02:45:05] [0.5.1] [INFO] music.py:98: plugin-url {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:05] [0.5.1] [INFO] 34.21.156.125:58010 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:608: [proxy:9a7d26e2] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:624: [proxy:9a7d26e2] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:519: [proxy:00933f53] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:05] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:524: [proxy:00933f53] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:552: [proxy:00933f53] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:597: [proxy:00933f53] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:05] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:05] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:05] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 449205, "songmid": "003aAYrm3GE0Ac", "title": "\u7a3b\u9999", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg", "album": "\u9b54\u6770\u5ea7", "albumid": 36062, "albummid": "002Neh8l0uciQZ", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451505779"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:05] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451505779: True [2026-04-18 02:45:05] [0.5.1] [INFO] music.py:98: plugin-url {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:05] [0.5.1] [INFO] 34.21.156.125:58024 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:608: [proxy:00933f53] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:624: [proxy:00933f53] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:05] [0.5.1] [INFO] 34.21.156.125:58010 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:645: [proxy:9a7d26e2] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:683: [proxy:9a7d26e2] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:05] [0.5.1] [INFO] 34.21.156.125:58008 - "GET /proxy/music?token=jvXsXvAGphQ HTTP/1.1" 200 [2026-04-18 02:45:05] [0.5.1] [INFO] file.py:738: [proxy:9a7d26e2] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:519: [proxy:7931c769] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:524: [proxy:7931c769] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:552: [proxy:7931c769] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:597: [proxy:7931c769] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:06] [0.5.1] [INFO] 34.21.156.125:58024 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:645: [proxy:00933f53] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:683: [proxy:00933f53] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:06] [0.5.1] [INFO] 122.96.50.157:33143 - "GET /proxy/music?token=DT7o6L9BPNk HTTP/1.1" 200 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:738: [proxy:00933f53] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:06] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:06] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:06] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 449205, "songmid": "003aAYrm3GE0Ac", "title": "\u7a3b\u9999", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg", "album": "\u9b54\u6770\u5ea7", "albumid": 36062, "albummid": "002Neh8l0uciQZ", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451506017"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:06] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451506017: True [2026-04-18 02:45:06] [0.5.1] [INFO] music.py:98: plugin-url {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:06] [0.5.1] [INFO] 34.21.156.125:58042 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:608: [proxy:7931c769] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQ0OTIwNSwgInNvbmdtaWQiOiAiMDAzYUFZcm0zR0UwQWMiLCAidGl0bGUiOiAiXHU3YTNiXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJOZWg4bDB1Y2lRWi5qcGciLCAiYWxidW0iOiAiXHU5YjU0XHU2NzcwXHU1ZWE3IiwgImFsYnVtaWQiOiAzNjA2MiwgImFsYnVtbWlkIjogIjAwMk5laDhsMHVjaVFaIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:624: [proxy:7931c769] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:06] [0.5.1] [INFO] 34.21.156.125:58042 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:645: [proxy:7931c769] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:683: [proxy:7931c769] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:06] [0.5.1] [INFO] 34.21.156.125:58026 - "GET /proxy/music?token=jvXsXvAGphQ HTTP/1.1" 200 [2026-04-18 02:45:06] [0.5.1] [INFO] file.py:738: [proxy:7931c769] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:06] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpbnaip9o2 [2026-04-18 02:45:06] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:45:06] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmpbnaip9o2 [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:838: 网络音乐 稻香-周杰伦 时长: 1.405533 秒 [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 稻香-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:45:06] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.747 秒 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.659 秒 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:808: 0.6586448392944335 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:06] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:06] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:稻香-周杰伦 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:06] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=nFr_PoRGDBM [2026-04-18 02:45:06] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:07] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:07] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:08] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:08] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:08] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=nFr_PoRGDBM [2026-04-18 02:45:09] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=nFr_PoRGDBM audio_id:1582971365183456177 [2026-04-18 02:45:09] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=nFr_PoRGDBM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:09] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 02:45:09] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:09] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=ln1_ptEl_iE [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:519: [proxy:359fcd57] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:524: [proxy:359fcd57] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:552: [proxy:359fcd57] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:597: [proxy:359fcd57] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:09] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451509452"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451509452: True [2026-04-18 02:45:09] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:09] [0.5.1] [INFO] 34.21.156.125:51572 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:608: [proxy:359fcd57] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:624: [proxy:359fcd57] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:519: [proxy:2f769f7f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:524: [proxy:2f769f7f] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:552: [proxy:2f769f7f] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:597: [proxy:2f769f7f] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:09] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451509667"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451509667: True [2026-04-18 02:45:09] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:09] [0.5.1] [INFO] 34.21.156.125:51584 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:608: [proxy:2f769f7f] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:624: [proxy:2f769f7f] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:09] [0.5.1] [INFO] 34.21.156.125:51572 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:645: [proxy:359fcd57] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:683: [proxy:359fcd57] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:09] [0.5.1] [INFO] 34.21.156.125:51558 - "GET /proxy/music?token=ln1_ptEl_iE HTTP/1.1" 200 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:738: [proxy:359fcd57] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:519: [proxy:d657fd27] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:524: [proxy:d657fd27] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:552: [proxy:d657fd27] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:597: [proxy:d657fd27] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:09] [0.5.1] [INFO] 34.21.156.125:51584 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:645: [proxy:2f769f7f] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:683: [proxy:2f769f7f] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:09] [0.5.1] [INFO] 122.96.50.157:16716 - "GET /proxy/music?token=nFr_PoRGDBM HTTP/1.1" 200 [2026-04-18 02:45:09] [0.5.1] [INFO] file.py:738: [proxy:2f769f7f] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:09] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:09] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451509902"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:10] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451509902: True [2026-04-18 02:45:10] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:10] [0.5.1] [INFO] 34.21.156.125:51602 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 02:45:10] [0.5.1] [INFO] file.py:608: [proxy:d657fd27] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:10] [0.5.1] [INFO] file.py:624: [proxy:d657fd27] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:10] [0.5.1] [INFO] 34.21.156.125:51602 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:10] [0.5.1] [INFO] file.py:645: [proxy:d657fd27] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:10] [0.5.1] [INFO] file.py:683: [proxy:d657fd27] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:10] [0.5.1] [INFO] 34.21.156.125:51586 - "GET /proxy/music?token=ln1_ptEl_iE HTTP/1.1" 200 [2026-04-18 02:45:10] [0.5.1] [INFO] file.py:738: [proxy:d657fd27] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:10] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpka6dwedr [2026-04-18 02:45:10] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:45:10] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmpka6dwedr [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:838: 网络音乐 晴天-周杰伦 时长: 1.405533 秒 [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 晴天-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:45:10] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.738 秒 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.667 秒 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:808: 0.6673256597595214 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:10] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:10] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:305: get_next_music 青花瓷-周杰伦 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:306: _play_next. name:青花瓷-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:青花瓷-周杰伦 allow_download:True [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:591: 根据【青花瓷-周杰伦】找到歌曲【['青花瓷-周杰伦']】 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:254: play_internal. names:['青花瓷-周杰伦'] 1 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:348: cur_music 青花瓷-周杰伦 [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:1072: get_music_url name:青花瓷-周杰伦 [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:青花瓷-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:10] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=05Tm3fX2fJM [2026-04-18 02:45:10] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:11] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:11] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:12] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:12] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:12] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=05Tm3fX2fJM [2026-04-18 02:45:13] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=05Tm3fX2fJM audio_id:1582971365183456177 [2026-04-18 02:45:13] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=05Tm3fX2fJM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:13] [0.5.1] [INFO] device_player.py:368: 【青花瓷-周杰伦】已经开始播放了 [2026-04-18 02:45:13] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:13] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:青花瓷-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=ZUHv0SmXb7A [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:519: [proxy:8f6f6ea2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:524: [proxy:8f6f6ea2] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:552: [proxy:8f6f6ea2] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:597: [proxy:8f6f6ea2] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 410316, "songmid": "002qU5aY3Qu24y", "title": "\u9752\u82b1\u74f7", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg", "album": "\u6211\u5f88\u5fd9", "albumid": 33021, "albummid": "002eFUFm2XYZ7z", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451513352"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451513352: True [2026-04-18 02:45:13] [0.5.1] [INFO] music.py:98: plugin-url {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:13] [0.5.1] [INFO] 34.21.156.125:51624 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:608: [proxy:8f6f6ea2] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:624: [proxy:8f6f6ea2] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:519: [proxy:cdc6243d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:524: [proxy:cdc6243d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:552: [proxy:cdc6243d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:597: [proxy:cdc6243d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 410316, "songmid": "002qU5aY3Qu24y", "title": "\u9752\u82b1\u74f7", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg", "album": "\u6211\u5f88\u5fd9", "albumid": 33021, "albummid": "002eFUFm2XYZ7z", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451513568"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451513568: True [2026-04-18 02:45:13] [0.5.1] [INFO] music.py:98: plugin-url {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:13] [0.5.1] [INFO] 34.21.156.125:51640 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:608: [proxy:cdc6243d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:624: [proxy:cdc6243d] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:13] [0.5.1] [INFO] 34.21.156.125:51624 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:645: [proxy:8f6f6ea2] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:683: [proxy:8f6f6ea2] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:13] [0.5.1] [INFO] 34.21.156.125:51610 - "GET /proxy/music?token=ZUHv0SmXb7A HTTP/1.1" 200 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:738: [proxy:8f6f6ea2] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:13] [0.5.1] [INFO] 34.21.156.125:51640 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:645: [proxy:cdc6243d] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:683: [proxy:cdc6243d] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:13] [0.5.1] [INFO] 122.96.50.157:10357 - "GET /proxy/music?token=05Tm3fX2fJM HTTP/1.1" 200 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:738: [proxy:cdc6243d] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:519: [proxy:a02ca128] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:524: [proxy:a02ca128] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:552: [proxy:a02ca128] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:13] [0.5.1] [INFO] file.py:597: [proxy:a02ca128] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 410316, "songmid": "002qU5aY3Qu24y", "title": "\u9752\u82b1\u74f7", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg", "album": "\u6211\u5f88\u5fd9", "albumid": 33021, "albummid": "002eFUFm2XYZ7z", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451513804"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:14] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451513804: True [2026-04-18 02:45:14] [0.5.1] [INFO] music.py:98: plugin-url {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:14] [0.5.1] [INFO] 34.21.156.125:51654 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:14] [0.5.1] [INFO] file.py:608: [proxy:a02ca128] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDQxMDMxNiwgInNvbmdtaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJlRlVGbTJYWVo3ei5qcGciLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgImFsYnVtaWQiOiAzMzAyMSwgImFsYnVtbWlkIjogIjAwMmVGVUZtMlhZWjd6IiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:14] [0.5.1] [INFO] file.py:624: [proxy:a02ca128] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:14] [0.5.1] [INFO] 34.21.156.125:51654 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:14] [0.5.1] [INFO] file.py:645: [proxy:a02ca128] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:14] [0.5.1] [INFO] file.py:683: [proxy:a02ca128] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:14] [0.5.1] [INFO] 34.21.156.125:51648 - "GET /proxy/music?token=ZUHv0SmXb7A HTTP/1.1" 200 [2026-04-18 02:45:14] [0.5.1] [INFO] file.py:738: [proxy:a02ca128] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:14] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp7keesi1w [2026-04-18 02:45:14] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:45:14] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmp7keesi1w [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:838: 网络音乐 青花瓷-周杰伦 时长: 1.405533 秒 [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 青花瓷-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:45:14] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.742 秒 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.663 秒 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:808: 0.6633989057617187 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:14] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:14] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:305: get_next_music 七里香-周杰伦 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:306: _play_next. name:七里香-周杰伦, cur_music:青花瓷-周杰伦 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:七里香-周杰伦 allow_download:True [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:591: 根据【七里香-周杰伦】找到歌曲【['七里香-周杰伦']】 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:254: play_internal. names:['七里香-周杰伦'] 1 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:348: cur_music 七里香-周杰伦 [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:1072: get_music_url name:七里香-周杰伦 [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:七里香-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:14] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=f9Ernpg9pEQ [2026-04-18 02:45:14] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:15] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:15] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:16] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:16] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:16] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=f9Ernpg9pEQ [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=f9Ernpg9pEQ audio_id:1582971365183456177 [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=f9Ernpg9pEQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:368: 【七里香-周杰伦】已经开始播放了 [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:七里香-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=R4OoTeFXs6Q [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:519: [proxy:2edd0e2f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:524: [proxy:2edd0e2f] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:552: [proxy:2edd0e2f] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:597: [proxy:2edd0e2f] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102065756, "songmid": "004Z8Ihr0JIu5s", "title": "\u4e03\u91cc\u9999", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg", "album": "\u4e03\u91cc\u9999", "albumid": 20612, "albummid": "003DFRzD192KKD", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451517235"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451517235: True [2026-04-18 02:45:17] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55438 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:608: [proxy:2edd0e2f] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:624: [proxy:2edd0e2f] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:519: [proxy:8b486038] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:524: [proxy:8b486038] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:552: [proxy:8b486038] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:597: [proxy:8b486038] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102065756, "songmid": "004Z8Ihr0JIu5s", "title": "\u4e03\u91cc\u9999", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg", "album": "\u4e03\u91cc\u9999", "albumid": 20612, "albummid": "003DFRzD192KKD", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451517451"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451517451: True [2026-04-18 02:45:17] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55454 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:608: [proxy:8b486038] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:624: [proxy:8b486038] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55438 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:645: [proxy:2edd0e2f] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:683: [proxy:2edd0e2f] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55426 - "GET /proxy/music?token=R4OoTeFXs6Q HTTP/1.1" 200 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:738: [proxy:2edd0e2f] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:519: [proxy:d482ecf8] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:524: [proxy:d482ecf8] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:552: [proxy:d482ecf8] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:597: [proxy:d482ecf8] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55454 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:645: [proxy:8b486038] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:683: [proxy:8b486038] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:17] [0.5.1] [INFO] 122.97.136.182:7429 - "GET /proxy/music?token=f9Ernpg9pEQ HTTP/1.1" 200 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:738: [proxy:8b486038] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102065756, "songmid": "004Z8Ihr0JIu5s", "title": "\u4e03\u91cc\u9999", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg", "album": "\u4e03\u91cc\u9999", "albumid": 20612, "albummid": "003DFRzD192KKD", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451517685"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:17] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451517685: True [2026-04-18 02:45:17] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55480 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:608: [proxy:d482ecf8] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NTc1NiwgInNvbmdtaWQiOiAiMDA0WjhJaHIwSkl1NXMiLCAidGl0bGUiOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDNERlJ6RDE5MktLRC5qcGciLCAiYWxidW0iOiAiXHU0ZTAzXHU5MWNjXHU5OTk5IiwgImFsYnVtaWQiOiAyMDYxMiwgImFsYnVtbWlkIjogIjAwM0RGUnpEMTkyS0tEIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:624: [proxy:d482ecf8] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55480 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:645: [proxy:d482ecf8] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:683: [proxy:d482ecf8] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:17] [0.5.1] [INFO] 34.21.156.125:55464 - "GET /proxy/music?token=R4OoTeFXs6Q HTTP/1.1" 200 [2026-04-18 02:45:17] [0.5.1] [INFO] file.py:738: [proxy:d482ecf8] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:17] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmpr3pkxo5d [2026-04-18 02:45:17] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:45:17] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmpr3pkxo5d [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:838: 网络音乐 七里香-周杰伦 时长: 1.405533 秒 [2026-04-18 02:45:17] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 七里香-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:45:17] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.739 秒 [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.667 秒 [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:17] [0.5.1] [INFO] device_player.py:808: 0.6665415010528564 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:17] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:17] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:305: get_next_music 退后-周杰伦 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:306: _play_next. name:退后-周杰伦, cur_music:七里香-周杰伦 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:退后-周杰伦 allow_download:True [2026-04-18 02:45:18] [0.5.1] [INFO] music_library.py:591: 根据【退后-周杰伦】找到歌曲【['退后-周杰伦']】 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:254: play_internal. names:['退后-周杰伦'] 1 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:348: cur_music 退后-周杰伦 [2026-04-18 02:45:18] [0.5.1] [INFO] music_library.py:1072: get_music_url name:退后-周杰伦 [2026-04-18 02:45:18] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:18] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:退后-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:18] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=2XuZfy2yVjg [2026-04-18 02:45:18] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:19] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:19] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:20] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:20] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:20] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=2XuZfy2yVjg [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=2XuZfy2yVjg audio_id:1582971365183456177 [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=2XuZfy2yVjg ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:368: 【退后-周杰伦】已经开始播放了 [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:退后-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=6uHVRwPz9Qc [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:519: [proxy:837a370f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:524: [proxy:837a370f] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:552: [proxy:837a370f] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:597: [proxy:837a370f] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102066449, "songmid": "001L1lqm4UAdyo", "title": "\u9000\u540e", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg", "album": "\u4f9d\u7136\u8303\u7279\u897f", "albumid": 13004, "albummid": "002jLGWe16Tf1H", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451521125"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451521125: True [2026-04-18 02:45:21] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55492 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:608: [proxy:837a370f] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:624: [proxy:837a370f] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:519: [proxy:1ee63a3b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:524: [proxy:1ee63a3b] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:552: [proxy:1ee63a3b] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:597: [proxy:1ee63a3b] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102066449, "songmid": "001L1lqm4UAdyo", "title": "\u9000\u540e", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg", "album": "\u4f9d\u7136\u8303\u7279\u897f", "albumid": 13004, "albummid": "002jLGWe16Tf1H", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451521341"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451521341: True [2026-04-18 02:45:21] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55502 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:608: [proxy:1ee63a3b] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:624: [proxy:1ee63a3b] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55492 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:645: [proxy:837a370f] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:683: [proxy:837a370f] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55484 - "GET /proxy/music?token=6uHVRwPz9Qc HTTP/1.1" 200 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:738: [proxy:837a370f] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55502 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:519: [proxy:ab045f09] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:524: [proxy:ab045f09] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:552: [proxy:ab045f09] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:597: [proxy:ab045f09] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:645: [proxy:1ee63a3b] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:683: [proxy:1ee63a3b] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:21] [0.5.1] [INFO] 122.97.136.182:14864 - "GET /proxy/music?token=2XuZfy2yVjg HTTP/1.1" 200 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:738: [proxy:1ee63a3b] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:45:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102066449, "songmid": "001L1lqm4UAdyo", "title": "\u9000\u540e", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg", "album": "\u4f9d\u7136\u8303\u7279\u897f", "albumid": 13004, "albummid": "002jLGWe16Tf1H", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451521579"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451521579: True [2026-04-18 02:45:21] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55514 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:608: [proxy:ab045f09] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:624: [proxy:ab045f09] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55514 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:645: [proxy:ab045f09] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:683: [proxy:ab045f09] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:45:21] [0.5.1] [INFO] 34.21.156.125:55504 - "GET /proxy/music?token=6uHVRwPz9Qc HTTP/1.1" 200 [2026-04-18 02:45:21] [0.5.1] [INFO] file.py:738: [proxy:ab045f09] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:45:21] [0.5.1] [INFO] music_utils.py:220: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json /tmp/tmp622yx4wg [2026-04-18 02:45:21] [0.5.1] [INFO] music_utils.py:231: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "1.405533" } } [2026-04-18 02:45:21] [0.5.1] [INFO] music_utils.py:240: Successfully extracted duration: 1.405533 seconds for file: /tmp/tmp622yx4wg [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:838: 网络音乐 退后-周杰伦 时长: 1.405533 秒 [2026-04-18 02:45:21] [0.5.1] [INFO] music_library.py:843: 已缓存网络音乐 退后-周杰伦 时长到内存: 1.405533 秒 [2026-04-18 02:45:21] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.744 秒 [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 0.661 秒 [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:21] [0.5.1] [INFO] device_player.py:808: 0.6614915571289062 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:21] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:21] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:退后-周杰伦 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 02:45:22] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:45:22] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:45:22] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:45:22] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:45:22] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=63WxahSFjJw [2026-04-18 02:45:22] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:45:23] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:23] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:45:23] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:45:23] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:45:23] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=63WxahSFjJw [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=63WxahSFjJw audio_id:1582971365183456177 [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=63WxahSFjJw ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:45:25] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:45:25] [0.5.1] [INFO] device_player.py:808: 299.25846437454226 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:45:25] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:45:25] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:45:25] [0.5.1] [INFO] file.py:519: [proxy:6e139cd4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:45:25] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:45:25] [0.5.1] [INFO] file.py:524: [proxy:6e139cd4] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:45:25] [0.5.1] [INFO] file.py:552: [proxy:6e139cd4] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:45:25] [0.5.1] [INFO] file.py:597: [proxy:6e139cd4] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:45:25] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:45:25] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 02:45:25] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776451525204"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:45:25] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451525204: True [2026-04-18 02:45:25] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776465925&Signature=ZjdV2FIL3Cl3wWNe5uq0mXmrBC~0TzkXxo9wdEqsb1t6m~bFas1RvrdoELUrBNAUljjJww4VSTMrkCqPL8ibhpEMV8ZemkafMksQhaV~qKSv6DrFFZ-Mt5wCPLtLp5xvVMKRNXV0IjehFjlBps9RX3ByafkHtwQU93Pg2RMR3qw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:45:25] [0.5.1] [INFO] 34.21.156.125:55528 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:45:25] [0.5.1] [INFO] file.py:608: [proxy:6e139cd4] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776465925&Signature=ZjdV2FIL3Cl3wWNe5uq0mXmrBC~0TzkXxo9wdEqsb1t6m~bFas1RvrdoELUrBNAUljjJww4VSTMrkCqPL8ibhpEMV8ZemkafMksQhaV~qKSv6DrFFZ-Mt5wCPLtLp5xvVMKRNXV0IjehFjlBps9RX3ByafkHtwQU93Pg2RMR3qw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:45:25] [0.5.1] [INFO] file.py:624: [proxy:6e139cd4] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776465925&Signature=ZjdV2FIL3Cl3wWNe5uq0mXmrBC~0TzkXxo9wdEqsb1t6m~bFas1RvrdoELUrBNAUljjJww4VSTMrkCqPL8ibhpEMV8ZemkafMksQhaV~qKSv6DrFFZ-Mt5wCPLtLp5xvVMKRNXV0IjehFjlBps9RX3ByafkHtwQU93Pg2RMR3qw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:45:26] [0.5.1] [INFO] file.py:645: [proxy:6e139cd4] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776465925&Signature=ZjdV2FIL3Cl3wWNe5uq0mXmrBC~0TzkXxo9wdEqsb1t6m~bFas1RvrdoELUrBNAUljjJww4VSTMrkCqPL8ibhpEMV8ZemkafMksQhaV~qKSv6DrFFZ-Mt5wCPLtLp5xvVMKRNXV0IjehFjlBps9RX3ByafkHtwQU93Pg2RMR3qw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 02:45:26] [0.5.1] [INFO] file.py:672: [proxy:6e139cd4] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776465925&Signature=ZjdV2FIL3Cl3wWNe5uq0mXmrBC~0TzkXxo9wdEqsb1t6m~bFas1RvrdoELUrBNAUljjJww4VSTMrkCqPL8ibhpEMV8ZemkafMksQhaV~qKSv6DrFFZ-Mt5wCPLtLp5xvVMKRNXV0IjehFjlBps9RX3ByafkHtwQU93Pg2RMR3qw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:45:27] [0.5.1] [INFO] 122.97.136.182:49011 - "GET /proxy/music?token=63WxahSFjJw HTTP/1.1" 200 [2026-04-18 02:46:06] [0.5.1] [INFO] 172.17.0.1:59040 - "GET / HTTP/1.0" 200 [2026-04-18 02:46:06] [0.5.1] [INFO] 172.17.0.1:48040 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 02:46:06] [0.5.1] [INFO] 172.17.0.1:48044 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 02:46:06] [0.5.1] [INFO] 172.17.0.1:48058 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 02:46:06] [0.5.1] [INFO] 172.17.0.1:48066 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48074 - "GET /static/default/index.html HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48078 - "GET /static/default/materialicons.woff2 HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48086 - "GET /static/default/materialiconsoutlined.woff2 HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48082 - "GET /static/default/jquery-3.7.1.min.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48100 - "GET /static/default/main.css?version=1775697572 HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48116 - "GET /static/default/md.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48138 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48128 - "GET /getversion HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48152 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48168 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:46:07] [0.5.1] [INFO] 172.17.0.1:48182 - "GET /getvolume?did=web_device HTTP/1.0" 200 [2026-04-18 02:46:09] [0.5.1] [INFO] 172.17.0.1:48196 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48210 - "GET /static/default/index.html HTTP/1.0" 304 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48218 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48214 - "GET /getversion HTTP/1.0" 200 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48228 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48238 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48254 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48256 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48270 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4NzIuNDU1ODIxMywiaWF0IjoxNzc2NDUxNTcyLjQ1NTgyMjJ9.tIUKRe8_ZnYY3ePt-69vqPvWU8yRKeAWNul39uZmSXo HTTP/1.0" 404 [2026-04-18 02:46:12] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:46:12] [0.5.1] [INFO] device_player.py:834: get_volume. volume:8 [2026-04-18 02:46:12] [0.5.1] [INFO] 172.17.0.1:48248 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:14] [0.5.1] [INFO] 172.17.0.1:48278 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:46:15] [0.5.1] [INFO] 172.17.0.1:48286 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:16] [0.5.1] [INFO] 172.17.0.1:48298 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4NzUuODE4Njk4NCwiaWF0IjoxNzc2NDUxNTc1LjgxODY5OTR9.w4z-S6D3hwL-QWC9Vs85TTyJFmdLIZQ7awlS3-pjBm4 HTTP/1.0" 404 [2026-04-18 02:46:19] [0.5.1] [INFO] 172.17.0.1:46340 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:19] [0.5.1] [INFO] 172.17.0.1:46342 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4NzkuMTUxNTQ3NCwiaWF0IjoxNzc2NDUxNTc5LjE1MTU0ODF9.vvVzFmoHKfARfN3o6E76Ah_AxRnSkRxYo_Q7HpO-IYs HTTP/1.0" 404 [2026-04-18 02:46:22] [0.5.1] [INFO] music_library.py:1072: get_music_url name:屋顶-周杰伦、温岚、吴宗宪 [2026-04-18 02:46:22] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:46:22] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:屋顶-周杰伦、温岚、吴宗宪, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5rip5bKa44CB5ZC05a6X5a6qIiwgIm5hbWUiOiAi5bGL6aG2IiwgImFsYnVtTmFtZSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAiYWxidW1JZCI6ICI1MTIxNzUiLCAic29uZ21pZCI6ICJ3eV81MjU3MTM4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84MUJzeHhob21KNGFKWll2RWJ5UGt3PT0vMTA5OTUxMTY1NjcxMTgyNjg0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYxLjU5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYxLjU5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI1NzEzOCIsICJ0aXRsZSI6ICLlsYvpobYiLCAiZHVyYXRpb24iOiAiMDU6MTkiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgea4qeWymuOAgeWQtOWul+WuqiIsICJhbGJ1bSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvODFCc3h4aG9tSjRhSlpZdkVieVBrdz09LzEwOTk1MTE2NTY3MTE4MjY4NC5qcGcifQ== [2026-04-18 02:46:22] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=FBT7VNVo7rI [2026-04-18 02:46:22] [0.5.1] [INFO] 172.17.0.1:46356 - "GET /musicinfo?name=%E5%B1%8B%E9%A1%B6-%E5%91%A8%E6%9D%B0%E4%BC%A6%E3%80%81%E6%B8%A9%E5%B2%9A%E3%80%81%E5%90%B4%E5%AE%97%E5%AE%AA HTTP/1.0" 200 [2026-04-18 02:46:22] [0.5.1] [INFO] 172.17.0.1:46364 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:22] [0.5.1] [INFO] 172.17.0.1:46372 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4ODIuNDg2NTI2MywiaWF0IjoxNzc2NDUxNTgyLjQ4NjUyNzJ9.7Zw3calGykaVU_yNy3mLsj_87k4mLuKeAEGUZelO1ak HTTP/1.0" 404 [2026-04-18 02:46:25] [0.5.1] [INFO] music_library.py:1072: get_music_url name:屋顶-周杰伦、温岚、吴宗宪 [2026-04-18 02:46:25] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:46:25] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:屋顶-周杰伦、温岚、吴宗宪, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5rip5bKa44CB5ZC05a6X5a6qIiwgIm5hbWUiOiAi5bGL6aG2IiwgImFsYnVtTmFtZSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAiYWxidW1JZCI6ICI1MTIxNzUiLCAic29uZ21pZCI6ICJ3eV81MjU3MTM4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84MUJzeHhob21KNGFKWll2RWJ5UGt3PT0vMTA5OTUxMTY1NjcxMTgyNjg0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYxLjU5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYxLjU5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI1NzEzOCIsICJ0aXRsZSI6ICLlsYvpobYiLCAiZHVyYXRpb24iOiAiMDU6MTkiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgea4qeWymuOAgeWQtOWul+WuqiIsICJhbGJ1bSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvODFCc3h4aG9tSjRhSlpZdkVieVBrdz09LzEwOTk1MTE2NTY3MTE4MjY4NC5qcGcifQ== [2026-04-18 02:46:25] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=Mi4pxf0TAvo [2026-04-18 02:46:25] [0.5.1] [INFO] 172.17.0.1:46386 - "GET /musicinfo?name=%E5%B1%8B%E9%A1%B6-%E5%91%A8%E6%9D%B0%E4%BC%A6%E3%80%81%E6%B8%A9%E5%B2%9A%E3%80%81%E5%90%B4%E5%AE%97%E5%AE%AA HTTP/1.0" 200 [2026-04-18 02:46:25] [0.5.1] [INFO] 172.17.0.1:46400 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:26] [0.5.1] [INFO] 172.17.0.1:46412 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4ODUuODMwNTczOCwiaWF0IjoxNzc2NDUxNTg1LjgzMDU3NDV9.ccn24XsLqJ1p14hXB2oaOVvmrknIVwMW4KHL3RNSD8I HTTP/1.0" 404 [2026-04-18 02:46:29] [0.5.1] [INFO] 172.17.0.1:59944 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:29] [0.5.1] [INFO] 172.17.0.1:59946 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4ODkuMTg1Mzk2NCwiaWF0IjoxNzc2NDUxNTg5LjE4NTM5NzF9.024vwN8FhnoycX5Bs_lCZimJGs43dFTKV7F1oa-3BTM HTTP/1.0" 404 [2026-04-18 02:46:31] [0.5.1] [INFO] music_library.py:1072: get_music_url name:屋顶-周杰伦、温岚、吴宗宪 [2026-04-18 02:46:31] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:46:31] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:屋顶-周杰伦、温岚、吴宗宪, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5rip5bKa44CB5ZC05a6X5a6qIiwgIm5hbWUiOiAi5bGL6aG2IiwgImFsYnVtTmFtZSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAiYWxidW1JZCI6ICI1MTIxNzUiLCAic29uZ21pZCI6ICJ3eV81MjU3MTM4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84MUJzeHhob21KNGFKWll2RWJ5UGt3PT0vMTA5OTUxMTY1NjcxMTgyNjg0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYxLjU5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYxLjU5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI1NzEzOCIsICJ0aXRsZSI6ICLlsYvpobYiLCAiZHVyYXRpb24iOiAiMDU6MTkiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgea4qeWymuOAgeWQtOWul+WuqiIsICJhbGJ1bSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvODFCc3h4aG9tSjRhSlpZdkVieVBrdz09LzEwOTk1MTE2NTY3MTE4MjY4NC5qcGcifQ== [2026-04-18 02:46:31] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=qwZOO4nIV_I [2026-04-18 02:46:31] [0.5.1] [INFO] 172.17.0.1:59962 - "GET /musicinfo?name=%E5%B1%8B%E9%A1%B6-%E5%91%A8%E6%9D%B0%E4%BC%A6%E3%80%81%E6%B8%A9%E5%B2%9A%E3%80%81%E5%90%B4%E5%AE%97%E5%AE%AA HTTP/1.0" 200 [2026-04-18 02:46:32] [0.5.1] [INFO] 172.17.0.1:59978 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:32] [0.5.1] [INFO] 172.17.0.1:59992 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4OTIuNTMzNTE1LCJpYXQiOjE3NzY0NTE1OTIuNTMzNTE1N30.6kzoQIvgxDt0lCxTEe0Jaqhh-BvCTiJwfMvW4ZOm2bo HTTP/1.0" 404 [2026-04-18 02:46:32] [0.5.1] [INFO] music_library.py:1072: get_music_url name:屋顶-周杰伦、温岚、吴宗宪 [2026-04-18 02:46:32] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:46:32] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:屋顶-周杰伦、温岚、吴宗宪, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi5ZGo5p2w5Lym44CB5rip5bKa44CB5ZC05a6X5a6qIiwgIm5hbWUiOiAi5bGL6aG2IiwgImFsYnVtTmFtZSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAiYWxidW1JZCI6ICI1MTIxNzUiLCAic29uZ21pZCI6ICJ3eV81MjU3MTM4IiwgImNvcHlyaWdodElkIjogIiIsICJzb3VyY2UiOiAid3kiLCAiaW50ZXJ2YWwiOiAiMDU6MTkiLCAiaW1nIjogImh0dHBzOi8vcDIubXVzaWMuMTI2Lm5ldC84MUJzeHhob21KNGFKWll2RWJ5UGt3PT0vMTA5OTUxMTY1NjcxMTgyNjg0LmpwZyIsICJscmMiOiBudWxsLCAibHJjVXJsIjogIiIsICJ0eXBlcyI6IFt7InR5cGUiOiAiMTI4ayIsICJzaXplIjogIjQuODcgTUIifSwgeyJ0eXBlIjogIjMyMGsiLCAic2l6ZSI6ICIxMi4xNyBNQiJ9LCB7InR5cGUiOiAiZmxhYyIsICJzaXplIjogIjYxLjU5IE1CIn1dLCAiX3R5cGVzIjogeyJmbGFjIjogeyJzaXplIjogIjYxLjU5IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjEyLjE3IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjQuODcgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfNTI1NzEzOCIsICJ0aXRsZSI6ICLlsYvpobYiLCAiZHVyYXRpb24iOiAiMDU6MTkiLCAiYXJ0aXN0IjogIuWRqOadsOS8puOAgea4qeWymuOAgeWQtOWul+WuqiIsICJhbGJ1bSI6ICLnlLflpbPmg4XmrYzlr7nllLHlhqDlhpvlhajorrDlvZUiLCAicGxhdGZvcm0iOiAid3kiLCAiYXJ0d29yayI6ICJodHRwczovL3AyLm11c2ljLjEyNi5uZXQvODFCc3h4aG9tSjRhSlpZdkVieVBrdz09LzEwOTk1MTE2NTY3MTE4MjY4NC5qcGcifQ== [2026-04-18 02:46:32] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=CON2wnW_Hlg [2026-04-18 02:46:32] [0.5.1] [INFO] 172.17.0.1:60004 - "GET /musicinfo?name=%E5%B1%8B%E9%A1%B6-%E5%91%A8%E6%9D%B0%E4%BC%A6%E3%80%81%E6%B8%A9%E5%B2%9A%E3%80%81%E5%90%B4%E5%AE%97%E5%AE%AA HTTP/1.0" 200 [2026-04-18 02:46:35] [0.5.1] [INFO] 172.17.0.1:60008 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:46:36] [0.5.1] [INFO] 172.17.0.1:60010 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE4OTUuODk2NzMwNCwiaWF0IjoxNzc2NDUxNTk1Ljg5NjczMTF9.B6W98-J3PTqnoIfA_O-ltI7XTllwrNLOzGY-wbT_e3E HTTP/1.0" 404 [2026-04-18 02:46:37] [0.5.1] [INFO] 172.17.0.1:52324 - "GET /static/onlineSearch/index.html HTTP/1.0" 200 [2026-04-18 02:46:38] [0.5.1] [INFO] 172.17.0.1:52326 - "GET /static/onlineSearch/config.js HTTP/1.0" 200 [2026-04-18 02:46:38] [0.5.1] [INFO] 172.17.0.1:52350 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:46:38] [0.5.1] [INFO] 172.17.0.1:52338 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 02:46:40] [0.5.1] [INFO] 172.17.0.1:52354 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:46:45] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:46:45] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 6} [2026-04-18 02:46:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 6}, "id": "msg_1776451605373"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451605373: True [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:46:45] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 6} [2026-04-18 02:46:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 6}, "id": "msg_1776451605776"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:46:46] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451605776: True [2026-04-18 02:46:46] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:46:46] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:46:46] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556362, 'songmid': '0044SaFh0apuR2', 'title': '那天下雨了', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680284, 'songmid': '0022b7OX2STU86', 'title': '我落泪情绪零碎', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177680, 'songmid': '003xv4w313tZHV', 'title': '红尘客栈', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340965, 'songmid': '004Yi5BD3ksoAN', 'title': '蒲公英的约定', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101787870, 'songmid': '002u8ZOM4C7QF4', 'title': '手写的从前', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556366, 'songmid': '003WPrjL4dimFE', 'title': '爱琴海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449201, 'songmid': '00128N3r2SYKMF', 'title': '兰亭序', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5105986, 'songmid': '001xd0HI0X9GNq', 'title': '一路向北', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002MAeob3zLXwZ.jpg', 'album': 'J III MP3 Player', 'albumid': 14311, 'albummid': '002MAeob3zLXwZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556373, 'songmid': '003FdJZH1wljMU', 'title': '西西里', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101091484, 'songmid': '004BhQke4adHcf', 'title': '给我一首歌的时间', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97761, 'songmid': '002OKIox28ad9a', 'title': '半岛铁盒', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 10921907, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦的床边故事', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092257, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}] [2026-04-18 02:46:46] [0.5.1] [INFO] 172.17.0.1:52366 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:46:55] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:46:55] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 2, 'limit': 6} [2026-04-18 02:46:55] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 2, "limit": 6}, "id": "msg_1776451615538"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451615538: True [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:46:55] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 2, 'limit': 6} [2026-04-18 02:46:55] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 2, "limit": 6}, "id": "msg_1776451615942"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:46:56] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451615942: True [2026-04-18 02:46:56] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:46:56] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:46:56] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478382, 'artwork': 'https://i.audiomack.com/younghsu/72dae5b8c6.webp', 'duration': 261, 'title': '周杰伦 - 明明就.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ming-ming-jiuflac', 'platform': 'Audiomack'}, {'id': 11478563, 'artwork': 'https://i.audiomack.com/younghsu/edaea7047e.webp', 'duration': 270, 'title': '周杰伦-等你下课.flac', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-deng-ni-xia-keflac', 'platform': 'Audiomack'}, {'id': 11478066, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 给我一首歌的时间.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-gei-wo-yi-shou-ge-de-shi-jianflac', 'platform': 'Audiomack'}, {'id': 97740, 'songmid': '002usg9o4GTAKf', 'title': '爱在西元前', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000I5jJB3blWeN.jpg', 'album': '范特西', 'albumid': 8217, 'albummid': '000I5jJB3blWeN', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718475, 'songmid': '0027oMO61wWi55', 'title': '发如雪', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 212877900, 'songmid': '001J5QJL1pRQYB', 'title': '等你下课 (with 杨瑞代)', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003bSL0v4bpKAx.jpg', 'album': '等你下课', 'albumid': 3883404, 'albummid': '003bSL0v4bpKAx', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177785, 'songmid': '003ZrdgZ0UnjDl', 'title': '最长的电影', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680278, 'songmid': '00265Jxe3JzXOJ', 'title': '说了再见', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 403778, 'songmid': '002MXZNu1GToOk', 'title': '不能说的秘密', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001UP7mW458ipG.jpg', 'album': '不能说的秘密 电影原声带', 'albumid': 32611, 'albummid': '001UP7mW458ipG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449200, 'songmid': '0042QMDR1VzSsx', 'title': '说好的幸福呢', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 237773700, 'songmid': '001qvvgF38HVc4', 'title': '说好不哭 (with 五月天阿信)', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002gBTVk4JEE2T.jpg', 'album': '说好不哭(with 五月天阿信)', 'albumid': 7876962, 'albummid': '002gBTVk4JEE2T', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 3585884, 'songmid': '000oW8J53xPhZA', 'title': '明明就', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97759, 'songmid': '0017K7gL4WYnw2', 'title': '反方向的钟', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000f01724fd7TH.jpg', 'album': 'Jay', 'albumid': 8218, 'albummid': '000f01724fd7TH', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102700397, 'songmid': '001T3JAT15palI', 'title': '我不配', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97762, 'songmid': '000NQDjk4BA0W3', 'title': '暗号', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680279, 'songmid': '004emQMs09Z1lz', 'title': '烟花易冷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556367, 'songmid': '000UVWY709sJLh', 'title': 'I Do', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97744, 'songmid': '0009BCJK1nRaad', 'title': '简单爱', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000I5jJB3blWeN.jpg', 'album': '范特西', 'albumid': 8217, 'albummid': '000I5jJB3blWeN', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556363, 'songmid': '0007XPND1Mf9dN', 'title': '湘女多情', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556370, 'songmid': '004fFOIE1n0fhE', 'title': '淘金小镇', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 107192078, 'songmid': '003OUlho2HcRHC', 'title': '告白气球', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003RMaRI1iFoYd.jpg', 'album': '周杰伦的床边故事', 'albumid': 1458791, 'albummid': '003RMaRI1iFoYd', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556365, 'songmid': '003wwuRJ3OmrGc', 'title': '七月的极光', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97784, 'songmid': '0036g6g628i2gI', 'title': '轨迹', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001BGzMs369FzU.jpg', 'album': '寻找周杰伦', 'albumid': 8221, 'albummid': '001BGzMs369FzU', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 19092239, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 272, 'title': '暗号', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'an-hao', 'platform': 'Audiomack'}, {'id': 19092258, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 239, 'title': '搁浅', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ge-qian', 'platform': 'Audiomack'}, {'id': 19092238, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 186, 'title': 'Mojito', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'mojito', 'platform': 'Audiomack'}, {'id': 19092252, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 300, 'title': '发如雪', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'fa-ru-xue', 'platform': 'Audiomack'}, {'id': 19092268, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 277, 'title': '霍元甲', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'huo-yuan-jia', 'platform': 'Audiomack'}, {'id': 19092253, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 259, 'title': '反方向的钟', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'fan-fang-xiang-de-zhong', 'platform': 'Audiomack'}, {'id': 11478038, 'artwork': 'https://i.audiomack.com/younghsu/d5abaa2cfd.webp', 'duration': 297, 'title': '不能说的秘密', 'artist': '周杰伦', 'album': '', 'url_slug': 'bu-neng-shuo-de-mi-mi', 'platform': 'Audiomack'}, {'id': 18955309, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 343, 'title': '以父之名', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yi-fu-zhi-ming', 'platform': 'Audiomack'}, {'id': 11478054, 'artwork': 'https://i.audiomack.com/younghsu/c2023367f2.webp', 'duration': 259, 'title': '反方向的钟.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'fan-fang-xiang-de-zhongflac', 'platform': 'Audiomack'}, {'id': 19092295, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 283, 'title': '说了再见', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shuo-le-zai-jian', 'platform': 'Audiomack'}, {'id': 19092230, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 199, 'title': '稻香', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'dao-xiang-1', 'platform': 'Audiomack'}, {'id': 19092234, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '爱的飞行日记', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ai-de-fei-xing-ri-ji', 'platform': 'Audiomack'}, {'id': 19092245, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 297, 'title': '不能说的秘密', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'bu-neng-shuo-de-mi-mi', 'platform': 'Audiomack'}, {'id': 14925978, 'artwork': 'https://i.audiomack.com/hdplus/4cb5298750.webp', 'duration': 254, 'title': '给我一首歌的时间', 'artist': '周杰伦', 'album': '魔杰座', 'url_slug': '14925978', 'platform': 'Audiomack'}, {'id': 19092294, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 257, 'title': '说好的幸福呢', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shuo-hao-de-xing-fu-ne', 'platform': 'Audiomack'}, {'id': 19092284, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 254, 'title': '兰亭序', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'lan-ting-xu', 'platform': 'Audiomack'}, {'id': 19092266, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 265, 'title': '花海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'hua-hai', 'platform': 'Audiomack'}] [2026-04-18 02:46:56] [0.5.1] [INFO] 172.17.0.1:35018 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=2&limit=20 HTTP/1.0" 200 [2026-04-18 02:46:59] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:46:59] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 3, 'limit': 6} [2026-04-18 02:46:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 3, "limit": 6}, "id": "msg_1776451619387"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451619387: True [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:46:59] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 3, 'limit': 6} [2026-04-18 02:46:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 3, "limit": 6}, "id": "msg_1776451619690"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:00] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451619690: True [2026-04-18 02:47:00] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:47:00] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:47:00] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478522, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 266, 'title': '周杰伦 - 听妈妈的话.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ting-ma-ma-de-huaflac', 'platform': 'Audiomack'}, {'id': 11478407, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 248, 'title': '周杰伦 - 蒲公英的约定.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-pu-gong-ying-de-yue-dingflac', 'platform': 'Audiomack'}, {'id': 11478548, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 256, 'title': '周杰伦&梁心颐 - 珊瑚海.FLAC', 'artist': '周杰伦&梁心颐', 'album': '', 'url_slug': 'zhou-jie-lunliang-xin-yi-shan-hu-haiflac', 'platform': 'Audiomack'}, {'id': 11478496, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 257, 'title': '周杰伦 - 说好的幸福呢.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-shuo-hao-de-xing-fu-neflac', 'platform': 'Audiomack'}, {'id': 72986048, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/dc14fb2e54.webp', 'duration': 2611, 'title': '3 周杰伦第三张专辑', 'artist': '周杰伦 14张专辑', 'album': 'Jay Chou', 'url_slug': '3-zhou-jie-lun-di-san-zhang-zhuan-jimp3', 'platform': 'Audiomack'}, {'id': 72965497, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 289, 'title': '030 [Jay x JJ Part 2] 周杰伦 & 林俊杰 算什么男人 X 背对背拥抱 (Mashup)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '030-jay-x-jj-part-2-zhou-jie-lun-lin-jun-jie-suan-shen-me-nan-ren-x-bei-dui-bei-yong-bao-mashup', 'platform': 'Audiomack'}, {'id': 3586263, 'songmid': '002tNzue0g8xQA', 'title': '爱你没差', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066257, 'songmid': '002hXDfk0LX9KO', 'title': '听妈妈的话', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 247261229, 'songmid': '001PLl3C4gPSCI', 'title': '我是如此相信', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001hGx1Z0so1YX.jpg', 'album': '我是如此相信', 'albumid': 9612009, 'albummid': '001hGx1Z0so1YX', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556369, 'songmid': '003kFxD41vOh6l', 'title': '女儿殿下', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718486, 'songmid': '001K0AjL2huSxx', 'title': '珊瑚海', 'artist': '周杰伦, Lara梁心颐', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5244390, 'songmid': '002elTc93yuXu2', 'title': '你听得到', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 466722, 'songmid': '0010ibBn4bYFTk', 'title': '夜的第七章', 'artist': '周杰伦, 潘儿', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556371, 'songmid': '002Rf1gB25DDL4', 'title': '乡间的路', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680282, 'songmid': '002zouNc0L8Llg', 'title': '雨下一整晚', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065753, 'songmid': '003nEQHr3Ceet5', 'title': '园游会', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97782, 'songmid': '003ZdxP61ClQZ5', 'title': '断了的弦', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001BGzMs369FzU.jpg', 'album': '寻找周杰伦', 'albumid': 8221, 'albummid': '001BGzMs369FzU', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340966, 'songmid': '004bRWFg3fej9y', 'title': '彩虹', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97771, 'songmid': '001n4C3p1yv0FU', 'title': '以父之名', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556364, 'songmid': '000bcKcM3AaJCU', 'title': '谁稀罕', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101369814, 'songmid': '001Js78a40BZU6', 'title': '算什么男人', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556372, 'songmid': '000fpbFh2Uu80G', 'title': '圣诞星 (feat. 杨瑞代)', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97767, 'songmid': '003rxgIM2eOFSF', 'title': '回到过去', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718480, 'songmid': '003iY6cU4YG0xi', 'title': '黑色毛衣', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97775, 'songmid': '003uEbEr0jcW7c', 'title': '东风破', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97758, 'songmid': '002l8JN71d2Dxy', 'title': '龙卷风', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000f01724fd7TH.jpg', 'album': 'Jay', 'albumid': 8218, 'albummid': '000f01724fd7TH', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 19092263, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 327, 'title': '轨迹', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gui-ji', 'platform': 'Audiomack'}, {'id': 19092259, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 254, 'title': '给我一首歌的时间', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gei-wo-yi-shou-ge-de-shi-jian', 'platform': 'Audiomack'}, {'id': 19092249, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 270, 'title': '等你下课(with 杨瑞代)', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'deng-ni-xia-ke-with-yang-rui-dai', 'platform': 'Audiomack'}, {'id': 11470078, 'artwork': 'https://i.audiomack.com/younghsu/3bb801c368.webp', 'duration': 235, 'title': '爱在西元前.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'ai-zai-xi-yuan-qianflac', 'platform': 'Audiomack'}, {'id': 19092243, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 207, 'title': '本草纲目', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ben-cao-gang-mu', 'platform': 'Audiomack'}, {'id': 19092246, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 262, 'title': '彩虹', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'cai-hong', 'platform': 'Audiomack'}, {'id': 11470100, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 272, 'title': '暗号.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'an-haoflac', 'platform': 'Audiomack'}, {'id': 19092291, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 297, 'title': '七里香', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qi-li-xiang', 'platform': 'Audiomack'}, {'id': 19092304, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 227, 'title': '夜曲', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-qu', 'platform': 'Audiomack'}, {'id': 15232775, 'artwork': 'https://i.audiomack.com/hdplus/c1128d6f09.webp', 'duration': 234, 'title': '回到过去', 'artist': '周杰伦', 'album': '八度空间', 'url_slug': '15232775', 'platform': 'Audiomack'}, {'id': 19092306, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 295, 'title': '一路向北', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yi-lu-xiang-bei', 'platform': 'Audiomack'}, {'id': 19092267, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 234, 'title': '回到过去', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'hui-dao-guo-qu', 'platform': 'Audiomack'}, {'id': 19092309, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 236, 'title': '最长的电影', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'zui-zhang-de-dian-ying', 'platform': 'Audiomack'}, {'id': 19092286, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 246, 'title': '蒲公英的约定', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'pu-gong-ying-de-yue-ding', 'platform': 'Audiomack'}] [2026-04-18 02:47:00] [0.5.1] [INFO] 172.17.0.1:56028 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=3&limit=20 HTTP/1.0" 200 [2026-04-18 02:47:03] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:47:03] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 4, 'limit': 6} [2026-04-18 02:47:03] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 4, "limit": 6}, "id": "msg_1776451623632"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451623632: True [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:47:03] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 4, 'limit': 6} [2026-04-18 02:47:03] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 4, "limit": 6}, "id": "msg_1776451623934"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:04] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451623934: True [2026-04-18 02:47:04] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:47:04] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:47:04] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478540, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 236, 'title': '周杰伦 - 最长的电影.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-zui-chang-de-dian-yingflac', 'platform': 'Audiomack'}, {'id': 11478069, 'artwork': 'https://i.audiomack.com/younghsu/e5c079573b.webp', 'duration': 327, 'title': '周杰伦 - 轨迹.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-gui-jiflac', 'platform': 'Audiomack'}, {'id': 11478411, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 240, 'title': '周杰伦 - 青花瓷.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qing-hua-ciflac', 'platform': 'Audiomack'}, {'id': 11478752, 'artwork': 'https://i.audiomack.com/younghsu/842b5dfd74.webp', 'duration': 264, 'title': '周杰伦 - 烟花易冷.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yan-hua-yi-lengflac', 'platform': 'Audiomack'}, {'id': 107192076, 'songmid': '000sxzol11raSd', 'title': '不该 (with aMEI)', 'artist': '周杰伦, 张惠妹', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003RMaRI1iFoYd.jpg', 'album': '周杰伦的床边故事', 'albumid': 1458791, 'albummid': '003RMaRI1iFoYd', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102320103, 'songmid': '000DdOAF0ED7i4', 'title': '白色风车', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 3585890, 'songmid': '002jkBM53MLB9Q', 'title': '大笨钟', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065757, 'songmid': '002XWgfo0IKPOH', 'title': '借口', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97750, 'songmid': '004VR0Hn3bkqqE', 'title': '可爱女人', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000f01724fd7TH.jpg', 'album': 'Jay', 'albumid': 8218, 'albummid': '000f01724fd7TH', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556361, 'songmid': '0001bLnu2ULqYf', 'title': '太阳之子', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718482, 'songmid': '002fi7iG0VvUj2', 'title': '浪漫手机', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97745, 'songmid': '0020qX4u2JJRxK', 'title': '开不了口', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000I5jJB3blWeN.jpg', 'album': '范特西', 'albumid': 8217, 'albummid': '000I5jJB3blWeN', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97766, 'songmid': '002IyJxz0FBFEJ', 'title': '爷爷泡的茶', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102698215, 'songmid': '003FRy0r0wyGHl', 'title': '千里之外', 'artist': '周杰伦, 费玉清', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 107192080, 'songmid': '000eskGX0ijIFi', 'title': '爱情废柴', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003RMaRI1iFoYd.jpg', 'album': '周杰伦的床边故事', 'albumid': 1458791, 'albummid': '003RMaRI1iFoYd', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680287, 'songmid': '004JQ70v4Fddyj', 'title': '超人不会飞', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97743, 'songmid': '000amRvH3wxv56', 'title': '安静', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000I5jJB3blWeN.jpg', 'album': '范特西', 'albumid': 8217, 'albummid': '000I5jJB3blWeN', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97755, 'songmid': '0006rBfE3htPqG', 'title': '黑色幽默', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000f01724fd7TH.jpg', 'album': 'Jay', 'albumid': 8218, 'albummid': '000f01724fd7TH', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680285, 'songmid': '003CxS6w14OQyM', 'title': '爱的飞行日记', 'artist': '周杰伦, 杨瑞代', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102204538, 'songmid': '001bnNGN127Kbq', 'title': '阳光宅男', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 165121, 'songmid': '002HeqcH2GMiOL', 'title': '霍元甲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000OixvE1YjIqd.jpg', 'album': '霍元甲', 'albumid': 14536, 'albummid': '000OixvE1YjIqd', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065748, 'songmid': '0027gHes1HjRNe', 'title': '外婆', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101787873, 'songmid': '0026N9sT4aBGcV', 'title': '听见下雨的声音', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97778, 'songmid': '001FSVRg08JLpi', 'title': '她的睫毛', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 19092326, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 251, 'title': '龙卷风', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'long-juan-feng', 'platform': 'Audiomack'}, {'id': 19092279, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 294, 'title': '菊花台', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ju-hua-tai', 'platform': 'Audiomack'}, {'id': 19092298, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 264, 'title': '听妈妈的话', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ting-ma-ma-de-hua', 'platform': 'Audiomack'}, {'id': 19092264, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 252, 'title': '黑色毛衣', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'hei-se-mao-yi', 'platform': 'Audiomack'}, {'id': 19616949, 'artwork': 'https://i.audiomack.com/vin-317/3b35ac7808.webp', 'duration': 273, 'title': '白色风车', 'artist': '周杰伦', 'album': '依然范特西', 'url_slug': 'bai-se-feng-che', 'platform': 'Audiomack'}, {'id': 19092303, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 241, 'title': '爷爷泡的茶', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-ye-pao-de-cha', 'platform': 'Audiomack'}, {'id': 19092302, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 263, 'title': '烟花易冷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'yan-hua-yi-leng', 'platform': 'Audiomack'}, {'id': 19092299, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 260, 'title': '退后', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'tui-hou', 'platform': 'Audiomack'}, {'id': 19617141, 'artwork': 'https://i.audiomack.com/vin-317/4431559d36.webp', 'duration': 224, 'title': '稻香', 'artist': '周杰伦', 'album': '魔杰座', 'url_slug': 'dao-xiang', 'platform': 'Audiomack'}, {'id': 11478040, 'artwork': 'https://i.audiomack.com/younghsu/98f737d424.webp', 'duration': 264, 'title': '彩虹', 'artist': '周杰伦', 'album': '', 'url_slug': 'cai-hong', 'platform': 'Audiomack'}, {'id': 19092082, 'artwork': 'https://i.audiomack.com/manmyl/acc0cb7bfa.webp', 'duration': 245, 'title': '最伟大的作品-FLAC', 'artist': '周杰伦', 'album': '周杰伦新专辑《最伟大的作品》完整版', 'url_slug': 'zui-wei-da-de-zuo-pin', 'platform': 'Audiomack'}, {'id': 19092301, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 260, 'title': '星晴', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'xing-qing', 'platform': 'Audiomack'}, {'id': 18980894, 'artwork': 'https://i.audiomack.com/manmyl/e856b7e593.webp', 'duration': 226, 'title': '对不起', 'artist': '周杰伦', 'album': '范特西', 'url_slug': 'dui-bu-qi', 'platform': 'Audiomack'}, {'id': 19092297, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 242, 'title': '甜甜的', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'tian-tian-de', 'platform': 'Audiomack'}, {'id': 81590103, 'artwork': 'https://i.audiomack.com/997swpnsjw/fa6f23282b.webp', 'duration': 296, 'title': '烟花易冷 R&B', 'artist': '周杰伦', 'album': '', 'url_slug': 'yan-hua-yi-leng-rb', 'platform': 'Audiomack'}, {'id': 19092300, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 267, 'title': '我是如此相信', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'wo-shi-ru-ci-xiang-xin', 'platform': 'Audiomack'}] [2026-04-18 02:47:04] [0.5.1] [INFO] 172.17.0.1:56044 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=4&limit=20 HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] 172.17.0.1:39152 - "GET /static/onlineSearch/setting.html HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] 172.17.0.1:39170 - "GET /static/onlineSearch/setting-lxserver.js HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] 172.17.0.1:39184 - "GET /static/onlineSearch/setting-musicfree.js HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] 172.17.0.1:39160 - "GET /static/onlineSearch/setting-backend.js HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] 172.17.0.1:39198 - "GET /api/password/check HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] 172.17.0.1:39212 - "GET /api/back-conf/load HTTP/1.0" 200 [2026-04-18 02:47:20] [0.5.1] [INFO] js_plugin_manager.py:2456: Reloading all plugins... [2026-04-18 02:47:20] [0.5.1] [INFO] js_plugin_manager.py:903: Plugins directory: conf/js_plugins [2026-04-18 02:47:20] [0.5.1] [INFO] js_plugin_manager.py:904: Plugins config file: conf/plugins-config.json [2026-04-18 02:47:20] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: Audiomack [2026-04-18 02:47:20] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:47:20] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1776451640743"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:20] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451640743: True [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: Audiomack [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 聚合音源 特供版 [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:47:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u805a\u5408\u97f3\u6e90 \u7279\u4f9b\u7248", "code": "/*!\n * @name \u5168\u8c46\u8981[\u805a\u5408\u97f3\u6e90]\n * @description \u8fed\u4ee39.3\u7248\u672c\uff0c\u805a\u5408 \u661f\u6d77/\u6eaf\u97f3/\u5ff5\u5fc3/\u957f\u9752/\u6b4c\u4e00\u5200\u4e13\u5c5e\u6c7d\u6c34\u97f3\u4e50\uff0c\u591a\u94fe\u8def\u81ea\u52a8\u56de\u9000\n * @version 9.3 93\u7279\u4f9b\u7248 DeepSeek\u4f18\u5316\n * @author \u5168\u8c46\u8981 and Gemini\u4f18\u5316 Toskysun\u53bb\u6df7\u6dc6 TZB679\u517c\u5bb9\u6027\u5904\u7406\n * @contribution DeepSeek\u4f18\u5316\n */\n\n// --- \u5e38\u91cf\u5b9a\u4e49 ---\nconst CACHE_TTL_MS = 21600000; // 6\u5c0f\u65f6\nconst CACHE_MAX_SIZE = 500;\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\n// API \u7aef\u70b9\nconst XINGHAI_MAIN_API = \"https://music-api.gdstudio.xyz/api.php?use_xbridge3=true&loader_name=forest&need_sec_link=1&sec_link_scene=im&theme=light\";\nconst XINGHAI_BACKUP_API = \"https://music-dl.sayqz.com/api/\";\nconst SUYIN_QQ_API = \"https://oiapi.net/api/QQ_Music\";\nconst SUYIN_QQ_KEY = \"oiapi-ef6133b7-ac2f-dc7d-878c-d3e207a82575\";\nconst SUYIN_163_API = \"https://oiapi.net/api/Music_163\";\nconst SUYIN_KUWO_API = \"https://oiapi.net/api/Kuwo\";\nconst SUYIN_MIGU_API = \"https://api.xcvts.cn/api/music/migu\";\n\n// Huibq / \u8046\u5ddd API\uff08\u9700\u81ea\u884c\u914d\u7f6e\u6709\u6548\u5730\u5740\u4e0e\u5bc6\u94a5\uff09\nconst HUIBQ_API = \"https://api.huibq.com/api\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\nconst HUIBQ_REQUEST_KEY = \"your_key_here\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5bc6\u94a5\nconst LINGCHUAN_API = \"https://api.lingchuan.com/v1\"; // \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u5730\u5740\n\n// \u957f\u9752SVIP URL\u6a21\u677f\nconst CHANGQING_URL_TEMPLATES = {\n tx: \"http://175.27.166.236/kgqq/qq.php?type=mp3&id={id}&level={level}\",\n wy: \"http://175.27.166.236/wy/wy.php?type=mp3&id={id}&level={level}\",\n kw: \"https://musicapi.haitangw.net/music/kw.php?type=mp3&id={id}&level={level}\",\n kg: \"https://music.haitangw.cc/kgqq/kg.php?type=mp3&id={id}&level={level}\",\n mg: \"https://music.haitangw.cc/musicapi/mg.php?type=mp3&id={id}&level={level}\"\n};\n\n// \u5ff5\u5fc3SVIP URL\u6a21\u677f\nconst NIANXIN_URL_TEMPLATES = {\n tx: \"https://music.nxinxz.com/kgqq/tx.php?id={id}&level={level}&type=mp3\",\n wy: \"http://music.nxinxz.com/wy.php?id={id}&level={level}&type=mp3\",\n kw: \"http://music.nxinxz.com/kw.php?id={id}&level={level}&type=mp3\",\n kg: \"https://music.nxinxz.com/kgqq/kg.php?id={id}&level={level}&type=mp3\",\n mg: \"http://music.nxinxz.com/mg.php?id={id}&level={level}&type=mp3\"\n};\n\n// \u6c7d\u6c34VIP\nconst QISHUI_SOURCE_ID = \"qsvip\";\nconst QISHUI_SOURCE_NAME = \"\u6c7d\u6c34VIP\";\nconst QISHUI_API_HTTPS = \"https://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_API_HTTP = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_PROXY_API = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// \u5404\u5e73\u53f0\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\nconst PLATFORM_QUALITIES = {\n wy: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n tx: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kw: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n kg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"],\n mg: [\"24bit\", \"flac\", \"320k\", \"192k\", \"128k\"]\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u4e3bAPI\u540d\u79f0\nconst PLATFORM_TO_XINGHAI = {\n wy: \"netease\",\n tx: \"tencent\",\n kw: \"kuwo\",\n kg: \"kugou\",\n mg: \"migu\"\n};\n\n// \u97f3\u8d28\u5230\u661f\u6d77\u4e3bAPI\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_BR = {\n \"128k\": \"128\",\n \"192k\": \"192\",\n \"320k\": \"320\",\n flac: \"740\",\n flac24bit: \"999\",\n \"24bit\": \"999\"\n};\n\n// \u5e73\u53f0ID\u6620\u5c04\u5230\u661f\u6d77\u5907API\u540d\u79f0\nconst PLATFORM_TO_XINGHAI_BACKUP = {\n wy: \"netease\",\n tx: \"qq\",\n kw: \"kuwo\"\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_SUYIN_QQ_BR = {\n \"128k\": 7,\n \"320k\": 5,\n flac: 4,\n hires: 3,\n atmos: 2,\n master: 1,\n \"24bit\": 1\n};\n\n// \u97f3\u8d28\u5230\u6eaf\u97f3\u9177\u6211\u7801\u7387\u53c2\u6570\nconst QUALITY_TO_KUWO_BR = {\n flac: 1,\n \"320k\": 5,\n \"128k\": 7,\n \"24bit\": 1\n};\n\n// \u9ad8\u54c1\u8d28\u97f3\u8d28\u96c6\u5408\nconst HIRES_QUALITY_SET = new Set([\"24bit\", \"flac\", \"flac24bit\", \"hires\", \"master\", \"atmos\"]);\n\n// \u97f3\u8d28\u4f18\u5148\u7ea7\uff08\u7528\u4e8e\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u8d28\u91cf\u7684\u53ef\u7528\u97f3\u8d28\uff09\nconst QUALITY_PRIORITY = [\"flac24bit\", \"flac\", \"320k\", \"192k\", \"128k\"];\n\n// URL\u7f13\u5b58\uff08\u7b80\u5355\u7684Map\uff0c\u6309\u5199\u5165\u987a\u5e8f\u6dd8\u6c70\u6700\u65e9\u6761\u76ee\uff09\nconst urlCache = new Map();\n\nconst { EVENT_NAMES, request, on, send } = globalThis.lx;\n\n// --- \u8f85\u52a9\u51fd\u6570 ---\n\n/**\n * \u53d1\u8d77HTTP\u8bf7\u6c42\uff0c\u8fd4\u56de Promise<{statusCode, headers, body}>\n */\nfunction httpRequest(url, options = { method: \"GET\" }) {\n return new Promise((resolve, reject) => {\n request(url, { timeout: 2000, ...options }, (err, res) => {\n if (err) return reject(new Error(`\u8bf7\u6c42\u9519\u8bef: ${err.message}`));\n let body = res?.body;\n if (typeof body === \"string\") {\n const trimmed = body.trim();\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\") || trimmed.startsWith('\"')) {\n try {\n body = JSON.parse(trimmed);\n } catch (e) { /* \u4fdd\u6301\u539f\u59cb\u5b57\u7b26\u4e32 */ }\n }\n }\n resolve({\n statusCode: res?.statusCode ?? 0,\n headers: res?.headers || {},\n body\n });\n });\n });\n}\n\n/**\n * GET\u8bf7\u6c42\uff0c\u81ea\u52a8\u62fc\u63a5\u67e5\u8be2\u53c2\u6570\uff0c\u8fd4\u56de\u54cd\u5e94body\uff08\u5df2\u89e3\u6790\uff09\n */\nasync function httpGet(url, params = {}) {\n const queryStr = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n const fullUrl = url + (queryStr ? (url.includes(\"?\") ? \"&\" : \"?\") + queryStr : \"\");\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout: 2000 });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * POST\u8bf7\u6c42\uff0cbody\u4e3aJSON\uff0c\u8fd4\u56de\u54cd\u5e94body\n */\nasync function httpPost(url, body = {}, timeout = 5000) {\n const res = await httpRequest(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n timeout\n });\n if (res.statusCode >= 400) throw new Error(`HTTP\u9519\u8bef: ${res.statusCode}`);\n return res.body;\n}\n\n/**\n * \u5e26fallback\u7684GET\u8bf7\u6c42\uff08\u6c7d\u6c34VIP\u81ea\u52a8\u5c1d\u8bd5https/http\uff09\n */\nasync function httpGetWithFallback(url, params = {}, timeout = 5000) {\n const urls = url === QISHUI_API_HTTPS ? [QISHUI_API_HTTPS, QISHUI_API_HTTP] : [url];\n let lastError = null;\n for (const u of urls) {\n try {\n const fullUrl = u + buildQueryString(params);\n const res = await httpRequest(fullUrl, { method: \"GET\", timeout });\n if (res.statusCode >= 400) throw new Error(`HTTP ${res.statusCode}`);\n return res.body;\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError || new Error(\"\u6c7d\u6c34VIP\u8bf7\u6c42\u5931\u8d25\");\n}\n\n/**\n * \u6784\u5efa\u67e5\u8be2\u5b57\u7b26\u4e32\uff08\u4e0d\u5e26\u95ee\u53f7\uff0c\u4ec5\u53c2\u6570\u90e8\u5206\uff09\n */\nfunction buildQueryString(params = {}) {\n const parts = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\n\n/**\n * \u6807\u51c6\u5316\u97f3\u8d28\u5b57\u7b26\u4e32\uff08\u4f4e/\u6807\u51c6/\u65e0\u635f\uff09\n */\nfunction normalizeQuality(quality) {\n const q = String(quality || \"\").toLowerCase();\n if (q === \"128k\") return \"low\";\n if (q === \"320k\") return \"standard\";\n if (q === \"flac\" || q === \"flac24bit\") return \"lossless\";\n return \"128k\";\n}\n\n/**\n * \u4ece\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\u4e2d\u9009\u62e9\u6700\u63a5\u8fd1\u8bf7\u6c42\u97f3\u8d28\u7684\u5b9e\u9645\u53ef\u7528\u97f3\u8d28\n */\nfunction selectQuality(requestedQuality, supportedQualities) {\n const requested = String(requestedQuality || \"128k\").toLowerCase();\n if (supportedQualities.includes(requested)) return requested;\n const idx = QUALITY_PRIORITY.indexOf(requested);\n const start = idx >= 0 ? idx : QUALITY_PRIORITY.length - 1;\n for (let i = start; i < QUALITY_PRIORITY.length; i++) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n for (let i = QUALITY_PRIORITY.length - 1; i >= 0; i--) {\n if (supportedQualities.includes(QUALITY_PRIORITY[i])) return QUALITY_PRIORITY[i];\n }\n return supportedQualities[0] || \"128k\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u7f51\u6613\u4e91/\u957f\u9752/\u5ff5\u5fc3\u6240\u9700\u7684level\u683c\u5f0f\n */\nfunction qualityToNetease(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac\" || q === \"flac24bit\" || q === \"hires\" || q === \"master\" || q === \"atmos\") return \"lossless\";\n if (q === \"320k\" || q === \"192k\") return \"exhigh\";\n return \"standard\";\n}\n\n/**\n * \u5c06\u97f3\u8d28\u8f6c\u6362\u4e3a\u6eaf\u97f3QQ\u7801\u7387\u53c2\u6570\n */\nfunction qualityToSuyinQQ(quality) {\n const q = String(quality || \"128k\").toLowerCase();\n if (q === \"flac24bit\") return \"hires\";\n if (q === \"192k\") return \"320k\";\n return QUALITY_TO_SUYIN_QQ_BR[q] ? q : \"128k\";\n}\n\n/**\n * \u83b7\u53d6\u79fb\u52a8\u7aefUser-Agent\n */\nfunction getMobileUserAgent() {\n return \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\";\n}\n\n/**\n * \u4ece\u6b4c\u66f2\u4fe1\u606f\u4e2d\u63d0\u53d6\u5404\u79cd\u53ef\u80fd\u7684ID\n */\nfunction getSongId(songInfo) {\n return (songInfo?.id || songInfo?.songmid || songInfo?.songId || songInfo?.hash || songInfo?.rid || songInfo?.mid || songInfo?.strMediaMid || songInfo?.mediaId || \"\").toString();\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u66f2\u7684hash\u6216mid\uff08\u4f18\u5148hash\uff09\n */\nfunction getHashOrMid(songInfo) {\n return songInfo?.hash ?? songInfo?.songmid ?? songInfo?.id ?? null;\n}\n\n/**\n * \u83b7\u53d6QQ\u97f3\u4e50\u6b4c\u66f2ID\uff08\u533a\u5206mid\u548csongid\uff09\n */\nfunction getQQSongId(songInfo) {\n const mid = songInfo?.meta?.qq?.mid || songInfo?.meta?.mid || songInfo?.songmid ||\n (typeof songInfo?.id === \"string\" && !/^\\d+$/.test(songInfo.id) ? songInfo.id : null);\n if (mid) return { type: \"mid\", value: mid };\n const songid = songInfo?.meta?.qq?.songid || songInfo?.meta?.songid ||\n (typeof songInfo?.id === \"number\" ? songInfo.id :\n (typeof songInfo?.id === \"string\" && /^\\d+$/.test(songInfo.id) ? Number(songInfo.id) : null));\n if (songid) return { type: \"songid\", value: songid };\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u6b4c\u66f2\u4fe1\u606f\uff08\u4f9b\u6c7d\u6c34VIP\u641c\u7d22\u4f7f\u7528\uff09\n */\nfunction normalizeSongInfo(raw) {\n const id = raw?.id || raw?.vid ? String(raw.id || raw.vid) : \"\";\n return {\n id,\n songmid: id,\n hash: id,\n name: raw?.name ? String(raw.name) : \"\u672a\u77e5\u6b4c\u66f2\",\n singer: raw?.artists ? String(raw.artists) : \"\u672a\u77e5\u6b4c\u624b\",\n albumName: raw?.album ? String(raw.album) : \"\",\n duration: raw?.duration ? Math.floor(Number(raw.duration) / 1000) : 0,\n pic: raw?.cover || raw?.pic ? String(raw.cover || raw.pic) : \"\",\n _raw: raw || {}\n };\n}\n\n/**\n * \u83b7\u53d6\u54cd\u5e94\u6570\u636e\u4e2d\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\n */\nfunction getFirstData(response) {\n const data = response?.data;\n if (Array.isArray(data)) return data[0] || null;\n if (data && typeof data === \"object\" && data[0]) return data[0];\n return null;\n}\n\n/**\n * \u6807\u51c6\u5316\u5173\u952e\u8bcd\uff08\u53bb\u9664\u62ec\u53f7\u3001\u7a7a\u683c\u3001\u7279\u6b8a\u5b57\u7b26\uff0c\u8f6c\u5c0f\u5199\uff09\n */\nfunction normalizeKeyword(keyword) {\n if (!keyword) return \"\";\n return String(keyword)\n .replace(/\\(\\s*Live\\s*\\)/gi, \"\")\n .replace(/\\([^)]*\\)/g, \"\")\n .replace(/\\s+/g, \"\")\n .replace(/[^\\w\\u4e00-\\u9fa5]/g, \"\")\n .trim()\n .toLowerCase();\n}\n\n/**\n * \u6807\u9898\u6a21\u7cca\u5339\u914d\uff08\u53cc\u5411\u5305\u542b\uff09\n */\nfunction titleMatch(a, b) {\n const na = normalizeKeyword(a);\n const nb = normalizeKeyword(b);\n if (!na || !nb) return true;\n return na.includes(nb) || nb.includes(na);\n}\n\n/**\n * \u6784\u5efa\u641c\u7d22\u5173\u952e\u8bcd\u5217\u8868\uff08\u6807\u9898+\u4e13\u8f91\u3001\u6807\u9898+\u6b4c\u624b\u3001\u4ec5\u6807\u9898\uff09\n */\nfunction buildSearchKeywords(songInfo) {\n const keywords = [];\n const name = songInfo?.name || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n const singer = songInfo?.singer || \"\";\n if (name && album) {\n const kw = normalizeKeyword(name + album);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name && singer) {\n const kw = normalizeKeyword(name + singer);\n if (kw) keywords.push({ keyword: kw, strict: true });\n }\n if (name) {\n const kw = normalizeKeyword(name);\n if (kw) keywords.push({ keyword: kw, strict: false });\n }\n return keywords;\n}\n\n/**\n * \u6b4c\u66f2\u4fe1\u606f\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u9177\u6211\uff09\n */\nfunction songInfoMatch(responseData, songInfo) {\n const song = responseData?.song || responseData?.data?.song || \"\";\n const singer = responseData?.singer || responseData?.data?.singer || \"\";\n const album = responseData?.album || responseData?.data?.album || \"\";\n if (!titleMatch(song, songInfo?.name || \"\")) return false;\n if (songInfo?.singer && singer && !titleMatch(singer, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && album && !titleMatch(album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u6b4c\u66f2\u6807\u9898\u5339\u914d\uff08\u7528\u4e8e\u6eaf\u97f3\u54aa\u5495\uff09\n */\nfunction songTitleMatch(responseData, songInfo) {\n if (!titleMatch(responseData?.title || \"\", songInfo?.name || \"\")) return false;\n if (songInfo?.singer && responseData?.artist && !titleMatch(responseData.artist, songInfo.singer)) return false;\n if ((songInfo?.albumName || songInfo?.album) && responseData?.album && !titleMatch(responseData.album, songInfo.albumName || songInfo.album)) return false;\n return true;\n}\n\n/**\n * \u4ece\u6d88\u606f\u6587\u672c\u4e2d\u89e3\u6790\u6b4c\u66f2\u4fe1\u606f\uff08\u6b4c\u540d/\u6b4c\u624b/\u4e13\u8f91\uff09\n */\nfunction parseMessageSongInfo(message) {\n if (!message) return null;\n const result = {};\n const lines = String(message).split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\u6b4c\u540d\uff1a\")) result.song = line.replace(\"\u6b4c\u540d\uff1a\", \"\").trim();\n if (line.startsWith(\"\u6b4c\u624b\uff1a\")) result.singer = line.replace(\"\u6b4c\u624b\uff1a\", \"\").trim();\n if (line.startsWith(\"\u4e13\u8f91\uff1a\")) result.album = line.replace(\"\u4e13\u8f91\uff1a\", \"\").trim();\n }\n return result.song ? result : null;\n}\n\n/**\n * \u9a8c\u8bc1URL\u5408\u6cd5\u6027\n */\nfunction validateUrl(url, sourceName) {\n if (!url || typeof url !== \"string\") throw new Error(`${sourceName}\u8fd4\u56de\u7a7aURL`);\n if (!HTTP_URL_REGEX.test(url.trim())) throw new Error(`${sourceName}\u975e\u6cd5URL\u683c\u5f0f`);\n return url;\n}\n\n// --- \u7f13\u5b58\u76f8\u5173 ---\nfunction buildCacheKey(prefix, songInfo, quality = \"\") {\n const name = songInfo?.name || \"\";\n const singer = songInfo?.singer || \"\";\n const album = songInfo?.albumName || songInfo?.album || \"\";\n // \u7b80\u5355\u62fc\u63a5\uff0cMap\u5927\u5c0f\u6709\u9650\uff0c\u65e0\u9700\u54c8\u5e0c\n return `${prefix}_${name}_${singer}_${album}_${quality}`;\n}\n\nfunction getCachedUrl(cacheKey) {\n const entry = urlCache.get(cacheKey);\n if (!entry) return null;\n if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {\n urlCache.delete(cacheKey);\n return null;\n }\n return entry.url;\n}\n\nfunction setCachedUrl(cacheKey, url) {\n urlCache.set(cacheKey, { url, timestamp: Date.now() });\n if (urlCache.size > CACHE_MAX_SIZE) {\n const oldestKey = urlCache.keys().next().value;\n if (oldestKey !== undefined) urlCache.delete(oldestKey);\n }\n}\n\n// --- \u5404\u97f3\u6e90\u83b7\u53d6URL\u7684\u5177\u4f53\u5b9e\u73b0 ---\n\n/* \u661f\u6d77\u4e3b */\nasync function xinghaiMainGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u4e3bAPI\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n const br = QUALITY_TO_BR[selectedQuality];\n if (!br) throw new Error(\"\u661f\u6d77\u4e3bAPI\u97f3\u8d28\u6620\u5c04\u5931\u8d25\");\n const url = `${XINGHAI_MAIN_API}&types=url&source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&br=${br}`;\n const res = await httpRequest(url, { method: \"GET\", headers: { \"User-Agent\": \"LX-Music-Mobile\", Accept: \"application/json\" } });\n const body = res.body;\n if (!body || typeof body !== \"object\" || !body.url) throw new Error(body?.message || \"\u661f\u6d77\u4e3bAPI\u672a\u8fd4\u56de\u53ef\u7528URL\");\n return body.url;\n}\n\n/* \u661f\u6d77\u5907 */\nasync function xinghaiBackupGetUrl(platform, songId, quality, songInfo) {\n const source = PLATFORM_TO_XINGHAI_BACKUP[platform];\n if (!source) throw new Error(\"\u661f\u6d77\u5907API\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = songId ?? getHashOrMid(songInfo);\n if (!id) throw new Error(\"\u7f3a\u5c11songId\");\n const selectedQuality = selectQuality(quality, [\"128k\", \"192k\", \"320k\", \"flac\", \"flac24bit\"]);\n return `${XINGHAI_BACKUP_API}?source=${encodeURIComponent(source)}&id=${encodeURIComponent(id)}&type=url&br=${encodeURIComponent(selectedQuality)}`;\n}\n\n/* Huibq */\nasync function huibqGetUrl(platform, songId, quality, songInfo) {\n if (!HUIBQ_API || !HUIBQ_REQUEST_KEY) throw new Error(\"Huibq\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"Huibq\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${HUIBQ_API}/url/${platform}/${encodeURIComponent(hashOrMid)}/${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent(), \"X-Request-Key\": HUIBQ_REQUEST_KEY }\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"Huibq\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 0:\n if (!body.url) throw new Error(\"Huibq\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 1: throw new Error(\"Huibq block ip\");\n case 2: throw new Error(\"Huibq get music url failed\");\n case 4: throw new Error(\"Huibq too many requests\");\n case 5: throw new Error(\"Huibq param error\");\n case 6: throw new Error(\"Huibq internal server error\");\n default: throw new Error(body.message || \"Huibq unknown error\");\n }\n}\n\n/* \u8046\u5ddd */\nasync function lingchuanGetUrl(platform, songId, quality, songInfo) {\n if (!LINGCHUAN_API) throw new Error(\"\u8046\u5ddd\u672a\u914d\u7f6e\");\n const hashOrMid = songInfo?.hash ?? songInfo?.songmid;\n if (!hashOrMid) throw new Error(\"\u8046\u5ddd\u7f3a\u5c11hash/songmid\");\n const selectedQuality = selectQuality(quality, [\"320k\", \"128k\"]);\n const url = `${LINGCHUAN_API}/url?source=${encodeURIComponent(platform)}&songId=${encodeURIComponent(hashOrMid)}&quality=${encodeURIComponent(selectedQuality)}`;\n const res = await httpRequest(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\", \"User-Agent\": getMobileUserAgent() },\n follow_max: 5\n });\n const body = res.body;\n if (!body || typeof body !== \"object\" || Number.isNaN(Number(body.code))) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u65e0\u6548\");\n switch (Number(body.code)) {\n case 200:\n if (!body.url) throw new Error(\"\u8046\u5ddd\u8fd4\u56de\u7a7aURL\");\n return body.url;\n case 403: throw new Error(\"\u8046\u5ddd403 forbidden\");\n case 429: throw new Error(\"\u8046\u5ddd429 rate limit\");\n case 500: throw new Error(`\u8046\u5ddd500 ${body.message || \"server error\"}`);\n default: throw new Error(body.message || \"\u8046\u5ddd\u672a\u77e5\u9519\u8bef\");\n }\n}\n\n/* \u6eaf\u97f3QQ */\nasync function suyinQQGetUrl(songInfo, quality) {\n const qqId = getQQSongId(songInfo);\n if (!qqId) throw new Error(\"\u6eaf\u97f3QQ\u7f3a\u5c11songmid/id\");\n const normalizedQuality = qualityToSuyinQQ(quality);\n const startBr = QUALITY_TO_SUYIN_QQ_BR[normalizedQuality] || QUALITY_TO_SUYIN_QQ_BR[\"128k\"];\n const brList = [startBr, 4, 5, 7]\n .filter((val, idx, arr) => arr.indexOf(val) === idx && val >= startBr)\n .sort((a, b) => a - b);\n let lastError = null;\n for (const br of brList) {\n try {\n const reqParams = { key: SUYIN_QQ_KEY, type: \"json\", br, n: 1 };\n if (qqId.type === \"mid\") reqParams.mid = qqId.value;\n else reqParams.songid = qqId.value;\n const res = await httpGet(SUYIN_QQ_API, reqParams);\n if (res?.music) return res.music;\n if (res?.url) return res.url;\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u9891\u94fe\u63a5[\uff1a:](.+?)(?:\\n|$)/);\n if (match && match[1]) return match[1].trim();\n }\n throw new Error(\"\u6eaf\u97f3QQ\u672a\u627e\u5230\u97f3\u9891\u94fe\u63a5\");\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3QQ\u5168\u90e8\u97f3\u8d28\u5c1d\u8bd5\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3163 */\nasync function suyin163GetUrl(songInfo) {\n const id = songInfo?.songmid || songInfo?.id;\n if (!id) throw new Error(\"\u6eaf\u97f3163\u7f3a\u5c11songmid/id\");\n const res = await httpGet(SUYIN_163_API, { id });\n if (res?.code === 0 && res?.data) {\n const item = Array.isArray(res.data) ? res.data[0] : res.data;\n if (item?.url) return item.url;\n }\n throw new Error(\"\u6eaf\u97f3163\u83b7\u53d6\u5931\u8d25\");\n}\n\n/* \u6eaf\u97f3\u9177\u6211\uff08\u641c\u7d22\uff09 */\nasync function suyinKuwoSearch(keyword, br, songInfo = null) {\n const res = await httpGet(SUYIN_KUWO_API, { msg: keyword, n: 1, br });\n if (res?.data?.url) {\n if (songInfo && !songInfoMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n return res.data.url;\n }\n if (res?.message) {\n const match = String(res.message).match(/\u97f3\u4e50\u94fe\u63a5[\uff1a:](\\S+)/);\n if (match && match[1]) {\n if (songInfo) {\n const parsed = parseMessageSongInfo(res.message);\n if (parsed && !songInfoMatch(parsed, songInfo)) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n }\n return match[1];\n }\n }\n throw new Error(\"\u6eaf\u97f3\u9177\u6211\u672a\u627e\u5230\u94fe\u63a5\");\n}\n\nasync function suyinKuwoGetUrl(songInfo, quality) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u9177\u6211\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"kw\", songInfo, quality);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const selectedQuality = selectQuality(quality, [\"flac\", \"320k\", \"128k\"]);\n const br = QUALITY_TO_KUWO_BR[selectedQuality] || 1;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const url = await suyinKuwoSearch(item.keyword, br, item.strict ? songInfo : null);\n if (url) {\n setCachedUrl(cacheKey, url);\n return url;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u9177\u6211\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u54aa\u5495 */\nasync function suyinMiguGetUrl(songInfo) {\n if (!songInfo?.name) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u9700\u8981\u6b4c\u66f2\u540d\");\n const cacheKey = buildCacheKey(\"mg\", songInfo);\n const cached = getCachedUrl(cacheKey);\n if (cached) return cached;\n const keywords = buildSearchKeywords(songInfo);\n let lastError = null;\n for (const item of keywords) {\n try {\n const res = await httpGet(SUYIN_MIGU_API, { gm: item.keyword, n: 1, num: 1, type: \"json\" });\n if (res?.code === 200 && res?.musicInfo) {\n if (item.strict && !songTitleMatch(res, songInfo)) throw new Error(\"\u6eaf\u97f3\u54aa\u5495\u6b4c\u66f2\u4fe1\u606f\u4e0d\u5339\u914d\");\n setCachedUrl(cacheKey, res.musicInfo);\n return res.musicInfo;\n }\n } catch (e) {\n lastError = e;\n }\n }\n throw new Error(`\u6eaf\u97f3\u54aa\u5495\u5931\u8d25: ${lastError?.message || \"unknown\"}`);\n}\n\n/* \u6eaf\u97f3\u7edf\u4e00\u5165\u53e3 */\nasync function suyinGetUrl(platform, songId, quality, songInfo) {\n switch (platform) {\n case \"tx\": return suyinQQGetUrl(songInfo, quality);\n case \"wy\": return suyin163GetUrl(songInfo);\n case \"kw\": return suyinKuwoGetUrl(songInfo, quality);\n case \"mg\": return suyinMiguGetUrl(songInfo);\n default: throw new Error(\"\u6eaf\u97f3\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n }\n}\n\n/* \u957f\u9752SVIP */\nasync function changqingGetUrl(platform, songId, quality, songInfo) {\n const template = CHANGQING_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u957f\u9752SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u957f\u9752SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u5ff5\u5fc3SVIP */\nasync function nianxinGetUrl(platform, songId, quality, songInfo) {\n const template = NIANXIN_URL_TEMPLATES[platform];\n if (!template) throw new Error(\"\u5ff5\u5fc3SVIP\u4e0d\u652f\u6301\u8be5\u5e73\u53f0\");\n const id = getPlatformSongId(platform, songInfo);\n if (!id) throw new Error(\"\u5ff5\u5fc3SVIP\u7f3a\u5c11songId\");\n const level = qualityToNetease(quality);\n return template.replace(\"{id}\", encodeURIComponent(String(id))).replace(\"{level}\", encodeURIComponent(level));\n}\n\n/* \u6c7d\u6c34VIP */\nasync function qishuiSearch(keyword, page = 1, pageSize = 30) {\n if (!keyword) return { isEnd: true, list: [] };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"search\", keywords: keyword, page, pagesize: pageSize, type: \"music\"\n }, 15000);\n const list = Array.isArray(res?.data?.lists) ? res.data.lists : [];\n const total = res?.data?.total ? Number(res.data.total) : list.length;\n return {\n isEnd: list.length < pageSize,\n list: list.map(normalizeSongInfo),\n total\n };\n}\n\nasync function qishuiGetUrl(songInfo, quality) {\n const songId = getSongId(songInfo);\n if (!songId) throw new Error(\"\u6c7d\u6c34VIP\u7f3a\u5c11\u6b4c\u66f2ID\");\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, {\n act: \"song\", id: songId, quality: normalizeQuality(quality)\n }, 20000);\n const data = getFirstData(res);\n if (!data?.url) throw new Error(\"\u6c7d\u6c34VIP\u672a\u8fd4\u56de\u53ef\u7528URL\");\n if (data.ekey) {\n const proxyRes = await httpPost(QISHUI_PROXY_API, {\n url: data.url, key: data.ekey, filename: data.filename || \"KMusic\", ext: data.fileExtension || \"aac\"\n }, 60000);\n if (Number(proxyRes?.code) === 200 && proxyRes?.url) return String(proxyRes.url);\n throw new Error(\"\u6c7d\u6c34VIP\u4ee3\u7406\u89e3\u5bc6\u5931\u8d25\");\n }\n return String(data.url);\n}\n\nasync function qishuiGetLyric(songInfo) {\n const songId = getSongId(songInfo);\n if (!songId) return { lyric: \"\" };\n const res = await httpGetWithFallback(QISHUI_API_HTTPS, { act: \"song\", id: songId }, 15000);\n const data = getFirstData(res);\n return { lyric: data?.lyric ? String(data.lyric) : \"\" };\n}\n\nasync function qishuiHandler(action, params = {}) {\n if (action === \"musicSearch\" || action === \"search\") {\n const keyword = params?.keyword ? String(params.keyword) : \"\";\n const page = params?.page ? Number(params.page) : 1;\n const pageSize = params?.pagesize ? Number(params.pagesize) : 30;\n return qishuiSearch(keyword, page, pageSize);\n }\n if (action === \"musicUrl\") {\n if (!params?.musicInfo) throw new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\");\n const url = await qishuiGetUrl(params.musicInfo, params.type);\n return validateUrl(url, \"\u6c7d\u6c34VIP\");\n }\n if (action === \"lyric\") return qishuiGetLyric(params?.musicInfo || {});\n throw new Error(\"action not support\");\n}\n\n// --- \u5de5\u5177\u51fd\u6570\uff1a\u83b7\u53d6\u5e73\u53f0\u5bf9\u5e94\u7684\u6b4c\u66f2ID ---\nfunction getPlatformSongId(platform, songInfo) {\n if (platform === \"kg\") return songInfo?.hash || songInfo?.songmid || songInfo?.id || songInfo?.rid || songInfo?.mid || null;\n if (platform === \"tx\") {\n const qqId = getQQSongId(songInfo);\n if (qqId?.value) return qqId.value;\n }\n return songInfo?.songmid || songInfo?.id || songInfo?.songId || songInfo?.rid || songInfo?.hash || null;\n}\n\n// --- \u97f3\u6e90\u5904\u7406\u5668\u6ce8\u518c\u8868 ---\nconst SOURCE_HANDLERS = {\n xinghai: { name: \"\u661f\u6d77\u4e3b\", fn: xinghaiMainGetUrl },\n xinghaiBackup: { name: \"\u661f\u6d77\u5907\", fn: xinghaiBackupGetUrl },\n huibq: { name: \"Huibq\", fn: huibqGetUrl },\n lingchuan: { name: \"\u8046\u5ddd\", fn: lingchuanGetUrl },\n suyinQQ: { name: \"\u6eaf\u97f3QQ\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"tx\", songId, quality, songInfo) },\n suyin163: { name: \"\u6eaf\u97f3163\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"wy\", songId, quality, songInfo) },\n suyinSearch: { name: \"\u6eaf\u97f3\u641c\u7d22\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"kw\", songId, quality, songInfo) },\n suyinMigu: { name: \"\u6eaf\u97f3\u54aa\u5495\", fn: (platform, songId, quality, songInfo) => suyinGetUrl(\"mg\", songId, quality, songInfo) },\n changqingVip: { name: \"\u957f\u9752SVIP\", fn: changqingGetUrl },\n nianxinVip: { name: \"\u5ff5\u5fc3SVIP\", fn: nianxinGetUrl }\n};\n\n// --- \u6784\u5efa\u97f3\u6e90\u94fe\uff08\u6309\u5e73\u53f0\u548c\u662f\u5426\u9ad8\u54c1\u8d28\u6392\u5e8f\uff09---\nfunction buildSourceChain(platform, isHires, quality) {\n const chain = [];\n // \u57fa\u7840\u94fe\uff1a\u661f\u6d77\u4e3b\u3001Huibq\u3001\u6eaf\u97f3\u5404\u5e73\u53f0\u3001\u8046\u5ddd\u3001\u957f\u9752\u3001\u5ff5\u5fc3\n if (SOURCE_HANDLERS.xinghai) chain.push(SOURCE_HANDLERS.xinghai);\n if (SOURCE_HANDLERS.huibq) chain.push(SOURCE_HANDLERS.huibq);\n if (platform === \"wy\" && SOURCE_HANDLERS.suyin163) chain.push(SOURCE_HANDLERS.suyin163);\n if (platform === \"tx\" && SOURCE_HANDLERS.suyinQQ) chain.push(SOURCE_HANDLERS.suyinQQ);\n if (platform === \"kw\" && SOURCE_HANDLERS.suyinSearch) chain.push(SOURCE_HANDLERS.suyinSearch);\n if (platform === \"mg\" && SOURCE_HANDLERS.suyinMigu) chain.push(SOURCE_HANDLERS.suyinMigu);\n if (SOURCE_HANDLERS.lingchuan) chain.push(SOURCE_HANDLERS.lingchuan);\n if (SOURCE_HANDLERS.changqingVip) chain.push(SOURCE_HANDLERS.changqingVip);\n if (SOURCE_HANDLERS.nianxinVip) chain.push(SOURCE_HANDLERS.nianxinVip);\n return chain;\n}\n\n// --- \u5e26fallback\u83b7\u53d6URL\uff08\u5e76\u53d1\u524d3\u4e2a\uff0c\u5931\u8d25\u540e\u987a\u5e8f\u5269\u4f59\uff09---\nasync function getUrlWithFallback(platform, songInfo, quality) {\n if (!platform || typeof platform !== \"string\" || !PLATFORM_QUALITIES[platform]) {\n throw new Error(\"\u65e0\u6548\u7684\u5e73\u53f0\u53c2\u6570\");\n }\n if (!songInfo || typeof songInfo !== \"object\") {\n throw new Error(\"\u65e0\u6548\u7684\u6b4c\u66f2\u4fe1\u606f\");\n }\n const resolvedQuality = quality || \"128k\";\n const selectedQuality = selectQuality(resolvedQuality, PLATFORM_QUALITIES[platform]);\n const songId = getHashOrMid(songInfo);\n const isHires = HIRES_QUALITY_SET.has(resolvedQuality.toLowerCase());\n const chain = buildSourceChain(platform, isHires, selectedQuality);\n if (!chain.length) throw new Error(\"\u672a\u627e\u5230\u53ef\u7528fallback\u94fe\");\n\n const errors = [];\n // \u5e76\u53d1\u5c1d\u8bd5\u524d3\u4e2a\u6e90\n const firstBatch = chain.slice(0, 3);\n if (firstBatch.length) {\n const results = await Promise.allSettled(firstBatch.map(handler =>\n handler.fn(platform, songId, selectedQuality, songInfo).then(url => validateUrl(url, handler.name))\n ));\n for (const result of results) {\n if (result.status === \"fulfilled\") return result.value;\n errors.push(result.reason?.message || \"unknown\");\n }\n }\n // \u987a\u5e8f\u5c1d\u8bd5\u5269\u4f59\u6e90\n for (const handler of chain.slice(3)) {\n try {\n const url = await handler.fn(platform, songId, selectedQuality, songInfo);\n return validateUrl(url, handler.name);\n } catch (e) {\n errors.push(`${handler.name}: ${e.message}`);\n }\n }\n throw new Error(`\u6240\u6709\u6e90\u5747\u5931\u8d25: ${errors.join(\"; \")}`);\n}\n\n// --- \u97f3\u6e90\u914d\u7f6e\u4e0e\u6ce8\u518c ---\nconst sourceConfig = {};\nconst PLATFORM_NAMES = {\n wy: \"\u7f51\u6613\u4e91\u97f3\u4e50\", tx: \"QQ\u97f3\u4e50\", kw: \"\u9177\u6211\u97f3\u4e50\", kg: \"\u9177\u72d7\u97f3\u4e50\", mg: \"\u54aa\u5495\u97f3\u4e50\"\n};\nObject.keys(PLATFORM_QUALITIES).forEach(platform => {\n sourceConfig[platform] = {\n name: PLATFORM_NAMES[platform],\n type: \"music\",\n actions: [\"musicUrl\"],\n qualitys: PLATFORM_QUALITIES[platform]\n };\n});\nsourceConfig[QISHUI_SOURCE_ID] = {\n name: QISHUI_SOURCE_NAME,\n type: \"music\",\n actions: [\"musicSearch\", \"musicUrl\", \"lyric\"],\n qualitys: [\"128k\", \"320k\", \"flac\", \"flac24bit\"]\n};\n\n// --- \u4e8b\u4ef6\u76d1\u542c ---\non(EVENT_NAMES.request, ({ action, source, info }) => {\n if (source === QISHUI_SOURCE_ID) {\n return qishuiHandler(action, info);\n }\n if (action !== \"musicUrl\") {\n return Promise.reject(new Error(\"action not support\"));\n }\n if (!info?.musicInfo) {\n return Promise.reject(new Error(\"\u8bf7\u6c42\u53c2\u6570\u4e0d\u5b8c\u6574\"));\n }\n return getUrlWithFallback(source, info.musicInfo, info.type || \"128k\")\n .then(url => Promise.resolve(url))\n .catch(err => Promise.reject(err));\n});\n\nsend(EVENT_NAMES.inited, {\n openDevTools: false,\n sources: sourceConfig\n});\n\n// \u7b80\u5355\u65e5\u5fd7\uff0c\u4f9b\u8c03\u8bd5\nconsole.log(\"\u5168\u8c46\u8981\u805a\u5408\u97f3\u6e90 v9.3 \u5df2\u52a0\u8f7d\");", "id": "msg_1776451641051"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:21] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: Failed to load plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:47:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 聚合音源 特供版, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:21] [0.5.1] [ERROR] js_plugin_manager.py:158: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451641051: False [2026-04-18 02:47:21] [0.5.1] [ERROR] js_plugin_manager.py:974: Failed to load JS plugin 聚合音源 特供版: Cannot destructure property 'EVENT_NAMES' of 'globalThis.lx' as it is undefined. [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:916: Loading plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: load for plugin: unknown [2026-04-18 02:47:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst he = require(\"he\");\nconst pageSize = 20;\nfunction formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s) => s.name).join(\", \"),\n artwork: albummid\n ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg`\n : undefined,\n album: albumname,\n lrc: _.lyric || undefined,\n albumid: albumid,\n albummid: albummid,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic ||\n `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc,\n };\n}\nfunction formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum,\n };\n}\nconst searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\",\n};\nconst headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\",\n};\nasync function searchBase(query, page, type) {\n const res = (await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: pageSize,\n page_num: page,\n query: query,\n search_type: type,\n },\n },\n },\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * pageSize,\n data: res.req_1.data.body[searchTypeMap[type]].list,\n };\n}\nasync function searchMusic(query, page) {\n const songs = await searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const albums = await searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map(formatAlbumItem),\n };\n}\nasync function searchArtist(query, page) {\n const artists = await searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map(formatArtistItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const musicSheet = await searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item) => ({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name,\n })),\n };\n}\nasync function searchLyric(query, page) {\n const songs = await searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it) => (Object.assign(Object.assign({}, formatMusicItem(it)), { rawLrcTxt: it.content }))),\n };\n}\nfunction getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) {\n s = sArr[1];\n }\n else {\n return key ? undefined : {};\n }\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item) => {\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n }\n catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction changeUrlQuery(obj, baseUrl) {\n const query = getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key) => {\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") {\n queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n }\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst typeMap = {\n m4a: {\n s: \"C400\",\n e: \".m4a\",\n },\n 128: {\n s: \"M500\",\n e: \".mp3\",\n },\n 320: {\n s: \"M800\",\n e: \".mp3\",\n },\n ape: {\n s: \"A000\",\n e: \".ape\",\n },\n flac: {\n s: \"F000\",\n e: \".flac\",\n },\n};\nasync function getAlbumInfo(albumItem) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000,\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2,\n },\n module: \"music.musichallAlbum.AlbumSongList\",\n },\n }),\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, axios_1.default)({\n url: url,\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n musicList: res.albumSonglist.data.songList\n .map((item) => {\n const _ = item.songInfo;\n return formatMusicItem(_);\n }),\n };\n}\nasync function getArtistSongs(artistItem, page) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * pageSize,\n num: pageSize,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, axios_1.default)({\n url: url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * pageSize,\n data: res.singer.data.songlist.map(formatMusicItem),\n };\n}\nasync function getArtistAlbums(artistItem, page) {\n const url = changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * pageSize,\n num: pageSize / 1,\n exstatus: 1,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, axios_1.default)({\n url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * pageSize,\n data: res.singerAlbum.data.list.map(formatAlbumItem),\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n return getArtistSongs(artistItem, page);\n }\n if (type === \"album\") {\n return getArtistAlbums(artistItem, page);\n }\n}\nasync function getLyric(musicItem) {\n const result = (await (0, axios_1.default)({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: { Referer: \"https://y.qq.com\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) {\n translation = he.decode(CryptoJs.enc.Base64.parse(res.trans).toString(CryptoJs.enc.Utf8));\n }\n return {\n rawLrc: he.decode(CryptoJs.enc.Base64.parse(res.lyric).toString(CryptoJs.enc.Utf8)),\n translation,\n };\n}\nasync function importMusicSheet(urlLike) {\n let id;\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n }\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) ||\n [])[1];\n }\n if (!id) {\n id = (urlLike.match(/^(\\d+)$/) || [])[1];\n }\n if (!id) {\n return;\n }\n const result = (await (0, axios_1.default)({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: { Referer: \"https://y.qq.com/n/yqq/playlist\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map(formatMusicItem);\n}\nasync function getTopLists() {\n const list = await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return list.data.topList.data.group.map((e) => ({\n title: e.groupName,\n data: e.toplist.map((_) => ({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl,\n })),\n }));\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n const res = await (0, axios_1.default)({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList\n .map(formatMusicItem)\n });\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n })).data.data.categories;\n const data = res.slice(1).map((_) => ({\n title: _.categoryGroupName,\n data: _.items.map((tag) => ({\n id: tag.categoryId,\n title: tag.categoryName,\n })),\n }));\n const pinned = [];\n for (let d of data) {\n if (d.data.length) {\n pinned.push(d.data[0]);\n }\n }\n return {\n pinned,\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await axios_1.default.get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1,\n },\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item) => {\n var _a, _b;\n return ({\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\",\n });\n });\n return {\n isEnd,\n data,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const data = await importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data,\n };\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"320k\",\n super: \"320k\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/tx/${musicItem.songmid}/${qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n },\n })\n ).data;\n return {\n url: res.url,\n };\n}\nmodule.exports = {\n platform: \"\u5c0f\u79cb\u97f3\u4e50\",\n author: \"Huibq\",\n version: \"0.3.0\",\n srcUrl: \"https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/xiaoqiu.js\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n primaryKey: [\"id\", \"songmid\"],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getLyric,\n getAlbumInfo,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo,\n};\n", "id": "msg_1776451641357"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:21] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 小秋音乐_0.3.0_Huibq, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451641357: True [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:971: Loaded JS plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:47:21] [0.5.1] [INFO] js_plugin_manager.py:2461: 最新插件信息:{'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '果核音乐': {'name': '果核音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小芸音乐': {'name': '小芸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '六月听书': {'name': '六月听书', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1776451641.0452473, 'enabled': True}, 'mg': {'name': 'mg', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'musicfreepluginshub_2020818_xyz': {'name': 'musicfreepluginshub_2020818_xyz', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_1': {'name': '酷我_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台': {'name': 'W电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W电台_1': {'name': 'W电台_1', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜜音乐': {'name': '小蜜音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'W音乐': {'name': 'W音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐_0.3.0_Huibq': {'status': 'loaded', 'load_time': 1776451641.6597867, 'enabled': True}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小秋音乐': {'name': '小秋音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'qq': {'name': 'qq', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易': {'name': '网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'wwfo_lanzoue_com': {'name': 'wwfo_lanzoue_com', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-04-18 02:47:21] [0.5.1] [INFO] 172.17.0.1:39214 - "GET /api/js-plugins HTTP/1.0" 200 [2026-04-18 02:47:21] [0.5.1] [INFO] 172.17.0.1:39228 - "GET /api/plugin-source/load HTTP/1.0" 200 [2026-04-18 02:47:22] [0.5.1] [INFO] 172.17.0.1:39232 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:47:37] [0.5.1] [INFO] 172.17.0.1:55814 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:37] [0.5.1] [INFO] 172.17.0.1:55820 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:38] [0.5.1] [INFO] 172.17.0.1:55826 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NTcuNzgzMjYxMywiaWF0IjoxNzc2NDUxNjU3Ljc4MzI2Mn0.OGVtGs9_4PCsN6B0MBqJGWAPUJLW-XLvV3Qbnin1CfQ HTTP/1.0" 404 [2026-04-18 02:47:38] [0.5.1] [INFO] 172.17.0.1:55828 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:47:39] [0.5.1] [INFO] 172.17.0.1:55836 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:47:41] [0.5.1] [INFO] 172.17.0.1:55840 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:41] [0.5.1] [INFO] 172.17.0.1:55842 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NjEuMTk4NTY3LCJpYXQiOjE3NzY0NTE2NjEuMTk4NTY3Nn0.zduH_a1wyuEnkiu7uLmY9TK0b4cUmCeIAYfPDfteP3A HTTP/1.0" 404 [2026-04-18 02:47:44] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:47:44] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:47:44] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:47:44] [0.5.1] [INFO] 172.17.0.1:55858 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:47:44] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:47:44] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:47:44] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:47:44] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:47:44] [0.5.1] [INFO] 172.17.0.1:55872 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:47:44] [0.5.1] [INFO] 172.17.0.1:55880 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:47:44] [0.5.1] [INFO] 172.17.0.1:55888 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:44] [0.5.1] [INFO] 172.17.0.1:55898 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:44] [0.5.1] [INFO] 172.17.0.1:55912 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NjQuNTc5ODEyNSwiaWF0IjoxNzc2NDUxNjY0LjU3OTgxM30.0WUrFHsvvNNaA4q02O0ZmPFJNPU-ZuOtbtQdumpoNPU HTTP/1.0" 404 [2026-04-18 02:47:48] [0.5.1] [INFO] 172.17.0.1:59576 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:48] [0.5.1] [INFO] 172.17.0.1:59592 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NjguMDgyMzY5MywiaWF0IjoxNzc2NDUxNjY4LjA4MjM2OTh9.IeGgTVU6oFQhYfK0tDxRGnV-98KrBDkXbcjpW98vfrg HTTP/1.0" 404 [2026-04-18 02:47:51] [0.5.1] [INFO] music_library.py:1072: get_music_url name:Jay-三音即兴-阳 [2026-04-18 02:47:51] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:47:51] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:Jay-三音即兴-阳, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAi6ZizIiwgIm5hbWUiOiAiSmF5LeS4iemfs+WNs+WFtCIsICJhbGJ1bU5hbWUiOiAiSmF5IiwgImFsYnVtSWQiOiAiMTQ1NzcwMjg4IiwgInNvbmdtaWQiOiAid3lfMTk1MjEyNzA5NiIsICJjb3B5cmlnaHRJZCI6ICIiLCAic291cmNlIjogInd5IiwgImludGVydmFsIjogIjAxOjU3IiwgImltZyI6ICJodHRwczovL3AxLm11c2ljLjEyNi5uZXQvSktnSGQ0M0U5MmlLc0FGcXhQUTdEQT09LzEwOTk1MTE2NzUzOTkwMjQyOC5qcGciLCAibHJjIjogbnVsbCwgImxyY1VybCI6ICIiLCAidHlwZXMiOiBbeyJ0eXBlIjogIjEyOGsiLCAic2l6ZSI6ICIxLjc5IE1CIn0sIHsidHlwZSI6ICIzMjBrIiwgInNpemUiOiAiNC40OCBNQiJ9XSwgIl90eXBlcyI6IHsiMzIwayI6IHsic2l6ZSI6ICI0LjQ4IE1CIn0sICIxMjhrIjogeyJzaXplIjogIjEuNzkgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAid3lfMTk1MjEyNzA5NiIsICJ0aXRsZSI6ICJKYXkt5LiJ6Z+z5Y2z5YW0IiwgImR1cmF0aW9uIjogIjAxOjU3IiwgImFydGlzdCI6ICLpmLMiLCAiYWxidW0iOiAiSmF5IiwgInBsYXRmb3JtIjogInd5IiwgImFydHdvcmsiOiAiaHR0cHM6Ly9wMS5tdXNpYy4xMjYubmV0L0pLZ0hkNDNFOTJpS3NBRnF4UFE3REE9PS8xMDk5NTExNjc1Mzk5MDI0MjguanBnIn0= [2026-04-18 02:47:51] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=znflasMrkrk [2026-04-18 02:47:51] [0.5.1] [INFO] 172.17.0.1:59606 - "GET /musicinfo?name=Jay-%E4%B8%89%E9%9F%B3%E5%8D%B3%E5%85%B4-%E9%98%B3 HTTP/1.0" 200 [2026-04-18 02:47:51] [0.5.1] [INFO] 172.17.0.1:59620 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:52] [0.5.1] [INFO] 172.17.0.1:59634 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NzEuNzEwMzExLCJpYXQiOjE3NzY0NTE2NzEuNzEwMzExN30.c8Ctk2NWvXrN18mh4Sk592GRfjmkk4BRY0te-rwNPz8 HTTP/1.0" 404 [2026-04-18 02:47:54] [0.5.1] [INFO] device.py:77: docmd. did:419359157 cmd:上一首 [2026-04-18 02:47:54] [0.5.1] [INFO] xiaomusic.py:274: cancel_all_tasks no task [2026-04-18 02:47:54] [0.5.1] [INFO] 172.17.0.1:59646 - "POST /cmd HTTP/1.0" 200 [2026-04-18 02:47:54] [0.5.1] [INFO] command_handler.py:51: 收到消息:上一首 控制面板:True did:419359157 [2026-04-18 02:47:54] [0.5.1] [INFO] command_handler.py:94: 完全匹配指令. query:上一首 opvalue:play_prev [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:318: 开始播放上一首 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:328: _play_prev. name:退后-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:退后-周杰伦 allow_download:True [2026-04-18 02:47:54] [0.5.1] [INFO] music_library.py:591: 根据【退后-周杰伦】找到歌曲【['退后-周杰伦']】 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:254: play_internal. names:['退后-周杰伦'] 1 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:920: 下一曲定时器已取消 did: 419359157 [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:348: cur_music 退后-周杰伦 [2026-04-18 02:47:54] [0.5.1] [INFO] music_library.py:1072: get_music_url name:退后-周杰伦 [2026-04-18 02:47:54] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:47:54] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:退后-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:47:54] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=2PuGSnl6Efg [2026-04-18 02:47:54] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:47:55] [0.5.1] [INFO] 172.17.0.1:59662 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:55] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:47:55] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:47:56] [0.5.1] [INFO] 172.17.0.1:59668 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NzUuMjA3MjE0OCwiaWF0IjoxNzc2NDUxNjc1LjIwNzIxNTV9._WqDCMqcpm9HosLFRPdjf_vjuYuEE0nLLgg3S34DAs4 HTTP/1.0" 404 [2026-04-18 02:47:56] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:47:56] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:47:56] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=2PuGSnl6Efg [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=2PuGSnl6Efg audio_id:1582971365183456177 [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=2PuGSnl6Efg ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:368: 【退后-周杰伦】已经开始播放了 [2026-04-18 02:47:57] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:47:57] [0.5.1] [INFO] device_player.py:808: 1.405284329421997 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:47:57] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:47:57] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:47:57] [0.5.1] [INFO] file.py:519: [proxy:e04b0d97] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:47:57] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') [2026-04-18 02:47:57] [0.5.1] [INFO] file.py:524: [proxy:e04b0d97] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 [2026-04-18 02:47:57] [0.5.1] [INFO] file.py:552: [proxy:e04b0d97] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:47:57] [0.5.1] [INFO] file.py:597: [proxy:e04b0d97] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:47:57] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:47:57] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 02:47:57] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 102066449, "songmid": "001L1lqm4UAdyo", "title": "\u9000\u540e", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg", "album": "\u4f9d\u7136\u8303\u7279\u897f", "albumid": 13004, "albummid": "002jLGWe16Tf1H", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776451677490"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:47:58] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451677490: True [2026-04-18 02:47:58] [0.5.1] [INFO] music.py:98: plugin-url {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:47:58] [0.5.1] [INFO] 34.21.156.125:51506 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 HTTP/1.1" 307 [2026-04-18 02:47:58] [0.5.1] [INFO] file.py:608: [proxy:e04b0d97] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDEwMjA2NjQ0OSwgInNvbmdtaWQiOiAiMDAxTDFscW00VUFkeW8iLCAidGl0bGUiOiAiXHU5MDAwXHU1NDBlIiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYXJ0d29yayI6ICJodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSODAweDgwME0wMDAwMDJqTEdXZTE2VGYxSC5qcGciLCAiYWxidW0iOiAiXHU0ZjlkXHU3MTM2XHU4MzAzXHU3Mjc5XHU4OTdmIiwgImFsYnVtaWQiOiAxMzAwNCwgImFsYnVtbWlkIjogIjAwMmpMR1dlMTZUZjFIIiwgInBsYXRmb3JtIjogIlx1NWMwZlx1NzljYlx1OTdmM1x1NGU1MF8wLjMuMF9IdWlicSJ9 to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:47:58] [0.5.1] [INFO] file.py:624: [proxy:e04b0d97] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:47:58] [0.5.1] [INFO] 34.21.156.125:51506 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 02:47:58] [0.5.1] [INFO] file.py:645: [proxy:e04b0d97] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 02:47:58] [0.5.1] [INFO] file.py:683: [proxy:e04b0d97] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 02:47:58] [0.5.1] [INFO] 122.97.136.182:47264 - "GET /proxy/music?token=2PuGSnl6Efg HTTP/1.1" 200 [2026-04-18 02:47:58] [0.5.1] [INFO] file.py:738: [proxy:e04b0d97] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:退后-周杰伦 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 02:47:58] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:47:58] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:47:58] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:47:58] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:47:58] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=SnRxqW3nhGw [2026-04-18 02:47:58] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:47:59] [0.5.1] [INFO] 172.17.0.1:36742 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:47:59] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:47:59] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:48:00] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:48:00] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['七里香-周杰伦', '退后-周杰伦'] with len: 19 [2026-04-18 02:48:00] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:48:00] [0.5.1] [INFO] 172.17.0.1:36750 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:48:00] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:48:00] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:48:00] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:48:00] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:48:00] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:48:00] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:48:00] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=SnRxqW3nhGw [2026-04-18 02:48:00] [0.5.1] [INFO] 172.17.0.1:36762 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:48:00] [0.5.1] [INFO] 172.17.0.1:36776 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:48:00] [0.5.1] [INFO] 172.17.0.1:36786 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=SnRxqW3nhGw audio_id:1582971365183456177 [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=SnRxqW3nhGw ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:48:01] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:48:01] [0.5.1] [INFO] device_player.py:808: 299.25847605705263 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:48:01] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:48:01] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:48:01] [0.5.1] [INFO] file.py:519: [proxy:c0e5406d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:01] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:48:01] [0.5.1] [INFO] file.py:524: [proxy:c0e5406d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:01] [0.5.1] [INFO] file.py:552: [proxy:c0e5406d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:48:01] [0.5.1] [INFO] file.py:597: [proxy:c0e5406d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:48:01] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:48:01] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 02:48:01] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776451681567"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:48:01] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451681567: True [2026-04-18 02:48:01] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466081&Signature=HQ75BTWOHLiKLI852QKgcQIIAeXIgMQtsyY5njXnKZhQ4jako21AG3kWLy3Bl66Q8dizAA9zkVz-HixZ29RWW~WGOuINlvsonLLKylYmH5I0yFmcUxup8f6qhvbok1xTw-f03y56gFeX-SAWi4ShrxZYzI793kWCXF8TCU6~D3s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:48:01] [0.5.1] [INFO] 34.21.156.125:51520 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:48:01] [0.5.1] [INFO] file.py:608: [proxy:c0e5406d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466081&Signature=HQ75BTWOHLiKLI852QKgcQIIAeXIgMQtsyY5njXnKZhQ4jako21AG3kWLy3Bl66Q8dizAA9zkVz-HixZ29RWW~WGOuINlvsonLLKylYmH5I0yFmcUxup8f6qhvbok1xTw-f03y56gFeX-SAWi4ShrxZYzI793kWCXF8TCU6~D3s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:48:01] [0.5.1] [INFO] file.py:624: [proxy:c0e5406d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466081&Signature=HQ75BTWOHLiKLI852QKgcQIIAeXIgMQtsyY5njXnKZhQ4jako21AG3kWLy3Bl66Q8dizAA9zkVz-HixZ29RWW~WGOuINlvsonLLKylYmH5I0yFmcUxup8f6qhvbok1xTw-f03y56gFeX-SAWi4ShrxZYzI793kWCXF8TCU6~D3s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:48:01] [0.5.1] [INFO] 172.17.0.1:36788 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5NzkuMjYwMzYzLCJpYXQiOjE3NzY0NTE2NzkuMjYwMzYzNn0.f4V5LtHj1tNJmSaP3UI3RT6GUgnU7982RUYnYXDSS38 HTTP/1.0" 404 [2026-04-18 02:48:02] [0.5.1] [INFO] file.py:645: [proxy:c0e5406d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466081&Signature=HQ75BTWOHLiKLI852QKgcQIIAeXIgMQtsyY5njXnKZhQ4jako21AG3kWLy3Bl66Q8dizAA9zkVz-HixZ29RWW~WGOuINlvsonLLKylYmH5I0yFmcUxup8f6qhvbok1xTw-f03y56gFeX-SAWi4ShrxZYzI793kWCXF8TCU6~D3s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 02:48:02] [0.5.1] [INFO] file.py:672: [proxy:c0e5406d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466081&Signature=HQ75BTWOHLiKLI852QKgcQIIAeXIgMQtsyY5njXnKZhQ4jako21AG3kWLy3Bl66Q8dizAA9zkVz-HixZ29RWW~WGOuINlvsonLLKylYmH5I0yFmcUxup8f6qhvbok1xTw-f03y56gFeX-SAWi4ShrxZYzI793kWCXF8TCU6~D3s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:48:03] [0.5.1] [INFO] 122.96.50.157:62746 - "GET /proxy/music?token=SnRxqW3nhGw HTTP/1.1" 200 [2026-04-18 02:48:04] [0.5.1] [INFO] 172.17.0.1:36800 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:09] [0.5.1] [INFO] 172.17.0.1:34474 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5ODQuOTcxNTk5LCJpYXQiOjE3NzY0NTE2ODQuOTcxNTk5OH0.YbcmgMk_yccISzotbTdwSq1Jv73VMoHMVBU0JVH8DDY HTTP/1.0" 404 [2026-04-18 02:48:12] [0.5.1] [INFO] 172.17.0.1:34480 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:12] [0.5.1] [INFO] 172.17.0.1:34496 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5OTIuNTQ1NzY3LCJpYXQiOjE3NzY0NTE2OTIuNTQ1NzY4fQ.oXOVEsay72wBRMUr9JTNrKIHDf1s1FYDwnYWRMXB9KE HTTP/1.0" 404 [2026-04-18 02:48:15] [0.5.1] [INFO] 172.17.0.1:34500 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:16] [0.5.1] [INFO] 172.17.0.1:34512 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5OTUuODczNzU1LCJpYXQiOjE3NzY0NTE2OTUuODczNzU1N30.d-Edy1QKiywx-aGXu1n7PotkzrS0Pz1-nY5RtwyGRQE HTTP/1.0" 404 [2026-04-18 02:48:19] [0.5.1] [INFO] 172.17.0.1:54932 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:19] [0.5.1] [ERROR] file.py:468: [bili-ffmpeg] _feed_ffmpeg error: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 466, in _feed_ffmpeg await proc.stdin.drain() File "/usr/local/lib/python3.14/asyncio/streams.py", line 386, in drain await self._protocol._drain_helper() File "/usr/local/lib/python3.14/asyncio/streams.py", line 172, in _drain_helper await waiter BrokenPipeError [2026-04-18 02:48:19] [0.5.1] [INFO] 172.17.0.1:54940 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTE5OTkuMTc2NjIwNywiaWF0IjoxNzc2NDUxNjk5LjE3NjYyMTd9.RLrsjXb_dfcNEbzvtuaXhzNEzzb2rAdwgVSArOiXaxM HTTP/1.0" 404 [2026-04-18 02:48:22] [0.5.1] [INFO] 172.17.0.1:54950 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:22] [0.5.1] [INFO] 172.17.0.1:54954 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMDIuNTE5MDU4MiwiaWF0IjoxNzc2NDUxNzAyLjUxOTA1ODd9.xcIsn6i4D3rIQ7rlRfDRZzzKDe9G4UzSIgaGQiD4Hn8 HTTP/1.0" 404 [2026-04-18 02:48:23] [0.5.1] [INFO] command_handler.py:51: 收到消息:播放歌手周杰伦 控制面板:False did:419359157 [2026-04-18 02:48:23] [0.5.1] [INFO] command_handler.py:137: 匹配到指令. opkey:播放歌手 opvalue:singer_play oparg:周杰伦 [2026-04-18 02:48:23] [0.5.1] [INFO] xiaomusic.py:298: 手动推送链接:http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 02:48:23] [0.5.1] [ERROR] device_player.py:761: _get_audio_id Error https://api2.mina.mi.com/music/search: {'code': 999, 'message': 'Unknown error', 'data': None} [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/static/silence.mp3 audio_id:1582971365183456177 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/static/silence.mp3 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:410: 已重置追加歌曲页码 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:510: 搜索关键字周杰伦,搜索歌手名周杰伦 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 3} [2026-04-18 02:48:24] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 3}, "id": "msg_1776451704322"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451704322: True [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 3} [2026-04-18 02:48:24] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 3}, "id": "msg_1776451704625"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451704625: True [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:48:24] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:48:24] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556362, 'songmid': '0044SaFh0apuR2', 'title': '那天下雨了', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680284, 'songmid': '0022b7OX2STU86', 'title': '我落泪情绪零碎', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177680, 'songmid': '003xv4w313tZHV', 'title': '红尘客栈', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340965, 'songmid': '004Yi5BD3ksoAN', 'title': '蒲公英的约定', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101787870, 'songmid': '002u8ZOM4C7QF4', 'title': '手写的从前', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556366, 'songmid': '003WPrjL4dimFE', 'title': '爱琴海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449201, 'songmid': '00128N3r2SYKMF', 'title': '兰亭序', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5105986, 'songmid': '001xd0HI0X9GNq', 'title': '一路向北', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002MAeob3zLXwZ.jpg', 'album': 'J III MP3 Player', 'albumid': 14311, 'albummid': '002MAeob3zLXwZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556373, 'songmid': '003FdJZH1wljMU', 'title': '西西里', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101091484, 'songmid': '004BhQke4adHcf', 'title': '给我一首歌的时间', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97761, 'songmid': '002OKIox28ad9a', 'title': '半岛铁盒', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 10921907, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦的床边故事', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092257, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}] [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:371: 在线搜索歌手的歌曲列表: {'success': True, 'data': [{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}], 'total': 10, 'sources': {'小秋音乐_0.3.0_Huibq': 20, 'Audiomack': 20}, 'page': 1, 'limit': 10, 'artist': '佚名'} [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:375: 歌曲列表: [{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}] [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:531: 推送歌单播放, 歌单名称: _online_佚名, 歌曲数量: 10, 设备ID: 419359157 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:410: 已重置追加歌曲页码 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:839: 歌单去重完成,原始数量: 10, 去重后数量: 10 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 02:48:24] [0.5.1] [INFO] online_music.py:637: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:48:24] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:48:24] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:630: 根据【_online_佚名】找到播放列表【_online_佚名】 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:868: 开始播放列表_online_佚名 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:920: 下一曲定时器已取消 did: 419359157 [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:24] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=2k9NbHHWevI [2026-04-18 02:48:24] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:48:24] [0.5.1] [INFO] 122.96.50.157:57407 - "GET /static/silence.mp3 HTTP/1.1" 206 [2026-04-18 02:48:25] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:48:25] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:48:25] [0.5.1] [INFO] 172.17.0.1:54962 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:26] [0.5.1] [INFO] 172.17.0.1:54968 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMDUuODU1NiwiaWF0IjoxNzc2NDUxNzA1Ljg1NTYwMDh9._P2O2vozpqMmu6gAaU9Rg_hkoyawCNdBUXJ5gECBJds HTTP/1.0" 404 [2026-04-18 02:48:26] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:48:26] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:48:26] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=2k9NbHHWevI [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=2k9NbHHWevI audio_id:1582971365183456177 [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=2k9NbHHWevI ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:48:27] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:48:27] [0.5.1] [INFO] device_player.py:808: 299.25845412254336 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:48:27] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:48:27] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:48:27] [0.5.1] [INFO] file.py:519: [proxy:68e909aa] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:27] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:48:27] [0.5.1] [INFO] file.py:524: [proxy:68e909aa] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:48:27] [0.5.1] [INFO] file.py:552: [proxy:68e909aa] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:48:27] [0.5.1] [INFO] file.py:597: [proxy:68e909aa] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:48:27] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:48:27] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 02:48:27] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776451707478"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:48:27] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451707478: True [2026-04-18 02:48:27] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466107&Signature=Tqe8nFgsHMhPICTS5cp9aG0InPka-8kRu~mYyBd69bRf4SU70YZHmBZWV2dVhinMJwl0WTA3lurpyr~weEcI5fN7LWefUk5F7YLum7GbcycIvcSknmJjnN18SJ~aFxXP-kBXH2YOwSZRsH1KA4me-lSwzkYVuPr~vYrc8Ar-EAw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:48:27] [0.5.1] [INFO] 34.21.156.125:32962 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:48:27] [0.5.1] [INFO] file.py:608: [proxy:68e909aa] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466107&Signature=Tqe8nFgsHMhPICTS5cp9aG0InPka-8kRu~mYyBd69bRf4SU70YZHmBZWV2dVhinMJwl0WTA3lurpyr~weEcI5fN7LWefUk5F7YLum7GbcycIvcSknmJjnN18SJ~aFxXP-kBXH2YOwSZRsH1KA4me-lSwzkYVuPr~vYrc8Ar-EAw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:48:27] [0.5.1] [INFO] file.py:624: [proxy:68e909aa] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466107&Signature=Tqe8nFgsHMhPICTS5cp9aG0InPka-8kRu~mYyBd69bRf4SU70YZHmBZWV2dVhinMJwl0WTA3lurpyr~weEcI5fN7LWefUk5F7YLum7GbcycIvcSknmJjnN18SJ~aFxXP-kBXH2YOwSZRsH1KA4me-lSwzkYVuPr~vYrc8Ar-EAw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:48:28] [0.5.1] [INFO] file.py:645: [proxy:68e909aa] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466107&Signature=Tqe8nFgsHMhPICTS5cp9aG0InPka-8kRu~mYyBd69bRf4SU70YZHmBZWV2dVhinMJwl0WTA3lurpyr~weEcI5fN7LWefUk5F7YLum7GbcycIvcSknmJjnN18SJ~aFxXP-kBXH2YOwSZRsH1KA4me-lSwzkYVuPr~vYrc8Ar-EAw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 02:48:28] [0.5.1] [INFO] file.py:672: [proxy:68e909aa] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776466107&Signature=Tqe8nFgsHMhPICTS5cp9aG0InPka-8kRu~mYyBd69bRf4SU70YZHmBZWV2dVhinMJwl0WTA3lurpyr~weEcI5fN7LWefUk5F7YLum7GbcycIvcSknmJjnN18SJ~aFxXP-kBXH2YOwSZRsH1KA4me-lSwzkYVuPr~vYrc8Ar-EAw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:48:29] [0.5.1] [INFO] 172.17.0.1:40492 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:29] [0.5.1] [INFO] 122.97.136.182:34141 - "GET /proxy/music?token=2k9NbHHWevI HTTP/1.1" 200 [2026-04-18 02:48:29] [0.5.1] [INFO] 172.17.0.1:40498 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMDkuMTg2MzUsImlhdCI6MTc3NjQ1MTcwOS4xODYzNTA2fQ.6zzIJ36PMdNLobqYqtxQeE9Du8YSfymrZpIK_7UI2Mc HTTP/1.0" 404 [2026-04-18 02:48:32] [0.5.1] [INFO] 172.17.0.1:40510 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:32] [0.5.1] [INFO] 172.17.0.1:40520 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMTIuNTI4Mjc1LCJpYXQiOjE3NzY0NTE3MTIuNTI4Mjc1N30.LG3zKhsq2U8bNybY6j6NybiooUwnRQr1HxuVThihAPI HTTP/1.0" 404 [2026-04-18 02:48:32] [0.5.1] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-18 02:48:32] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 02:48:32] [0.5.1] [INFO] xiaomusic.py:329: gen_music_list ok [2026-04-18 02:48:32] [0.5.1] [INFO] 172.17.0.1:40522 - "POST /api/music/refreshlist HTTP/1.0" 200 [2026-04-18 02:48:32] [0.5.1] [INFO] music_library.py:917: 已从【music/cache/tag_cache.json】加载 tag cache [2026-04-18 02:48:32] [0.5.1] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-18 02:48:32] [0.5.1] [INFO] music_library.py:933: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-04-18 02:48:32] [0.5.1] [INFO] music_library.py:1017: tag 更新完成 [2026-04-18 02:48:32] [0.5.1] [INFO] 172.17.0.1:40530 - "GET /cmdstatus HTTP/1.0" 200 [2026-04-18 02:48:33] [0.5.1] [INFO] 172.17.0.1:40536 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:48:33] [0.5.1] [INFO] 172.17.0.1:40548 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:33] [0.5.1] [INFO] 172.17.0.1:40560 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:33] [0.5.1] [INFO] 172.17.0.1:40566 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMTMuMTkxNTk2MywiaWF0IjoxNzc2NDUxNzEzLjE5MTU5N30.jsLdXMIzEuBd7nb-7JIAYclQv_QjMrjbj97apMhywa0 HTTP/1.0" 404 [2026-04-18 02:48:35] [0.5.1] [INFO] 172.17.0.1:40578 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:36] [0.5.1] [INFO] 172.17.0.1:40586 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMTUuODY5NjU4NywiaWF0IjoxNzc2NDUxNzE1Ljg2OTY1OTR9.J_4lyidKKPyHXCuCnuUjKZHWlx7GkaQ1owgqq6nAq4c HTTP/1.0" 404 [2026-04-18 02:48:36] [0.5.1] [INFO] 172.17.0.1:59544 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:36] [0.5.1] [INFO] 172.17.0.1:59548 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMTYuNTY2OTY1LCJpYXQiOjE3NzY0NTE3MTYuNTY2OTY1OH0.CCH2a1Bb_Z-jD3ZkOVDUDNeof3YFYelPRHLml5taerI HTTP/1.0" 404 [2026-04-18 02:48:39] [0.5.1] [INFO] 172.17.0.1:59552 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:39] [0.5.1] [INFO] 172.17.0.1:59556 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMTkuMjI3NzQzNiwiaWF0IjoxNzc2NDUxNzE5LjIyNzc0NDZ9.v5Oea01DQ9A3PkQ-Z09msZ9GhqIuI8L3Pef0ojG4dWE HTTP/1.0" 404 [2026-04-18 02:48:39] [0.5.1] [INFO] 172.17.0.1:59562 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:40] [0.5.1] [INFO] 172.17.0.1:59578 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMTkuOTUwMDkxNCwiaWF0IjoxNzc2NDUxNzE5Ljk1MDA5Mn0.cB6XMZqN75-I5-3-SzBAFbKZT_3yJQcp3Bs6Ep0yqYk HTTP/1.0" 404 [2026-04-18 02:48:42] [0.5.1] [INFO] 172.17.0.1:59594 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:43] [0.5.1] [INFO] 172.17.0.1:59598 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMjIuNTc3MDEzLCJpYXQiOjE3NzY0NTE3MjIuNTc3MDEzNX0.MCv3GTb5ZpkhaQIX6OEr_tGaOEocGK6tr17bC5HVoGM HTTP/1.0" 404 [2026-04-18 02:48:43] [0.5.1] [INFO] 172.17.0.1:59610 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:44] [0.5.1] [INFO] 172.17.0.1:59616 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwMjMuNTI3MzQ0LCJpYXQiOjE3NzY0NTE3MjMuNTI3MzQ0NX0._VPHYT6PTHXohigQfOmaecUyDJ_IU2ktdXOu6Ne-iOI HTTP/1.0" 404 [2026-04-18 02:48:46] [0.5.1] [INFO] 172.17.0.1:46582 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:48:48] [0.5.1] [INFO] 172.17.0.1:46592 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:48:48] [0.5.1] [INFO] 172.17.0.1:46602 - "GET /api/platforms HTTP/1.0" 200 [2026-04-18 02:48:49] [0.5.1] [INFO] 172.17.0.1:46606 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:48:54] [0.5.1] [INFO] online_music.py:78: 在线获取歌曲列表! [2026-04-18 02:48:54] [0.5.1] [INFO] online_music.py:319: 通过MusicFree插件搜索音乐列表! [2026-04-18 02:48:54] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin 小秋音乐_0.3.0_Huibq for keyword: 周杰伦 [2026-04-18 02:48:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 02:48:54] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 6} [2026-04-18 02:48:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 6}, "id": "msg_1776451734665"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451734665: True [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin 小秋音乐_0.3.0_Huibq, isEnd: False, found 20 results [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:1098: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦 [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: search for plugin: Audiomack [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:199: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 6} [2026-04-18 02:48:55] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 6}, "id": "msg_1776451735067"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776451735067: True [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:1128: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-04-18 02:48:55] [0.5.1] [ERROR] online_music.py:677: 插件 聚合音源 特供版 搜索失败: Plugin 聚合音源 特供版 not found or not loaded [2026-04-18 02:48:55] [0.5.1] [INFO] js_plugin_manager.py:2028: 排序后列表信息::[{'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'}, {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'}, {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'}, {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'}, {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'}, {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'}, {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'}, {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'}, {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'}, {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556362, 'songmid': '0044SaFh0apuR2', 'title': '那天下雨了', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718479, 'songmid': '003KtYhg4frNXC', 'title': '枫', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449205, 'songmid': '003aAYrm3GE0Ac', 'title': '稻香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449198, 'songmid': '003cI52o4daJJL', 'title': '花海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 410316, 'songmid': '002qU5aY3Qu24y', 'title': '青花瓷', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102066449, 'songmid': '001L1lqm4UAdyo', 'title': '退后', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002jLGWe16Tf1H.jpg', 'album': '依然范特西', 'albumid': 13004, 'albummid': '002jLGWe16Tf1H', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102065756, 'songmid': '004Z8Ihr0JIu5s', 'title': '七里香', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 718477, 'songmid': '001zMQr71F1Qo8', 'title': '夜曲', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000024bjiL2aocxT.jpg', 'album': '十一月的萧邦', 'albumid': 60671, 'albummid': '0024bjiL2aocxT', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 680284, 'songmid': '0022b7OX2STU86', 'title': '我落泪情绪零碎', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000bviBl4FjTpO.jpg', 'album': '跨时代', 'albumid': 56705, 'albummid': '000bviBl4FjTpO', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5177680, 'songmid': '003xv4w313tZHV', 'title': '红尘客栈', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000003Ow85E3pnoqi.jpg', 'album': '十二新作', 'albumid': 194021, 'albummid': '003Ow85E3pnoqi', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 102340965, 'songmid': '004Yi5BD3ksoAN', 'title': '蒲公英的约定', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002eFUFm2XYZ7z.jpg', 'album': '我很忙', 'albumid': 33021, 'albummid': '002eFUFm2XYZ7z', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101787870, 'songmid': '002u8ZOM4C7QF4', 'title': '手写的从前', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000001uqejs3d6EID.jpg', 'album': '哎呦,不错哦', 'albumid': 852856, 'albummid': '001uqejs3d6EID', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556366, 'songmid': '003WPrjL4dimFE', 'title': '爱琴海', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 449201, 'songmid': '00128N3r2SYKMF', 'title': '兰亭序', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 5105986, 'songmid': '001xd0HI0X9GNq', 'title': '一路向北', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002MAeob3zLXwZ.jpg', 'album': 'J III MP3 Player', 'albumid': 14311, 'albummid': '002MAeob3zLXwZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 649556373, 'songmid': '003FdJZH1wljMU', 'title': '西西里', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M0000041WVfh2vtlJE.jpg', 'album': '太阳之子', 'albumid': 87495226, 'albummid': '0041WVfh2vtlJE', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 101091484, 'songmid': '004BhQke4adHcf', 'title': '给我一首歌的时间', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000002Neh8l0uciQZ.jpg', 'album': '魔杰座', 'albumid': 36062, 'albummid': '002Neh8l0uciQZ', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 97761, 'songmid': '002OKIox28ad9a', 'title': '半岛铁盒', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000004MGitN0zEHpb.jpg', 'album': '八度空间', 'albumid': 8219, 'albummid': '004MGitN0zEHpb', 'platform': '小秋音乐_0.3.0_Huibq'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092327, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 238, 'title': '青花瓷', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-hua-ci', 'platform': 'Audiomack'}, {'id': 11478032, 'artwork': 'https://i.audiomack.com/younghsu/f1aae662a2.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '', 'url_slug': 'bandaotiehe', 'platform': 'Audiomack'}, {'id': 19092223, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '珊瑚海', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'shan-hu-hai', 'platform': 'Audiomack'}, {'id': 10921907, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦的床边故事', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 19092256, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 278, 'title': '枫', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'feng', 'platform': 'Audiomack'}, {'id': 19092231, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 229, 'title': '夜的第七章', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ye-de-di-qi-zhang', 'platform': 'Audiomack'}, {'id': 19092257, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 216, 'title': '告白气球', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'gao-bai-qi-qiu', 'platform': 'Audiomack'}, {'id': 19092241, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 320, 'title': '半岛铁盒', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'ban-dao-tie-he', 'platform': 'Audiomack'}, {'id': 19092229, 'artwork': 'https://i.audiomack.com/manmyl/aff40a88fa.webp', 'duration': 255, 'title': '千里之外', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qian-li-zhi-wai', 'platform': 'Audiomack'}] [2026-04-18 02:48:55] [0.5.1] [INFO] 172.17.0.1:46620 - "GET /api/search/online?keyword=%E5%91%A8%E6%9D%B0%E4%BC%A6&plugin=all&page=1&limit=20 HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47772 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47778 - "GET /getversion HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47788 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47800 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47808 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47824 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:49:11] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:49:11] [0.5.1] [INFO] device_player.py:834: get_volume. volume:8 [2026-04-18 02:49:11] [0.5.1] [INFO] 172.17.0.1:47794 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 02:49:13] [0.5.1] [INFO] 172.17.0.1:47834 - "GET /static/sw.js HTTP/1.0" 304 [2026-04-18 02:49:14] [0.5.1] [INFO] 172.17.0.1:47846 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwNTEuNzE1MTI5LCJpYXQiOjE3NzY0NTE3NTEuNzE1MTI5Nn0.vgowHOckefpgswEREryMK6SasmyDT7BL9Vp4aRxhmGo HTTP/1.0" 404 [2026-04-18 02:49:17] [0.5.1] [INFO] 172.17.0.1:47490 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:49:19] [0.5.1] [INFO] 172.17.0.1:47502 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwNTcuNjQ1MjgyNywiaWF0IjoxNzc2NDUxNzU3LjY0NTI4Mzd9.oEzlEKnbS7QGB1tsAKrkfP9lw4xmeW1RR9PNhDa54UI HTTP/1.0" 404 [2026-04-18 02:49:22] [0.5.1] [INFO] 172.17.0.1:47506 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 02:49:26] [0.5.1] [INFO] 172.17.0.1:34214 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTIwNjIuMDkxMjc5MywiaWF0IjoxNzc2NDUxNzYyLjA5MTI4MDJ9.NyfBrnTFAjs_2AT6cPk54lIxkXxkkJhGCsZfPcSwyEo HTTP/1.0" 404 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 02:53:26] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:53:26] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:53:26] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:53:26] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:53:26] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=EIIll6tsLok [2026-04-18 02:53:26] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:53:27] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:53:27] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:53:28] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:53:28] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:53:28] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=EIIll6tsLok [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=EIIll6tsLok audio_id:1582971365183456177 [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=EIIll6tsLok ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:53:29] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.870 秒 [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:53:29] [0.5.1] [INFO] device_player.py:808: 226.8697017424469 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:53:29] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:53:29] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:53:29] [0.5.1] [INFO] file.py:519: [proxy:82fd39fe] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:53:29] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 02:53:29] [0.5.1] [INFO] file.py:524: [proxy:82fd39fe] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 02:53:29] [0.5.1] [INFO] file.py:552: [proxy:82fd39fe] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:53:29] [0.5.1] [INFO] file.py:597: [proxy:82fd39fe] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:53:29] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:53:29] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 02:53:29] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776452009398"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:53:29] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776452009398: True [2026-04-18 02:53:29] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776466409&Signature=hFbnq9DKWi068tW7KG13DzSaZdRdJi7dJSPOvjveqLI4GTftAN6ACJVGpGf3O5OWaDT6T2ixHRAhqEl~Jx1XcdIdt~9pn0biVoLQaX~CBqJCDRvWgceM0WWQRnvavT4m0GDgaQD~ztxL53NtrHTYsi5pZ-cOBj5DYsND5yP0X2Y_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:53:29] [0.5.1] [INFO] 34.21.156.125:54190 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 02:53:29] [0.5.1] [INFO] file.py:608: [proxy:82fd39fe] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776466409&Signature=hFbnq9DKWi068tW7KG13DzSaZdRdJi7dJSPOvjveqLI4GTftAN6ACJVGpGf3O5OWaDT6T2ixHRAhqEl~Jx1XcdIdt~9pn0biVoLQaX~CBqJCDRvWgceM0WWQRnvavT4m0GDgaQD~ztxL53NtrHTYsi5pZ-cOBj5DYsND5yP0X2Y_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:53:29] [0.5.1] [INFO] file.py:624: [proxy:82fd39fe] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776466409&Signature=hFbnq9DKWi068tW7KG13DzSaZdRdJi7dJSPOvjveqLI4GTftAN6ACJVGpGf3O5OWaDT6T2ixHRAhqEl~Jx1XcdIdt~9pn0biVoLQaX~CBqJCDRvWgceM0WWQRnvavT4m0GDgaQD~ztxL53NtrHTYsi5pZ-cOBj5DYsND5yP0X2Y_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:53:30] [0.5.1] [INFO] file.py:645: [proxy:82fd39fe] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776466409&Signature=hFbnq9DKWi068tW7KG13DzSaZdRdJi7dJSPOvjveqLI4GTftAN6ACJVGpGf3O5OWaDT6T2ixHRAhqEl~Jx1XcdIdt~9pn0biVoLQaX~CBqJCDRvWgceM0WWQRnvavT4m0GDgaQD~ztxL53NtrHTYsi5pZ-cOBj5DYsND5yP0X2Y_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 02:53:30] [0.5.1] [INFO] file.py:672: [proxy:82fd39fe] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776466409&Signature=hFbnq9DKWi068tW7KG13DzSaZdRdJi7dJSPOvjveqLI4GTftAN6ACJVGpGf3O5OWaDT6T2ixHRAhqEl~Jx1XcdIdt~9pn0biVoLQaX~CBqJCDRvWgceM0WWQRnvavT4m0GDgaQD~ztxL53NtrHTYsi5pZ-cOBj5DYsND5yP0X2Y_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:53:32] [0.5.1] [INFO] 122.97.136.182:33584 - "GET /proxy/music?token=EIIll6tsLok HTTP/1.1" 200 [2026-04-18 02:54:30] [0.5.1] [INFO] 40.77.167.187:34499 - "GET /robots.txt HTTP/1.1" 404 [2026-04-18 02:54:37] [0.5.1] [INFO] 157.55.39.10:1510 - "GET / HTTP/1.1" 200 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 02:57:16] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:57:16] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 02:57:16] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 02:57:16] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:57:16] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=s-G2euh8yF0 [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 02:57:16] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:57:17] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 02:57:17] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 02:57:17] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 02:57:17] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=s-G2euh8yF0 [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=s-G2euh8yF0 audio_id:1582971365183456177 [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=s-G2euh8yF0 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 02:57:18] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 264.643 秒 [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 02:57:18] [0.5.1] [INFO] device_player.py:808: 264.64289678001404 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 02:57:18] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 02:57:18] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 02:57:18] [0.5.1] [INFO] file.py:519: [proxy:797d5c5c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:57:18] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 02:57:18] [0.5.1] [INFO] file.py:524: [proxy:797d5c5c] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 02:57:18] [0.5.1] [INFO] file.py:552: [proxy:797d5c5c] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 02:57:18] [0.5.1] [INFO] file.py:597: [proxy:797d5c5c] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 02:57:18] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 02:57:18] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 02:57:18] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776452238527"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 02:57:18] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776452238527: True [2026-04-18 02:57:18] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776466638&Signature=gO4l5GkUjuZvGPAWk8qiRKo~n-LVlXUhZcrzLJZ1uciZ64Vdxal7whN80y8KM2oCh0WOTTOWtvBLkwuP5QNwk4Yzv-s5kIPiXX0uJCGipFTmuj5L58FAi405edjq~cbXyC5K-K6bSZH-INFgvtvQHcMWtaq4e09XnQDfte9Xwgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:57:18] [0.5.1] [INFO] 34.21.156.125:45486 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 02:57:18] [0.5.1] [INFO] file.py:608: [proxy:797d5c5c] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776466638&Signature=gO4l5GkUjuZvGPAWk8qiRKo~n-LVlXUhZcrzLJZ1uciZ64Vdxal7whN80y8KM2oCh0WOTTOWtvBLkwuP5QNwk4Yzv-s5kIPiXX0uJCGipFTmuj5L58FAi405edjq~cbXyC5K-K6bSZH-INFgvtvQHcMWtaq4e09XnQDfte9Xwgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:57:18] [0.5.1] [INFO] file.py:624: [proxy:797d5c5c] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776466638&Signature=gO4l5GkUjuZvGPAWk8qiRKo~n-LVlXUhZcrzLJZ1uciZ64Vdxal7whN80y8KM2oCh0WOTTOWtvBLkwuP5QNwk4Yzv-s5kIPiXX0uJCGipFTmuj5L58FAi405edjq~cbXyC5K-K6bSZH-INFgvtvQHcMWtaq4e09XnQDfte9Xwgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 02:57:19] [0.5.1] [INFO] file.py:645: [proxy:797d5c5c] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776466638&Signature=gO4l5GkUjuZvGPAWk8qiRKo~n-LVlXUhZcrzLJZ1uciZ64Vdxal7whN80y8KM2oCh0WOTTOWtvBLkwuP5QNwk4Yzv-s5kIPiXX0uJCGipFTmuj5L58FAi405edjq~cbXyC5K-K6bSZH-INFgvtvQHcMWtaq4e09XnQDfte9Xwgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 02:57:19] [0.5.1] [INFO] file.py:672: [proxy:797d5c5c] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776466638&Signature=gO4l5GkUjuZvGPAWk8qiRKo~n-LVlXUhZcrzLJZ1uciZ64Vdxal7whN80y8KM2oCh0WOTTOWtvBLkwuP5QNwk4Yzv-s5kIPiXX0uJCGipFTmuj5L58FAi405edjq~cbXyC5K-K6bSZH-INFgvtvQHcMWtaq4e09XnQDfte9Xwgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 02:57:21] [0.5.1] [INFO] 122.96.50.157:17636 - "GET /proxy/music?token=s-G2euh8yF0 HTTP/1.1" 200 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 03:01:43] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:01:43] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:01:43] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:01:43] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:01:43] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=kl7mS0b845Q [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:01:43] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:01:44] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:01:44] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:01:44] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:01:44] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=kl7mS0b845Q [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=kl7mS0b845Q audio_id:1582971365183456177 [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=kl7mS0b845Q ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:01:45] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 295.729 秒 [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:01:45] [0.5.1] [INFO] device_player.py:808: 295.7285125391846 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:01:45] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:01:45] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:01:45] [0.5.1] [INFO] file.py:519: [proxy:cc31d73d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:01:45] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 03:01:45] [0.5.1] [INFO] file.py:524: [proxy:cc31d73d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:01:45] [0.5.1] [INFO] file.py:552: [proxy:cc31d73d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:01:45] [0.5.1] [INFO] file.py:597: [proxy:cc31d73d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:01:45] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:01:45] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 03:01:45] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776452505688"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:01:45] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776452505688: True [2026-04-18 03:01:45] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776466905&Signature=RO2fb2ZBuckjYQIi9I22Kkr~ef4QTQw5qToKytIuJ3GArXGV-MwZA4F46QNgHCbP5lUCvJp3iFIMvbhd5uGDPV-ZM4x2xBZSnHYyZdMZ7N3O44jv1Eb22EOypX6NaL3-novFuBg7jh1CEjRNwAR8luAVQ83zqZGZGsUY2kKGle4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:01:45] [0.5.1] [INFO] 34.21.156.125:39708 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 03:01:45] [0.5.1] [INFO] file.py:608: [proxy:cc31d73d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776466905&Signature=RO2fb2ZBuckjYQIi9I22Kkr~ef4QTQw5qToKytIuJ3GArXGV-MwZA4F46QNgHCbP5lUCvJp3iFIMvbhd5uGDPV-ZM4x2xBZSnHYyZdMZ7N3O44jv1Eb22EOypX6NaL3-novFuBg7jh1CEjRNwAR8luAVQ83zqZGZGsUY2kKGle4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:01:45] [0.5.1] [INFO] file.py:624: [proxy:cc31d73d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776466905&Signature=RO2fb2ZBuckjYQIi9I22Kkr~ef4QTQw5qToKytIuJ3GArXGV-MwZA4F46QNgHCbP5lUCvJp3iFIMvbhd5uGDPV-ZM4x2xBZSnHYyZdMZ7N3O44jv1Eb22EOypX6NaL3-novFuBg7jh1CEjRNwAR8luAVQ83zqZGZGsUY2kKGle4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:01:46] [0.5.1] [INFO] file.py:645: [proxy:cc31d73d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776466905&Signature=RO2fb2ZBuckjYQIi9I22Kkr~ef4QTQw5qToKytIuJ3GArXGV-MwZA4F46QNgHCbP5lUCvJp3iFIMvbhd5uGDPV-ZM4x2xBZSnHYyZdMZ7N3O44jv1Eb22EOypX6NaL3-novFuBg7jh1CEjRNwAR8luAVQ83zqZGZGsUY2kKGle4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 03:01:46] [0.5.1] [INFO] file.py:672: [proxy:cc31d73d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776466905&Signature=RO2fb2ZBuckjYQIi9I22Kkr~ef4QTQw5qToKytIuJ3GArXGV-MwZA4F46QNgHCbP5lUCvJp3iFIMvbhd5uGDPV-ZM4x2xBZSnHYyZdMZ7N3O44jv1Eb22EOypX6NaL3-novFuBg7jh1CEjRNwAR8luAVQ83zqZGZGsUY2kKGle4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:01:47] [0.5.1] [INFO] 122.96.50.157:17584 - "GET /proxy/music?token=kl7mS0b845Q HTTP/1.1" 200 [2026-04-18 03:06:32] [0.5.1] [INFO] 172.17.0.1:40104 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 03:06:33] [0.5.1] [INFO] 172.17.0.1:40116 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTMwOTIuODE3ODIwOCwiaWF0IjoxNzc2NDUyNzkyLjgxNzgyMTV9.C7wxOSXa71hHdU6N9pvHkJ0waeUfKjH2b4lp1TWL_xM HTTP/1.0" 404 [2026-04-18 03:06:35] [0.5.1] [INFO] 172.17.0.1:40126 - "GET /static/default/index.html HTTP/1.0" 200 [2026-04-18 03:06:35] [0.5.1] [INFO] 172.17.0.1:40140 - "GET /static/default/main.css?version=1775697572 HTTP/1.0" 200 [2026-04-18 03:06:35] [0.5.1] [INFO] 172.17.0.1:40142 - "GET /static/default/materialicons.woff2 HTTP/1.0" 200 [2026-04-18 03:06:35] [0.5.1] [INFO] 172.17.0.1:40144 - "GET /static/default/materialiconsoutlined.woff2 HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:40146 - "GET /static/default/jquery-3.7.1.min.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:40148 - "GET /static/default/md.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:40160 - "GET /getversion HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:40170 - "GET /getsetting HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:45690 - "GET /latestversion HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:45700 - "GET /musiclist HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:45728 - "GET /curplaylist?did=419359157 HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:45732 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:45740 - "GET /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiI0MTkzNTkxNTciLCJleHAiOjE3NzY0NTMwOTYuNDk4NzUxNCwiaWF0IjoxNzc2NDUyNzk2LjQ5ODc1MjR9.uoOTLGi-KB1BQ3g5-CkP34lj4vdAvNiZQY8fr1IQZ2w HTTP/1.0" 404 [2026-04-18 03:06:36] [0.5.1] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:06:36] [0.5.1] [INFO] device_player.py:834: get_volume. volume:8 [2026-04-18 03:06:36] [0.5.1] [INFO] 172.17.0.1:45712 - "GET /getvolume?did=419359157 HTTP/1.0" 200 [2026-04-18 03:06:39] [0.5.1] [INFO] 172.17.0.1:45742 - "GET /generate_ws_token?did=419359157 HTTP/1.0" 200 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 03:06:41] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:06:41] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:06:41] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:06:41] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:06:41] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=-Cyq8e878h4 [2026-04-18 03:06:41] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:06:42] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:06:42] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:06:42] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:06:42] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:06:42] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=-Cyq8e878h4 [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=-Cyq8e878h4 audio_id:1582971365183456177 [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=-Cyq8e878h4 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:06:43] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:06:43] [0.5.1] [INFO] device_player.py:808: 254.01108597210694 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:06:43] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:06:43] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:06:46] [0.5.1] [INFO] file.py:519: [proxy:5a31669e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:06:46] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:06:46] [0.5.1] [INFO] file.py:524: [proxy:5a31669e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:06:46] [0.5.1] [INFO] file.py:552: [proxy:5a31669e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:06:46] [0.5.1] [INFO] file.py:597: [proxy:5a31669e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:06:46] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:06:46] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 03:06:46] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776452806264"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:06:46] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776452806264: True [2026-04-18 03:06:46] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776467206&Signature=MBzSJGeLxkPnGY~T0oaYsrZtw6Tk-O-BTe0BAjk5lcGvAW3NlrCRq5ITbcc9O-bfHtJ~dxRQuyz9zD6ROR3NsrRbRThNyrQ8nPi-yrK42gQDqrPslLA9Bcbs8vkLRGl1BUGr9SG2YbZ3xVL3dHFrxOp34ospRHP3m2JL1DMBIpY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:06:46] [0.5.1] [INFO] 34.21.156.125:55528 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:06:46] [0.5.1] [INFO] file.py:608: [proxy:5a31669e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776467206&Signature=MBzSJGeLxkPnGY~T0oaYsrZtw6Tk-O-BTe0BAjk5lcGvAW3NlrCRq5ITbcc9O-bfHtJ~dxRQuyz9zD6ROR3NsrRbRThNyrQ8nPi-yrK42gQDqrPslLA9Bcbs8vkLRGl1BUGr9SG2YbZ3xVL3dHFrxOp34ospRHP3m2JL1DMBIpY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:06:46] [0.5.1] [INFO] file.py:624: [proxy:5a31669e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776467206&Signature=MBzSJGeLxkPnGY~T0oaYsrZtw6Tk-O-BTe0BAjk5lcGvAW3NlrCRq5ITbcc9O-bfHtJ~dxRQuyz9zD6ROR3NsrRbRThNyrQ8nPi-yrK42gQDqrPslLA9Bcbs8vkLRGl1BUGr9SG2YbZ3xVL3dHFrxOp34ospRHP3m2JL1DMBIpY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:06:47] [0.5.1] [INFO] file.py:645: [proxy:5a31669e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776467206&Signature=MBzSJGeLxkPnGY~T0oaYsrZtw6Tk-O-BTe0BAjk5lcGvAW3NlrCRq5ITbcc9O-bfHtJ~dxRQuyz9zD6ROR3NsrRbRThNyrQ8nPi-yrK42gQDqrPslLA9Bcbs8vkLRGl1BUGr9SG2YbZ3xVL3dHFrxOp34ospRHP3m2JL1DMBIpY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 03:06:47] [0.5.1] [INFO] file.py:672: [proxy:5a31669e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776467206&Signature=MBzSJGeLxkPnGY~T0oaYsrZtw6Tk-O-BTe0BAjk5lcGvAW3NlrCRq5ITbcc9O-bfHtJ~dxRQuyz9zD6ROR3NsrRbRThNyrQ8nPi-yrK42gQDqrPslLA9Bcbs8vkLRGl1BUGr9SG2YbZ3xVL3dHFrxOp34ospRHP3m2JL1DMBIpY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:06:48] [0.5.1] [INFO] 122.97.136.182:56876 - "GET /proxy/music?token=-Cyq8e878h4 HTTP/1.1" 200 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 03:10:57] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:10:57] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:10:57] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:10:57] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:10:57] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=lOWUTRFRz4s [2026-04-18 03:10:57] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:10:59] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:10:59] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:11:00] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:11:00] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:11:00] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=lOWUTRFRz4s [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=lOWUTRFRz4s audio_id:1582971365183456177 [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=lOWUTRFRz4s ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:11:01] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.044 秒 [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:11:01] [0.5.1] [INFO] device_player.py:808: 342.0440042269592 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:11:01] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:11:01] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:11:01] [0.5.1] [INFO] file.py:519: [proxy:c0c9148c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:11:01] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:11:01] [0.5.1] [INFO] file.py:524: [proxy:c0c9148c] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:11:01] [0.5.1] [INFO] file.py:552: [proxy:c0c9148c] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:11:01] [0.5.1] [INFO] file.py:597: [proxy:c0c9148c] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:11:01] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:11:01] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 03:11:01] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776453061319"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:11:01] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776453061319: True [2026-04-18 03:11:01] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776467461&Signature=UfQj~8ba1dBAGBlmY~rT6A~2lH-7WAhkgE03jkaR2faQPHYW5ibrd4m-65R4SpdascXssWgenvlUVlp-R0MUDLuN40bwZvOLUsB8oYGe0dPZah5t1pgDVpT-ZOGMWCv4q-RAF2D-4qGPYqoK4JaORzqn2AMRjGHlzW6qHGgd9Bg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:11:01] [0.5.1] [INFO] 34.21.156.125:38578 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:11:01] [0.5.1] [INFO] file.py:608: [proxy:c0c9148c] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776467461&Signature=UfQj~8ba1dBAGBlmY~rT6A~2lH-7WAhkgE03jkaR2faQPHYW5ibrd4m-65R4SpdascXssWgenvlUVlp-R0MUDLuN40bwZvOLUsB8oYGe0dPZah5t1pgDVpT-ZOGMWCv4q-RAF2D-4qGPYqoK4JaORzqn2AMRjGHlzW6qHGgd9Bg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:11:01] [0.5.1] [INFO] file.py:624: [proxy:c0c9148c] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776467461&Signature=UfQj~8ba1dBAGBlmY~rT6A~2lH-7WAhkgE03jkaR2faQPHYW5ibrd4m-65R4SpdascXssWgenvlUVlp-R0MUDLuN40bwZvOLUsB8oYGe0dPZah5t1pgDVpT-ZOGMWCv4q-RAF2D-4qGPYqoK4JaORzqn2AMRjGHlzW6qHGgd9Bg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:11:02] [0.5.1] [INFO] file.py:645: [proxy:c0c9148c] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776467461&Signature=UfQj~8ba1dBAGBlmY~rT6A~2lH-7WAhkgE03jkaR2faQPHYW5ibrd4m-65R4SpdascXssWgenvlUVlp-R0MUDLuN40bwZvOLUsB8oYGe0dPZah5t1pgDVpT-ZOGMWCv4q-RAF2D-4qGPYqoK4JaORzqn2AMRjGHlzW6qHGgd9Bg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 03:11:02] [0.5.1] [INFO] file.py:672: [proxy:c0c9148c] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776467461&Signature=UfQj~8ba1dBAGBlmY~rT6A~2lH-7WAhkgE03jkaR2faQPHYW5ibrd4m-65R4SpdascXssWgenvlUVlp-R0MUDLuN40bwZvOLUsB8oYGe0dPZah5t1pgDVpT-ZOGMWCv4q-RAF2D-4qGPYqoK4JaORzqn2AMRjGHlzW6qHGgd9Bg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:11:03] [0.5.1] [INFO] 122.97.136.182:63100 - "GET /proxy/music?token=lOWUTRFRz4s HTTP/1.1" 200 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 03:16:43] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:16:43] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:16:43] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:16:43] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:16:43] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=qsIt-9EgYQ4 [2026-04-18 03:16:43] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:16:44] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:16:44] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=qsIt-9EgYQ4 [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=qsIt-9EgYQ4 audio_id:1582971365183456177 [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=qsIt-9EgYQ4 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:16:45] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 228.672 秒 [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:16:45] [0.5.1] [INFO] device_player.py:808: 228.67233233833312 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:16:45] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:16:45] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:16:46] [0.5.1] [INFO] file.py:519: [proxy:1c3a3d6b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:16:46] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:16:46] [0.5.1] [INFO] file.py:524: [proxy:1c3a3d6b] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:16:46] [0.5.1] [INFO] file.py:552: [proxy:1c3a3d6b] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:16:46] [0.5.1] [INFO] file.py:597: [proxy:1c3a3d6b] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:16:46] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:16:46] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 03:16:46] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776453406062"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:16:46] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776453406062: True [2026-04-18 03:16:46] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776467806&Signature=Uhbcvse6gDXZhIqTT5sp69owukrEIoahSqjMlX0EffTTW3gcSrZnm0rqw-hOwbGQwLXrSVTo3uvi63nbEsqJ-ebQNBCTLYzclHXLv~21sDFU8IXYciNGYOL1yTugEwbH8VRtuJqt5mgzxff9tneJDkz0eto4Oro89RRLabHt2M4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:16:46] [0.5.1] [INFO] 34.21.156.125:36100 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:16:46] [0.5.1] [INFO] file.py:608: [proxy:1c3a3d6b] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776467806&Signature=Uhbcvse6gDXZhIqTT5sp69owukrEIoahSqjMlX0EffTTW3gcSrZnm0rqw-hOwbGQwLXrSVTo3uvi63nbEsqJ-ebQNBCTLYzclHXLv~21sDFU8IXYciNGYOL1yTugEwbH8VRtuJqt5mgzxff9tneJDkz0eto4Oro89RRLabHt2M4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:16:46] [0.5.1] [INFO] file.py:624: [proxy:1c3a3d6b] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776467806&Signature=Uhbcvse6gDXZhIqTT5sp69owukrEIoahSqjMlX0EffTTW3gcSrZnm0rqw-hOwbGQwLXrSVTo3uvi63nbEsqJ-ebQNBCTLYzclHXLv~21sDFU8IXYciNGYOL1yTugEwbH8VRtuJqt5mgzxff9tneJDkz0eto4Oro89RRLabHt2M4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:16:47] [0.5.1] [INFO] file.py:645: [proxy:1c3a3d6b] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776467806&Signature=Uhbcvse6gDXZhIqTT5sp69owukrEIoahSqjMlX0EffTTW3gcSrZnm0rqw-hOwbGQwLXrSVTo3uvi63nbEsqJ-ebQNBCTLYzclHXLv~21sDFU8IXYciNGYOL1yTugEwbH8VRtuJqt5mgzxff9tneJDkz0eto4Oro89RRLabHt2M4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 03:16:47] [0.5.1] [INFO] file.py:672: [proxy:1c3a3d6b] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776467806&Signature=Uhbcvse6gDXZhIqTT5sp69owukrEIoahSqjMlX0EffTTW3gcSrZnm0rqw-hOwbGQwLXrSVTo3uvi63nbEsqJ-ebQNBCTLYzclHXLv~21sDFU8IXYciNGYOL1yTugEwbH8VRtuJqt5mgzxff9tneJDkz0eto4Oro89RRLabHt2M4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:16:48] [0.5.1] [INFO] 122.97.136.182:36036 - "GET /proxy/music?token=qsIt-9EgYQ4 HTTP/1.1" 200 [2026-04-18 03:18:28] [0.5.1] [INFO] 172.17.0.1:42076 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 03:18:28] [0.5.1] [INFO] 172.17.0.1:42080 - "GET / HTTP/1.0" 200 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 03:20:34] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 03:20:34] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 03:20:34] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:20:34] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:20:34] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=kt565t-htyM [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:20:34] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:20:35] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:20:35] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:20:35] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:20:35] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=kt565t-htyM [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=kt565t-htyM audio_id:1582971365183456177 [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=kt565t-htyM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 03:20:37] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 228.725 秒 [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:20:37] [0.5.1] [INFO] device_player.py:808: 228.72472133636475 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:20:37] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:20:37] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:20:37] [0.5.1] [INFO] file.py:519: [proxy:dfd1ebc7] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 03:20:37] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 03:20:37] [0.5.1] [INFO] file.py:524: [proxy:dfd1ebc7] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 03:20:37] [0.5.1] [INFO] file.py:552: [proxy:dfd1ebc7] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:20:37] [0.5.1] [INFO] file.py:597: [proxy:dfd1ebc7] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:20:37] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:20:37] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 03:20:37] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776453637210"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:20:37] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776453637210: True [2026-04-18 03:20:37] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776468037&Signature=XfWky-cSItfdfVLCe6KdWIowUhpdOAHgTIgCge8ZrQ5WrrTLX6W8Tu7TQUgryc-qlZC2y80p7siR6Rx23IqKtyZzWBDIbdo~YOycmLxWkD0aYEONi-evFqa1ImwpxraUyOIIWfuhqaY9XT0J~Ba7zq~sDapEyFArwntoY3mQPtU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:20:37] [0.5.1] [INFO] 34.21.156.125:50644 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 03:20:37] [0.5.1] [INFO] file.py:608: [proxy:dfd1ebc7] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776468037&Signature=XfWky-cSItfdfVLCe6KdWIowUhpdOAHgTIgCge8ZrQ5WrrTLX6W8Tu7TQUgryc-qlZC2y80p7siR6Rx23IqKtyZzWBDIbdo~YOycmLxWkD0aYEONi-evFqa1ImwpxraUyOIIWfuhqaY9XT0J~Ba7zq~sDapEyFArwntoY3mQPtU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:20:37] [0.5.1] [INFO] file.py:624: [proxy:dfd1ebc7] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776468037&Signature=XfWky-cSItfdfVLCe6KdWIowUhpdOAHgTIgCge8ZrQ5WrrTLX6W8Tu7TQUgryc-qlZC2y80p7siR6Rx23IqKtyZzWBDIbdo~YOycmLxWkD0aYEONi-evFqa1ImwpxraUyOIIWfuhqaY9XT0J~Ba7zq~sDapEyFArwntoY3mQPtU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:20:38] [0.5.1] [INFO] file.py:645: [proxy:dfd1ebc7] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776468037&Signature=XfWky-cSItfdfVLCe6KdWIowUhpdOAHgTIgCge8ZrQ5WrrTLX6W8Tu7TQUgryc-qlZC2y80p7siR6Rx23IqKtyZzWBDIbdo~YOycmLxWkD0aYEONi-evFqa1ImwpxraUyOIIWfuhqaY9XT0J~Ba7zq~sDapEyFArwntoY3mQPtU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 03:20:38] [0.5.1] [INFO] file.py:672: [proxy:dfd1ebc7] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776468037&Signature=XfWky-cSItfdfVLCe6KdWIowUhpdOAHgTIgCge8ZrQ5WrrTLX6W8Tu7TQUgryc-qlZC2y80p7siR6Rx23IqKtyZzWBDIbdo~YOycmLxWkD0aYEONi-evFqa1ImwpxraUyOIIWfuhqaY9XT0J~Ba7zq~sDapEyFArwntoY3mQPtU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:20:38] [0.5.1] [INFO] 122.96.50.157:65214 - "GET /proxy/music?token=kt565t-htyM HTTP/1.1" 200 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 03:24:25] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 03:24:25] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 03:24:25] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:24:25] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:24:25] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=CX1YRkNsOiw [2026-04-18 03:24:25] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:24:26] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:24:26] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:24:27] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:24:27] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:24:27] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=CX1YRkNsOiw [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=CX1YRkNsOiw audio_id:1582971365183456177 [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=CX1YRkNsOiw ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 03:24:28] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 268.651 秒 [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:24:28] [0.5.1] [INFO] device_player.py:808: 268.6513807373047 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:24:28] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:24:28] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:24:28] [0.5.1] [INFO] file.py:519: [proxy:9b4ec8fe] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:24:28] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 03:24:28] [0.5.1] [INFO] file.py:524: [proxy:9b4ec8fe] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:24:28] [0.5.1] [INFO] file.py:552: [proxy:9b4ec8fe] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:24:28] [0.5.1] [INFO] file.py:597: [proxy:9b4ec8fe] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:24:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:24:28] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 03:24:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776453868345"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:24:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776453868345: True [2026-04-18 03:24:28] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776468268&Signature=iWDtUX8pbYxV6yIvTFQ82yty2noYntYrW3CU9O4Kj-Z7mXkdQhI8qgXzxRaP6g-8JvZAbPQTgz5JS0CDEhmw0XDie2Nqx~1qcmH3BVamoyDD6bQB2miIbIwRLvy87nOOPEaMtjnBZon8BlVfDIBW3PJdd3ty23Wq7Q7EMvr-DNM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:24:28] [0.5.1] [INFO] 34.21.156.125:52466 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 03:24:28] [0.5.1] [INFO] file.py:608: [proxy:9b4ec8fe] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776468268&Signature=iWDtUX8pbYxV6yIvTFQ82yty2noYntYrW3CU9O4Kj-Z7mXkdQhI8qgXzxRaP6g-8JvZAbPQTgz5JS0CDEhmw0XDie2Nqx~1qcmH3BVamoyDD6bQB2miIbIwRLvy87nOOPEaMtjnBZon8BlVfDIBW3PJdd3ty23Wq7Q7EMvr-DNM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:24:28] [0.5.1] [INFO] file.py:624: [proxy:9b4ec8fe] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776468268&Signature=iWDtUX8pbYxV6yIvTFQ82yty2noYntYrW3CU9O4Kj-Z7mXkdQhI8qgXzxRaP6g-8JvZAbPQTgz5JS0CDEhmw0XDie2Nqx~1qcmH3BVamoyDD6bQB2miIbIwRLvy87nOOPEaMtjnBZon8BlVfDIBW3PJdd3ty23Wq7Q7EMvr-DNM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:24:29] [0.5.1] [INFO] file.py:645: [proxy:9b4ec8fe] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776468268&Signature=iWDtUX8pbYxV6yIvTFQ82yty2noYntYrW3CU9O4Kj-Z7mXkdQhI8qgXzxRaP6g-8JvZAbPQTgz5JS0CDEhmw0XDie2Nqx~1qcmH3BVamoyDD6bQB2miIbIwRLvy87nOOPEaMtjnBZon8BlVfDIBW3PJdd3ty23Wq7Q7EMvr-DNM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 03:24:29] [0.5.1] [INFO] file.py:683: [proxy:9b4ec8fe] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 03:24:29] [0.5.1] [INFO] 122.96.50.157:17932 - "GET /proxy/music?token=CX1YRkNsOiw HTTP/1.1" 200 [2026-04-18 03:27:43] [0.5.1] [INFO] file.py:738: [proxy:9b4ec8fe] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776468268&Signature=iWDtUX8pbYxV6yIvTFQ82yty2noYntYrW3CU9O4Kj-Z7mXkdQhI8qgXzxRaP6g-8JvZAbPQTgz5JS0CDEhmw0XDie2Nqx~1qcmH3BVamoyDD6bQB2miIbIwRLvy87nOOPEaMtjnBZon8BlVfDIBW3PJdd3ty23Wq7Q7EMvr-DNM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 03:28:56] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 03:28:56] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 03:28:56] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:28:56] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 03:28:56] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=uRdePAh8K2k [2026-04-18 03:28:56] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:28:57] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:28:57] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=uRdePAh8K2k [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=uRdePAh8K2k audio_id:1582971365183456177 [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=uRdePAh8K2k ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 03:28:58] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:28:58] [0.5.1] [INFO] device_player.py:808: 1.4052268705444335 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:28:58] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:28:58] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:519: [proxy:7aff6f00] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 03:28:59] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:524: [proxy:7aff6f00] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:552: [proxy:7aff6f00] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:597: [proxy:7aff6f00] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:28:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 03:28:59] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 03:28:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776454139079"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:28:59] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776454139079: True [2026-04-18 03:28:59] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 03:28:59] [0.5.1] [INFO] 34.21.156.125:44974 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:608: [proxy:7aff6f00] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:624: [proxy:7aff6f00] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:28:59] [0.5.1] [INFO] 34.21.156.125:44974 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:645: [proxy:7aff6f00] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:683: [proxy:7aff6f00] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 03:28:59] [0.5.1] [INFO] 122.96.50.157:47117 - "GET /proxy/music?token=uRdePAh8K2k HTTP/1.1" 200 [2026-04-18 03:28:59] [0.5.1] [INFO] file.py:738: [proxy:7aff6f00] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 03:29:00] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 03:29:00] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 03:29:00] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:29:00] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:29:00] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=aB5sotVsxD4 [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:29:00] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:29:01] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:29:01] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:29:01] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:29:01] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=aB5sotVsxD4 [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=aB5sotVsxD4 audio_id:1582971365183456177 [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=aB5sotVsxD4 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:29:02] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:29:02] [0.5.1] [INFO] device_player.py:808: 299.2584081077576 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:29:02] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:29:02] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:29:02] [0.5.1] [INFO] file.py:519: [proxy:238163f1] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:29:02] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:29:02] [0.5.1] [INFO] file.py:524: [proxy:238163f1] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:29:02] [0.5.1] [INFO] file.py:552: [proxy:238163f1] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:29:02] [0.5.1] [INFO] file.py:597: [proxy:238163f1] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:29:02] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:29:02] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 03:29:02] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776454142973"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:29:03] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776454142973: True [2026-04-18 03:29:03] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776468543&Signature=elNa1nAW8~n5THCA0bAL9t6TlsBDyaQsDzFR-gUh2Xpy8iAu94QN1xPNatkMnW4-cnUUa6-jqcM2OenyZllk7TO2KOfX77LEgA~-UNEvsv5tqEv1gdj443GENGdhFwN5q4OghIZj0iF~~LQNkH82Q0pSo5gE3~e~gIKywGmA~lE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:29:03] [0.5.1] [INFO] 34.21.156.125:44984 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:29:03] [0.5.1] [INFO] file.py:608: [proxy:238163f1] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776468543&Signature=elNa1nAW8~n5THCA0bAL9t6TlsBDyaQsDzFR-gUh2Xpy8iAu94QN1xPNatkMnW4-cnUUa6-jqcM2OenyZllk7TO2KOfX77LEgA~-UNEvsv5tqEv1gdj443GENGdhFwN5q4OghIZj0iF~~LQNkH82Q0pSo5gE3~e~gIKywGmA~lE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:29:03] [0.5.1] [INFO] file.py:624: [proxy:238163f1] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776468543&Signature=elNa1nAW8~n5THCA0bAL9t6TlsBDyaQsDzFR-gUh2Xpy8iAu94QN1xPNatkMnW4-cnUUa6-jqcM2OenyZllk7TO2KOfX77LEgA~-UNEvsv5tqEv1gdj443GENGdhFwN5q4OghIZj0iF~~LQNkH82Q0pSo5gE3~e~gIKywGmA~lE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:29:03] [0.5.1] [INFO] file.py:645: [proxy:238163f1] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776468543&Signature=elNa1nAW8~n5THCA0bAL9t6TlsBDyaQsDzFR-gUh2Xpy8iAu94QN1xPNatkMnW4-cnUUa6-jqcM2OenyZllk7TO2KOfX77LEgA~-UNEvsv5tqEv1gdj443GENGdhFwN5q4OghIZj0iF~~LQNkH82Q0pSo5gE3~e~gIKywGmA~lE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 03:29:03] [0.5.1] [INFO] file.py:672: [proxy:238163f1] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776468543&Signature=elNa1nAW8~n5THCA0bAL9t6TlsBDyaQsDzFR-gUh2Xpy8iAu94QN1xPNatkMnW4-cnUUa6-jqcM2OenyZllk7TO2KOfX77LEgA~-UNEvsv5tqEv1gdj443GENGdhFwN5q4OghIZj0iF~~LQNkH82Q0pSo5gE3~e~gIKywGmA~lE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:29:04] [0.5.1] [INFO] 122.97.136.182:49217 - "GET /proxy/music?token=aB5sotVsxD4 HTTP/1.1" 200 [2026-04-18 03:31:26] [0.5.1] [INFO] 172.17.0.1:47198 - "GET / HTTP/1.0" 200 [2026-04-18 03:31:27] [0.5.1] [INFO] 172.17.0.1:47204 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 03:31:27] [0.5.1] [INFO] 172.17.0.1:47208 - "GET /css/support_parent.css HTTP/1.0" 404 [2026-04-18 03:31:27] [0.5.1] [INFO] 172.17.0.1:47214 - "GET /assets/js/qr_modal.js HTTP/1.0" 404 [2026-04-18 03:31:27] [0.5.1] [INFO] 172.17.0.1:47218 - "GET /assets/js/auth.js HTTP/1.0" 404 [2026-04-18 03:31:28] [0.5.1] [INFO] 172.17.0.1:47232 - "GET /js/twint_ch.js HTTP/1.0" 404 [2026-04-18 03:31:28] [0.5.1] [INFO] 172.17.0.1:47248 - "GET /bot-connect.js HTTP/1.0" 404 [2026-04-18 03:31:28] [0.5.1] [INFO] 172.17.0.1:47256 - "GET /static/style/protect/index.js HTTP/1.0" 404 [2026-04-18 03:31:28] [0.5.1] [INFO] 172.17.0.1:47266 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 03:31:29] [0.5.1] [INFO] 172.17.0.1:47280 - "GET /assets/js/message.js HTTP/1.0" 404 [2026-04-18 03:31:29] [0.5.1] [INFO] 172.17.0.1:47296 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 03:31:29] [0.5.1] [INFO] 172.17.0.1:47304 - "GET /static/style/sys_files/index.js HTTP/1.0" 404 [2026-04-18 03:31:29] [0.5.1] [INFO] 172.17.0.1:47320 - "GET /js/lkk_ch.js HTTP/1.0" 404 [2026-04-18 03:31:30] [0.5.1] [INFO] 172.17.0.1:47330 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 03:34:02] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 03:34:02] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 03:34:02] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:34:02] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:34:02] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=_Q3UiXH49uQ [2026-04-18 03:34:02] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:34:03] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:34:03] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:34:04] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:34:04] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:34:04] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=_Q3UiXH49uQ [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=_Q3UiXH49uQ audio_id:1582971365183456177 [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=_Q3UiXH49uQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:34:05] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.870 秒 [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:34:05] [0.5.1] [INFO] device_player.py:808: 226.86965000561523 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:34:05] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:34:05] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:34:05] [0.5.1] [INFO] file.py:519: [proxy:16e2319d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:34:05] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:34:05] [0.5.1] [INFO] file.py:524: [proxy:16e2319d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:34:05] [0.5.1] [INFO] file.py:552: [proxy:16e2319d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:34:05] [0.5.1] [INFO] file.py:597: [proxy:16e2319d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:34:05] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:34:05] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 03:34:05] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776454445258"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:34:05] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776454445258: True [2026-04-18 03:34:05] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776468845&Signature=Q45zsX2UwIo-lhBFKKQfNEDO4jMattWFCy8Qbdx~4pK8icQNnFXk~eiYfwRL5h~0NWFK3PWBrXhTLVaN76lkO9K9H3EkWJmHmJUSdQHn6-WJf3JvNI8Mq27T59LamdL4W4l-msTLd5wDP99vPODH64Dm9NRHTsqCfkWojQ2ENJc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:34:05] [0.5.1] [INFO] 34.21.156.125:34998 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:34:05] [0.5.1] [INFO] file.py:608: [proxy:16e2319d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776468845&Signature=Q45zsX2UwIo-lhBFKKQfNEDO4jMattWFCy8Qbdx~4pK8icQNnFXk~eiYfwRL5h~0NWFK3PWBrXhTLVaN76lkO9K9H3EkWJmHmJUSdQHn6-WJf3JvNI8Mq27T59LamdL4W4l-msTLd5wDP99vPODH64Dm9NRHTsqCfkWojQ2ENJc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:34:05] [0.5.1] [INFO] file.py:624: [proxy:16e2319d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776468845&Signature=Q45zsX2UwIo-lhBFKKQfNEDO4jMattWFCy8Qbdx~4pK8icQNnFXk~eiYfwRL5h~0NWFK3PWBrXhTLVaN76lkO9K9H3EkWJmHmJUSdQHn6-WJf3JvNI8Mq27T59LamdL4W4l-msTLd5wDP99vPODH64Dm9NRHTsqCfkWojQ2ENJc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:34:06] [0.5.1] [INFO] file.py:645: [proxy:16e2319d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776468845&Signature=Q45zsX2UwIo-lhBFKKQfNEDO4jMattWFCy8Qbdx~4pK8icQNnFXk~eiYfwRL5h~0NWFK3PWBrXhTLVaN76lkO9K9H3EkWJmHmJUSdQHn6-WJf3JvNI8Mq27T59LamdL4W4l-msTLd5wDP99vPODH64Dm9NRHTsqCfkWojQ2ENJc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 03:34:06] [0.5.1] [INFO] file.py:672: [proxy:16e2319d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776468845&Signature=Q45zsX2UwIo-lhBFKKQfNEDO4jMattWFCy8Qbdx~4pK8icQNnFXk~eiYfwRL5h~0NWFK3PWBrXhTLVaN76lkO9K9H3EkWJmHmJUSdQHn6-WJf3JvNI8Mq27T59LamdL4W4l-msTLd5wDP99vPODH64Dm9NRHTsqCfkWojQ2ENJc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:34:07] [0.5.1] [INFO] 122.97.136.182:56201 - "GET /proxy/music?token=_Q3UiXH49uQ HTTP/1.1" 200 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 03:37:51] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 03:37:51] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 03:37:51] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:37:51] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 03:37:51] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=NGaYFvn0LGQ [2026-04-18 03:37:51] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:37:52] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:37:53] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:37:53] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:37:53] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:37:53] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=NGaYFvn0LGQ [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=NGaYFvn0LGQ audio_id:1582971365183456177 [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=NGaYFvn0LGQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:37:54] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 264.643 秒 [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:37:54] [0.5.1] [INFO] device_player.py:808: 264.64277709388733 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:37:54] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:37:54] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:37:54] [0.5.1] [INFO] file.py:519: [proxy:2e351dfb] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 03:37:54] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 03:37:54] [0.5.1] [INFO] file.py:524: [proxy:2e351dfb] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 03:37:54] [0.5.1] [INFO] file.py:552: [proxy:2e351dfb] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:37:54] [0.5.1] [INFO] file.py:597: [proxy:2e351dfb] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:37:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:37:54] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 03:37:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776454674597"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:37:54] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776454674597: True [2026-04-18 03:37:54] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776469074&Signature=RN5vRL--lt8uYG0-cdEvWLQ8Rl7q3PVbDBgP2Oyq1JXj6imC1hQ-1WntuNDdQV4tJcjdu41ZgvMMQ~NsjFGPRo5BlDzinoEG25A32X9UydwXCdsIwTtPBf770GLfoqa9djwixI-dBos8HezKAJ34ojYmrftgefQBoVw-mjeDJ1Q_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:37:54] [0.5.1] [INFO] 34.21.156.125:60598 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 03:37:54] [0.5.1] [INFO] file.py:608: [proxy:2e351dfb] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776469074&Signature=RN5vRL--lt8uYG0-cdEvWLQ8Rl7q3PVbDBgP2Oyq1JXj6imC1hQ-1WntuNDdQV4tJcjdu41ZgvMMQ~NsjFGPRo5BlDzinoEG25A32X9UydwXCdsIwTtPBf770GLfoqa9djwixI-dBos8HezKAJ34ojYmrftgefQBoVw-mjeDJ1Q_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:37:54] [0.5.1] [INFO] file.py:624: [proxy:2e351dfb] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776469074&Signature=RN5vRL--lt8uYG0-cdEvWLQ8Rl7q3PVbDBgP2Oyq1JXj6imC1hQ-1WntuNDdQV4tJcjdu41ZgvMMQ~NsjFGPRo5BlDzinoEG25A32X9UydwXCdsIwTtPBf770GLfoqa9djwixI-dBos8HezKAJ34ojYmrftgefQBoVw-mjeDJ1Q_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:37:55] [0.5.1] [INFO] file.py:645: [proxy:2e351dfb] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776469074&Signature=RN5vRL--lt8uYG0-cdEvWLQ8Rl7q3PVbDBgP2Oyq1JXj6imC1hQ-1WntuNDdQV4tJcjdu41ZgvMMQ~NsjFGPRo5BlDzinoEG25A32X9UydwXCdsIwTtPBf770GLfoqa9djwixI-dBos8HezKAJ34ojYmrftgefQBoVw-mjeDJ1Q_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 03:37:55] [0.5.1] [INFO] file.py:672: [proxy:2e351dfb] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776469074&Signature=RN5vRL--lt8uYG0-cdEvWLQ8Rl7q3PVbDBgP2Oyq1JXj6imC1hQ-1WntuNDdQV4tJcjdu41ZgvMMQ~NsjFGPRo5BlDzinoEG25A32X9UydwXCdsIwTtPBf770GLfoqa9djwixI-dBos8HezKAJ34ojYmrftgefQBoVw-mjeDJ1Q_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:37:56] [0.5.1] [INFO] 122.97.136.182:46381 - "GET /proxy/music?token=NGaYFvn0LGQ HTTP/1.1" 200 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 03:42:19] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:42:19] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:42:19] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:42:19] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:42:19] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=xGs9zoHx_Lk [2026-04-18 03:42:19] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:42:20] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:42:20] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:42:21] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:42:21] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:42:21] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=xGs9zoHx_Lk [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=xGs9zoHx_Lk audio_id:1582971365183456177 [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=xGs9zoHx_Lk ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:42:22] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.005 秒 [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 295.727 秒 [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:42:22] [0.5.1] [INFO] device_player.py:808: 295.72741748265076 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:42:22] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:42:22] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:42:22] [0.5.1] [INFO] file.py:519: [proxy:7e47cccc] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:42:22] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 03:42:22] [0.5.1] [INFO] file.py:524: [proxy:7e47cccc] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 03:42:22] [0.5.1] [INFO] file.py:552: [proxy:7e47cccc] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:42:22] [0.5.1] [INFO] file.py:597: [proxy:7e47cccc] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:42:22] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:42:22] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 03:42:22] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776454942204"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:42:22] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776454942204: True [2026-04-18 03:42:22] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776469342&Signature=UJEHy5EQTNA~IbS7Gs6JrEq8QCrPfYwUGJM3ygjVuJRGaJZFH6Lc2Zcnqb-mva11GGtV8VTBCppw35DVQmg8zuNjhLWqfaMMXgzIbk9f1x9Q~AzW5nkcj-YOfV5bt-xSJ7x~3B6u86tcc102~wcjrKLdlOGh8q9TTBrS1xTxAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:42:22] [0.5.1] [INFO] 34.21.156.125:37920 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 03:42:22] [0.5.1] [INFO] file.py:608: [proxy:7e47cccc] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776469342&Signature=UJEHy5EQTNA~IbS7Gs6JrEq8QCrPfYwUGJM3ygjVuJRGaJZFH6Lc2Zcnqb-mva11GGtV8VTBCppw35DVQmg8zuNjhLWqfaMMXgzIbk9f1x9Q~AzW5nkcj-YOfV5bt-xSJ7x~3B6u86tcc102~wcjrKLdlOGh8q9TTBrS1xTxAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:42:22] [0.5.1] [INFO] file.py:624: [proxy:7e47cccc] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776469342&Signature=UJEHy5EQTNA~IbS7Gs6JrEq8QCrPfYwUGJM3ygjVuJRGaJZFH6Lc2Zcnqb-mva11GGtV8VTBCppw35DVQmg8zuNjhLWqfaMMXgzIbk9f1x9Q~AzW5nkcj-YOfV5bt-xSJ7x~3B6u86tcc102~wcjrKLdlOGh8q9TTBrS1xTxAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:42:23] [0.5.1] [INFO] file.py:645: [proxy:7e47cccc] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776469342&Signature=UJEHy5EQTNA~IbS7Gs6JrEq8QCrPfYwUGJM3ygjVuJRGaJZFH6Lc2Zcnqb-mva11GGtV8VTBCppw35DVQmg8zuNjhLWqfaMMXgzIbk9f1x9Q~AzW5nkcj-YOfV5bt-xSJ7x~3B6u86tcc102~wcjrKLdlOGh8q9TTBrS1xTxAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 03:42:23] [0.5.1] [INFO] file.py:672: [proxy:7e47cccc] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776469342&Signature=UJEHy5EQTNA~IbS7Gs6JrEq8QCrPfYwUGJM3ygjVuJRGaJZFH6Lc2Zcnqb-mva11GGtV8VTBCppw35DVQmg8zuNjhLWqfaMMXgzIbk9f1x9Q~AzW5nkcj-YOfV5bt-xSJ7x~3B6u86tcc102~wcjrKLdlOGh8q9TTBrS1xTxAIg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:42:24] [0.5.1] [INFO] 122.97.136.182:38072 - "GET /proxy/music?token=xGs9zoHx_Lk HTTP/1.1" 200 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 03:47:17] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:47:17] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:47:17] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:47:17] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:47:17] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=cX8ASdAyM8c [2026-04-18 03:47:17] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:47:18] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:47:18] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:47:19] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:47:19] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:47:19] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=cX8ASdAyM8c [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=cX8ASdAyM8c audio_id:1582971365183456177 [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=cX8ASdAyM8c ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:47:20] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:47:20] [0.5.1] [INFO] device_player.py:808: 254.01128648213196 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:47:20] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:47:20] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:47:20] [0.5.1] [INFO] file.py:519: [proxy:634f0f6e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:47:20] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:47:20] [0.5.1] [INFO] file.py:524: [proxy:634f0f6e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:47:20] [0.5.1] [INFO] file.py:552: [proxy:634f0f6e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:47:20] [0.5.1] [INFO] file.py:597: [proxy:634f0f6e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:47:20] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:47:20] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 03:47:20] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776455240598"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:47:20] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776455240598: True [2026-04-18 03:47:20] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776469640&Signature=cXqTmmk-AzH6UuQ884qW0iih2ewg91ERccupEm6R~8iCo0yCGBYxVjacozNIEU~A8gncP3Tv6U0qrakOi9X4RVjO8PXb77tZvS1bbN7RWzaEYBq8ou1-pj3ATovYgz9C~jWVscXhVOvawvjaVaUJn5~1CJO-PeTj0Bn0ZUXA0vY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:47:20] [0.5.1] [INFO] 34.21.156.125:43262 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:47:20] [0.5.1] [INFO] file.py:608: [proxy:634f0f6e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776469640&Signature=cXqTmmk-AzH6UuQ884qW0iih2ewg91ERccupEm6R~8iCo0yCGBYxVjacozNIEU~A8gncP3Tv6U0qrakOi9X4RVjO8PXb77tZvS1bbN7RWzaEYBq8ou1-pj3ATovYgz9C~jWVscXhVOvawvjaVaUJn5~1CJO-PeTj0Bn0ZUXA0vY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:47:20] [0.5.1] [INFO] file.py:624: [proxy:634f0f6e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776469640&Signature=cXqTmmk-AzH6UuQ884qW0iih2ewg91ERccupEm6R~8iCo0yCGBYxVjacozNIEU~A8gncP3Tv6U0qrakOi9X4RVjO8PXb77tZvS1bbN7RWzaEYBq8ou1-pj3ATovYgz9C~jWVscXhVOvawvjaVaUJn5~1CJO-PeTj0Bn0ZUXA0vY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:47:21] [0.5.1] [INFO] file.py:645: [proxy:634f0f6e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776469640&Signature=cXqTmmk-AzH6UuQ884qW0iih2ewg91ERccupEm6R~8iCo0yCGBYxVjacozNIEU~A8gncP3Tv6U0qrakOi9X4RVjO8PXb77tZvS1bbN7RWzaEYBq8ou1-pj3ATovYgz9C~jWVscXhVOvawvjaVaUJn5~1CJO-PeTj0Bn0ZUXA0vY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 03:47:21] [0.5.1] [INFO] file.py:672: [proxy:634f0f6e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776469640&Signature=cXqTmmk-AzH6UuQ884qW0iih2ewg91ERccupEm6R~8iCo0yCGBYxVjacozNIEU~A8gncP3Tv6U0qrakOi9X4RVjO8PXb77tZvS1bbN7RWzaEYBq8ou1-pj3ATovYgz9C~jWVscXhVOvawvjaVaUJn5~1CJO-PeTj0Bn0ZUXA0vY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:47:22] [0.5.1] [INFO] 122.96.50.157:44546 - "GET /proxy/music?token=cX8ASdAyM8c HTTP/1.1" 200 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 03:51:34] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:51:34] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:51:34] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:51:34] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:51:34] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=mkQmCyyLBYU [2026-04-18 03:51:34] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:51:35] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:51:35] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:51:35] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:51:35] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:51:35] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=mkQmCyyLBYU [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=mkQmCyyLBYU audio_id:1582971365183456177 [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=mkQmCyyLBYU ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:51:37] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.043 秒 [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:51:37] [0.5.1] [INFO] device_player.py:808: 342.0432465327148 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:51:37] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:51:37] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:51:37] [0.5.1] [INFO] file.py:519: [proxy:4180a130] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:51:37] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:51:37] [0.5.1] [INFO] file.py:524: [proxy:4180a130] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:51:37] [0.5.1] [INFO] file.py:552: [proxy:4180a130] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:51:37] [0.5.1] [INFO] file.py:597: [proxy:4180a130] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:51:37] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:51:37] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 03:51:37] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776455497270"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:51:37] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776455497270: True [2026-04-18 03:51:37] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776469897&Signature=RGU5CwNAfpUieB7c3y~E3YZgKCmZgr3W7etHrg~PGJoSiZMPENtP2Eq7xF4uBGoB-r-NTtncUWAptlA5NeA8r4L8rs2l8CgIcjfiMbRpbFrY3Z3evlNQeP5R1HMnaKDhpz5GwERYoF4Pc~25lCEMWc4vcXkp2bXFN-mpQhkJSDU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:51:37] [0.5.1] [INFO] 34.21.156.125:37496 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:51:37] [0.5.1] [INFO] file.py:608: [proxy:4180a130] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776469897&Signature=RGU5CwNAfpUieB7c3y~E3YZgKCmZgr3W7etHrg~PGJoSiZMPENtP2Eq7xF4uBGoB-r-NTtncUWAptlA5NeA8r4L8rs2l8CgIcjfiMbRpbFrY3Z3evlNQeP5R1HMnaKDhpz5GwERYoF4Pc~25lCEMWc4vcXkp2bXFN-mpQhkJSDU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:51:37] [0.5.1] [INFO] file.py:624: [proxy:4180a130] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776469897&Signature=RGU5CwNAfpUieB7c3y~E3YZgKCmZgr3W7etHrg~PGJoSiZMPENtP2Eq7xF4uBGoB-r-NTtncUWAptlA5NeA8r4L8rs2l8CgIcjfiMbRpbFrY3Z3evlNQeP5R1HMnaKDhpz5GwERYoF4Pc~25lCEMWc4vcXkp2bXFN-mpQhkJSDU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:51:38] [0.5.1] [INFO] file.py:645: [proxy:4180a130] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776469897&Signature=RGU5CwNAfpUieB7c3y~E3YZgKCmZgr3W7etHrg~PGJoSiZMPENtP2Eq7xF4uBGoB-r-NTtncUWAptlA5NeA8r4L8rs2l8CgIcjfiMbRpbFrY3Z3evlNQeP5R1HMnaKDhpz5GwERYoF4Pc~25lCEMWc4vcXkp2bXFN-mpQhkJSDU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 03:51:38] [0.5.1] [INFO] file.py:672: [proxy:4180a130] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776469897&Signature=RGU5CwNAfpUieB7c3y~E3YZgKCmZgr3W7etHrg~PGJoSiZMPENtP2Eq7xF4uBGoB-r-NTtncUWAptlA5NeA8r4L8rs2l8CgIcjfiMbRpbFrY3Z3evlNQeP5R1HMnaKDhpz5GwERYoF4Pc~25lCEMWc4vcXkp2bXFN-mpQhkJSDU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:51:39] [0.5.1] [INFO] 122.96.50.157:36185 - "GET /proxy/music?token=mkQmCyyLBYU HTTP/1.1" 200 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 03:57:19] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:57:19] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 03:57:19] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 03:57:19] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:57:19] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=fXYFgFAAKPE [2026-04-18 03:57:19] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 03:57:20] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:57:20] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 03:57:21] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 03:57:21] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 03:57:21] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=fXYFgFAAKPE [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=fXYFgFAAKPE audio_id:1582971365183456177 [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=fXYFgFAAKPE ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 03:57:22] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 228.672 秒 [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 03:57:22] [0.5.1] [INFO] device_player.py:808: 228.67221455955504 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 03:57:22] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 03:57:22] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 03:57:22] [0.5.1] [INFO] file.py:519: [proxy:fe9d4a49] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:57:22] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 03:57:22] [0.5.1] [INFO] file.py:524: [proxy:fe9d4a49] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 03:57:22] [0.5.1] [INFO] file.py:552: [proxy:fe9d4a49] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 03:57:22] [0.5.1] [INFO] file.py:597: [proxy:fe9d4a49] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 03:57:22] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 03:57:22] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 03:57:22] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776455842515"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 03:57:22] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776455842515: True [2026-04-18 03:57:22] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776470242&Signature=EwGXUjO6lAQqtCHYS1CLWCoTt1iLh7qFJyG1zpOqdTNB2lCq7781V9hszx1RuV6YSUa20ck-ZDhAIEbutOfisI~FfYrQVrN9-eYEEaV6dnmUQnz6fqc~Du1ecMaTmQVdEymBaxyTkxyJzdQpEsCBtvC4KbxWmow6F4Xn8cYZzz4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:57:22] [0.5.1] [INFO] 34.21.156.125:34792 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 03:57:22] [0.5.1] [INFO] file.py:608: [proxy:fe9d4a49] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776470242&Signature=EwGXUjO6lAQqtCHYS1CLWCoTt1iLh7qFJyG1zpOqdTNB2lCq7781V9hszx1RuV6YSUa20ck-ZDhAIEbutOfisI~FfYrQVrN9-eYEEaV6dnmUQnz6fqc~Du1ecMaTmQVdEymBaxyTkxyJzdQpEsCBtvC4KbxWmow6F4Xn8cYZzz4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:57:22] [0.5.1] [INFO] file.py:624: [proxy:fe9d4a49] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776470242&Signature=EwGXUjO6lAQqtCHYS1CLWCoTt1iLh7qFJyG1zpOqdTNB2lCq7781V9hszx1RuV6YSUa20ck-ZDhAIEbutOfisI~FfYrQVrN9-eYEEaV6dnmUQnz6fqc~Du1ecMaTmQVdEymBaxyTkxyJzdQpEsCBtvC4KbxWmow6F4Xn8cYZzz4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 03:57:23] [0.5.1] [INFO] file.py:645: [proxy:fe9d4a49] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776470242&Signature=EwGXUjO6lAQqtCHYS1CLWCoTt1iLh7qFJyG1zpOqdTNB2lCq7781V9hszx1RuV6YSUa20ck-ZDhAIEbutOfisI~FfYrQVrN9-eYEEaV6dnmUQnz6fqc~Du1ecMaTmQVdEymBaxyTkxyJzdQpEsCBtvC4KbxWmow6F4Xn8cYZzz4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 03:57:23] [0.5.1] [INFO] file.py:672: [proxy:fe9d4a49] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776470242&Signature=EwGXUjO6lAQqtCHYS1CLWCoTt1iLh7qFJyG1zpOqdTNB2lCq7781V9hszx1RuV6YSUa20ck-ZDhAIEbutOfisI~FfYrQVrN9-eYEEaV6dnmUQnz6fqc~Du1ecMaTmQVdEymBaxyTkxyJzdQpEsCBtvC4KbxWmow6F4Xn8cYZzz4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 03:57:24] [0.5.1] [INFO] 122.96.50.157:37863 - "GET /proxy/music?token=fXYFgFAAKPE HTTP/1.1" 200 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 04:01:10] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:01:10] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:01:10] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:01:10] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:01:10] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=3Bw7eRWNsy4 [2026-04-18 04:01:10] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:01:11] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:01:11] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:01:12] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:01:12] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:01:12] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=3Bw7eRWNsy4 [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=3Bw7eRWNsy4 audio_id:1582971365183456177 [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=3Bw7eRWNsy4 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 04:01:13] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 228.724 秒 [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:01:13] [0.5.1] [INFO] device_player.py:808: 228.72365345954896 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:01:13] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:01:13] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:01:13] [0.5.1] [INFO] file.py:519: [proxy:769fc6f6] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 04:01:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 04:01:13] [0.5.1] [INFO] file.py:524: [proxy:769fc6f6] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 04:01:13] [0.5.1] [INFO] file.py:552: [proxy:769fc6f6] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:01:13] [0.5.1] [INFO] file.py:597: [proxy:769fc6f6] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:01:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:01:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 04:01:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776456073329"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:01:13] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776456073329: True [2026-04-18 04:01:13] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776470473&Signature=YzsSq3SZ~WBht4vjjXhBHi-ZBu3WLBX4tdSCW0KzINoVKbsiqJd6dw8FBRO6m9~uTFsuUk2DcNWnjAkxoaHHLLOgikkvEoP6J~BKCZt5RN4IPAiDIgVarZkbD9jfXYv0YQIh9089GEicH-isrzBg~PYgiWBOzUr~-ptJASqiNAM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:01:13] [0.5.1] [INFO] 34.21.156.125:44648 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 04:01:13] [0.5.1] [INFO] file.py:608: [proxy:769fc6f6] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776470473&Signature=YzsSq3SZ~WBht4vjjXhBHi-ZBu3WLBX4tdSCW0KzINoVKbsiqJd6dw8FBRO6m9~uTFsuUk2DcNWnjAkxoaHHLLOgikkvEoP6J~BKCZt5RN4IPAiDIgVarZkbD9jfXYv0YQIh9089GEicH-isrzBg~PYgiWBOzUr~-ptJASqiNAM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:01:13] [0.5.1] [INFO] file.py:624: [proxy:769fc6f6] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776470473&Signature=YzsSq3SZ~WBht4vjjXhBHi-ZBu3WLBX4tdSCW0KzINoVKbsiqJd6dw8FBRO6m9~uTFsuUk2DcNWnjAkxoaHHLLOgikkvEoP6J~BKCZt5RN4IPAiDIgVarZkbD9jfXYv0YQIh9089GEicH-isrzBg~PYgiWBOzUr~-ptJASqiNAM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:01:14] [0.5.1] [INFO] file.py:645: [proxy:769fc6f6] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776470473&Signature=YzsSq3SZ~WBht4vjjXhBHi-ZBu3WLBX4tdSCW0KzINoVKbsiqJd6dw8FBRO6m9~uTFsuUk2DcNWnjAkxoaHHLLOgikkvEoP6J~BKCZt5RN4IPAiDIgVarZkbD9jfXYv0YQIh9089GEicH-isrzBg~PYgiWBOzUr~-ptJASqiNAM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 04:01:14] [0.5.1] [INFO] file.py:672: [proxy:769fc6f6] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776470473&Signature=YzsSq3SZ~WBht4vjjXhBHi-ZBu3WLBX4tdSCW0KzINoVKbsiqJd6dw8FBRO6m9~uTFsuUk2DcNWnjAkxoaHHLLOgikkvEoP6J~BKCZt5RN4IPAiDIgVarZkbD9jfXYv0YQIh9089GEicH-isrzBg~PYgiWBOzUr~-ptJASqiNAM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:01:15] [0.5.1] [INFO] 122.96.50.157:55694 - "GET /proxy/music?token=3Bw7eRWNsy4 HTTP/1.1" 200 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 04:05:01] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:05:01] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:05:01] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:05:01] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:05:01] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=y6llrc-acKo [2026-04-18 04:05:01] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:05:02] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:05:03] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:05:03] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:05:03] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:05:03] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=y6llrc-acKo [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=y6llrc-acKo audio_id:1582971365183456177 [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=y6llrc-acKo ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 04:05:04] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 268.651 秒 [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:05:04] [0.5.1] [INFO] device_player.py:808: 268.6509165363312 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:05:04] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:05:04] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:05:04] [0.5.1] [INFO] file.py:519: [proxy:68bc2834] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:05:04] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 04:05:04] [0.5.1] [INFO] file.py:524: [proxy:68bc2834] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:05:04] [0.5.1] [INFO] file.py:552: [proxy:68bc2834] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:05:04] [0.5.1] [INFO] file.py:597: [proxy:68bc2834] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:05:04] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:05:04] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 04:05:04] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776456304743"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:05:05] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776456304743: True [2026-04-18 04:05:05] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776470704&Signature=UWZqwoM0OFLFOPYhJFG4EiKPSFzDSdBKpFOUjoWLzHDMyo19wEYaKwIGEae8Fb~dSePzEKkmyKii038yqLfSi6kxE6FN3GH2k-UYNOVArh-Pc2332YDBSHwVW3LVn7CWAwIWd7HNz6SF1JO89Tj~PAYHv2sACymKfng9VZ1ExRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:05:05] [0.5.1] [INFO] 34.21.156.125:47964 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 04:05:05] [0.5.1] [INFO] file.py:608: [proxy:68bc2834] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776470704&Signature=UWZqwoM0OFLFOPYhJFG4EiKPSFzDSdBKpFOUjoWLzHDMyo19wEYaKwIGEae8Fb~dSePzEKkmyKii038yqLfSi6kxE6FN3GH2k-UYNOVArh-Pc2332YDBSHwVW3LVn7CWAwIWd7HNz6SF1JO89Tj~PAYHv2sACymKfng9VZ1ExRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:05:05] [0.5.1] [INFO] file.py:624: [proxy:68bc2834] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776470704&Signature=UWZqwoM0OFLFOPYhJFG4EiKPSFzDSdBKpFOUjoWLzHDMyo19wEYaKwIGEae8Fb~dSePzEKkmyKii038yqLfSi6kxE6FN3GH2k-UYNOVArh-Pc2332YDBSHwVW3LVn7CWAwIWd7HNz6SF1JO89Tj~PAYHv2sACymKfng9VZ1ExRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:05:06] [0.5.1] [INFO] file.py:645: [proxy:68bc2834] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776470704&Signature=UWZqwoM0OFLFOPYhJFG4EiKPSFzDSdBKpFOUjoWLzHDMyo19wEYaKwIGEae8Fb~dSePzEKkmyKii038yqLfSi6kxE6FN3GH2k-UYNOVArh-Pc2332YDBSHwVW3LVn7CWAwIWd7HNz6SF1JO89Tj~PAYHv2sACymKfng9VZ1ExRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 04:05:06] [0.5.1] [INFO] file.py:683: [proxy:68bc2834] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 04:05:06] [0.5.1] [INFO] 122.96.50.157:18597 - "GET /proxy/music?token=y6llrc-acKo HTTP/1.1" 200 [2026-04-18 04:05:51] [0.5.1] [INFO] 172.17.0.1:42806 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 04:05:52] [0.5.1] [INFO] 172.17.0.1:42812 - "GET / HTTP/1.0" 200 [2026-04-18 04:05:57] [0.5.1] [INFO] 172.17.0.1:39036 - "GET /static/soundSpace/index.html HTTP/1.0" 200 [2026-04-18 04:06:00] [0.5.1] [INFO] 172.17.0.1:39038 - "GET /static/xplayer/index.html HTTP/1.0" 200 [2026-04-18 04:06:03] [0.5.1] [INFO] 172.17.0.1:39050 - "GET /static/pure/index.html HTTP/1.0" 200 [2026-04-18 04:06:05] [0.5.1] [INFO] 172.17.0.1:39058 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 04:06:07] [0.5.1] [INFO] 172.17.0.1:32908 - "GET /static/iwebplayer/iwebplayer.html HTTP/1.0" 200 [2026-04-18 04:06:09] [0.5.1] [INFO] 172.17.0.1:32910 - "GET /static/onlineSearch/index.html HTTP/1.0" 200 [2026-04-18 04:06:10] [0.5.1] [INFO] 172.17.0.1:32912 - "GET /static/default/index.html HTTP/1.0" 200 [2026-04-18 04:06:12] [0.5.1] [INFO] 172.17.0.1:32916 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 04:06:13] [0.5.1] [INFO] 172.17.0.1:32918 - "GET /static/tailwind/index.html HTTP/1.0" 200 [2026-04-18 04:06:15] [0.5.1] [INFO] 172.17.0.1:32920 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 04:06:16] [0.5.1] [INFO] 172.17.0.1:32932 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 04:06:17] [0.5.1] [INFO] 172.17.0.1:57492 - "GET /static/soundSpace/assets/index-fie2kaim.js HTTP/1.0" 200 [2026-04-18 04:06:18] [0.5.1] [INFO] 172.17.0.1:57494 - "GET /static/xplayer/favicon.ico HTTP/1.0" 200 [2026-04-18 04:06:18] [0.5.1] [INFO] 172.17.0.1:57508 - "GET /static/pure/favicon.ico HTTP/1.0" 200 [2026-04-18 04:06:19] [0.5.1] [INFO] 172.17.0.1:57522 - "GET /static/soundSpace/vite.svg HTTP/1.0" 200 [2026-04-18 04:06:20] [0.5.1] [INFO] 172.17.0.1:57538 - "GET /static/xplayer/assets/index-ESKkJcHu.js HTTP/1.0" 200 [2026-04-18 04:06:20] [0.5.1] [INFO] 172.17.0.1:57552 - "GET /static/onlineSearch/setting.html HTTP/1.0" 200 [2026-04-18 04:06:21] [0.5.1] [INFO] 172.17.0.1:57556 - "GET /static/default/setting.html HTTP/1.0" 200 [2026-04-18 04:06:21] [0.5.1] [INFO] 172.17.0.1:57562 - "GET /static/default/materialiconsoutlined.woff2 HTTP/1.0" 200 [2026-04-18 04:06:22] [0.5.1] [INFO] 172.17.0.1:57570 - "GET /static/tailwind/downloadtool.html HTTP/1.0" 200 [2026-04-18 04:06:22] [0.5.1] [INFO] 172.17.0.1:57574 - "GET /static/tailwind/libs/vue%403.5.13.js HTTP/1.0" 200 [2026-04-18 04:06:23] [0.5.1] [INFO] 172.17.0.1:57588 - "GET /static/tailwind/setting.html HTTP/1.0" 200 [2026-04-18 04:06:23] [0.5.1] [INFO] 172.17.0.1:57590 - "GET /static/tailwind/libs/tailwind.js HTTP/1.0" 200 [2026-04-18 04:06:24] [0.5.1] [INFO] 172.17.0.1:57604 - "GET /static/default/materialicons.woff2 HTTP/1.0" 200 [2026-04-18 04:06:24] [0.5.1] [INFO] 172.17.0.1:57618 - "GET /static/tailwind/md.js HTTP/1.0" 200 [2026-04-18 04:06:25] [0.5.1] [INFO] 172.17.0.1:57620 - "GET /static/tailwind/api.js HTTP/1.0" 200 [2026-04-18 04:06:25] [0.5.1] [INFO] 172.17.0.1:57626 - "GET /static/tailwind/favicon.ico HTTP/1.0" 200 [2026-04-18 04:06:26] [0.5.1] [INFO] 172.17.0.1:55918 - "GET /static/onlineSearch/setting-musicfree.js HTTP/1.0" 200 [2026-04-18 04:06:26] [0.5.1] [INFO] 172.17.0.1:55932 - "GET /docs HTTP/1.0" 200 [2026-04-18 04:06:27] [0.5.1] [INFO] 172.17.0.1:55944 - "GET /favicon.ico HTTP/1.0" 404 [2026-04-18 04:06:27] [0.5.1] [INFO] 172.17.0.1:55952 - "GET /downloadlog HTTP/1.0" 200 [2026-04-18 04:06:28] [0.5.1] [INFO] 172.17.0.1:55966 - "GET /static/default/downloadtool.html HTTP/1.0" 200 [2026-04-18 04:06:29] [0.5.1] [INFO] 172.17.0.1:55974 - "GET /static/tailwind/debug.html HTTP/1.0" 200 [2026-04-18 04:06:29] [0.5.1] [INFO] 172.17.0.1:55986 - "GET /static/tailwind/m3u.html HTTP/1.0" 200 [2026-04-18 04:06:30] [0.5.1] [INFO] 172.17.0.1:55990 - "GET /static/default/m3u.html HTTP/1.0" 200 [2026-04-18 04:06:30] [0.5.1] [INFO] 172.17.0.1:56004 - "GET /static/onlineSearch/setting-backend.js HTTP/1.0" 200 [2026-04-18 04:06:31] [0.5.1] [INFO] 172.17.0.1:56010 - "GET /static/tailwind/libs/jquery-3.6.0.js HTTP/1.0" 200 [2026-04-18 04:06:31] [0.5.1] [INFO] 172.17.0.1:56026 - "GET /static/tailwind/libs/axios.min.js HTTP/1.0" 200 [2026-04-18 04:06:32] [0.5.1] [INFO] 172.17.0.1:56036 - "GET /static/default/qrcode.png HTTP/1.0" 200 [2026-04-18 04:06:32] [0.5.1] [INFO] 172.17.0.1:56048 - "GET /static/tailwind/qrcode.png HTTP/1.0" 200 [2026-04-18 04:06:33] [0.5.1] [INFO] 172.17.0.1:56058 - "GET /static/onlineSearch/setting-lxserver.js HTTP/1.0" 200 [2026-04-18 04:06:33] [0.5.1] [INFO] 172.17.0.1:56070 - "GET /static/default/favicon.ico HTTP/1.0" 200 [2026-04-18 04:06:34] [0.5.1] [INFO] 172.17.0.1:56080 - "GET /static/onlineSearch/favicon.ico HTTP/1.0" 200 [2026-04-18 04:06:34] [0.5.1] [INFO] 172.17.0.1:56086 - "GET /static/onlineSearch/config.js HTTP/1.0" 200 [2026-04-18 04:06:35] [0.5.1] [INFO] 172.17.0.1:56100 - "GET /static/default/merge/index.html HTTP/1.0" 200 [2026-04-18 04:06:35] [0.5.1] [INFO] 172.17.0.1:56112 - "GET /static/pure/assets/index-BAPaOAUA.js HTTP/1.0" 200 [2026-04-18 04:06:36] [0.5.1] [INFO] 172.17.0.1:36710 - "GET /static/default/jquery-3.7.1.min.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 04:06:36] [0.5.1] [INFO] 172.17.0.1:36720 - "GET /static/default/md.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 04:06:37] [0.5.1] [INFO] 172.17.0.1:36732 - "GET /static/tailwind/libs/axios.min.js.map HTTP/1.0" 404 [2026-04-18 04:06:37] [0.5.1] [INFO] 172.17.0.1:36734 - "GET /static/tailwind/setting.js?version=1736211336 HTTP/1.0" 200 [2026-04-18 04:06:38] [0.5.1] [INFO] 172.17.0.1:36740 - "GET /static/default/setting.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 04:06:39] [0.5.1] [INFO] 172.17.0.1:36754 - "GET /static/tailwind/jquery-3.7.1.min.js?version=1736211336 HTTP/1.0" 200 [2026-04-18 04:06:39] [0.5.1] [INFO] 172.17.0.1:36760 - "GET /static/tailwind/libs/daisyui%404.12.23.css HTTP/1.0" 200 [2026-04-18 04:06:40] [0.5.1] [INFO] 172.17.0.1:36772 - "GET /static/xplayer/assets/index-2Kb1oK2G.css HTTP/1.0" 200 [2026-04-18 04:06:40] [0.5.1] [INFO] 172.17.0.1:36788 - "GET /static/pure/assets/index-CfMOqlRg.css HTTP/1.0" 200 [2026-04-18 04:06:41] [0.5.1] [INFO] 172.17.0.1:36804 - "GET /static/default/merge/main.js HTTP/1.0" 200 [2026-04-18 04:06:41] [0.5.1] [INFO] 172.17.0.1:36808 - "GET /static/tailwind/libs/animate.min.css HTTP/1.0" 200 [2026-04-18 04:06:42] [0.5.1] [INFO] 172.17.0.1:36820 - "GET /static/soundSpace/assets/index-qfFWjqIn.css HTTP/1.0" 200 [2026-04-18 04:06:42] [0.5.1] [INFO] 172.17.0.1:36832 - "GET /static/tailwind/main.css HTTP/1.0" 200 [2026-04-18 04:06:43] [0.5.1] [INFO] 172.17.0.1:36846 - "GET /static/default/merge/tailwind.css HTTP/1.0" 200 [2026-04-18 04:06:43] [0.5.1] [INFO] 172.17.0.1:36862 - "GET /static/default/main.css?version=1775697572 HTTP/1.0" 200 [2026-04-18 04:06:44] [0.5.1] [INFO] 172.17.0.1:36866 - "GET /static/default/setting.css?version=1775697572 HTTP/1.0" 200 [2026-04-18 04:06:44] [0.5.1] [INFO] 172.17.0.1:36882 - "GET /static/tailwind/main.css?version=1736211336 HTTP/1.0" 200 [2026-04-18 04:06:45] [0.5.1] [INFO] 172.17.0.1:36884 - "GET /static/xplayer/assets/AlimamaDongFangDaKai-Regular-DkqjFTtK.woff2 HTTP/1.0" 200 [2026-04-18 04:06:46] [0.5.1] [INFO] 172.17.0.1:55888 - "GET /static/pure/assets/AlimamaFangYuanTiVF-Thin-DdtKdonJ.woff2 HTTP/1.0" 200 [2026-04-18 04:08:20] [0.5.1] [INFO] file.py:738: [proxy:68bc2834] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776470704&Signature=UWZqwoM0OFLFOPYhJFG4EiKPSFzDSdBKpFOUjoWLzHDMyo19wEYaKwIGEae8Fb~dSePzEKkmyKii038yqLfSi6kxE6FN3GH2k-UYNOVArh-Pc2332YDBSHwVW3LVn7CWAwIWd7HNz6SF1JO89Tj~PAYHv2sACymKfng9VZ1ExRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 04:09:33] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 04:09:33] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 04:09:33] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:09:33] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 04:09:33] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=8NWi9w8WCwk [2026-04-18 04:09:33] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:09:34] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:09:34] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:09:34] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:09:34] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:09:34] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=8NWi9w8WCwk [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=8NWi9w8WCwk audio_id:1582971365183456177 [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=8NWi9w8WCwk ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 04:09:35] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:09:35] [0.5.1] [INFO] device_player.py:808: 1.4052314004974364 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:09:35] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:09:35] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:519: [proxy:50426e2a] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 04:09:36] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:524: [proxy:50426e2a] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:552: [proxy:50426e2a] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:597: [proxy:50426e2a] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:09:36] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 04:09:36] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 04:09:36] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776456576111"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:09:36] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776456576111: True [2026-04-18 04:09:36] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 04:09:36] [0.5.1] [INFO] 34.21.156.125:47934 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:608: [proxy:50426e2a] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:624: [proxy:50426e2a] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:09:36] [0.5.1] [INFO] 34.21.156.125:47934 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:645: [proxy:50426e2a] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:683: [proxy:50426e2a] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 04:09:36] [0.5.1] [INFO] 122.97.136.182:54122 - "GET /proxy/music?token=8NWi9w8WCwk HTTP/1.1" 200 [2026-04-18 04:09:36] [0.5.1] [INFO] file.py:738: [proxy:50426e2a] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 04:09:37] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:09:37] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:09:37] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:09:37] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:09:37] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=pWw6G-F0y0w [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:09:37] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:09:38] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:09:38] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:09:38] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:09:38] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=pWw6G-F0y0w [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=pWw6G-F0y0w audio_id:1582971365183456177 [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=pWw6G-F0y0w ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:09:39] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:09:39] [0.5.1] [INFO] device_player.py:808: 299.2584765338898 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:09:39] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:09:39] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:09:39] [0.5.1] [INFO] file.py:519: [proxy:431106d2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:09:39] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:09:39] [0.5.1] [INFO] file.py:524: [proxy:431106d2] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:09:39] [0.5.1] [INFO] file.py:552: [proxy:431106d2] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:09:39] [0.5.1] [INFO] file.py:597: [proxy:431106d2] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:09:39] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:09:39] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 04:09:39] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776456579994"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:09:40] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776456579994: True [2026-04-18 04:09:40] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776470980&Signature=N96~42APsNU5JKt~ufeuDIyzeyWGHJTE1MmCwNkhcNMhAFlnNdcA-c6144WxB9~mCYK~0x-zP0cJogoeAgcebCK4hCa4g0HHj81pDPXjYMzKNtYQCBJpt1AMiyYyDjVIZwF1aKenri5KN5pRuancLoFhzTPYGzlkH-~-VdvVppQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:09:40] [0.5.1] [INFO] 34.21.156.125:50634 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:09:40] [0.5.1] [INFO] file.py:608: [proxy:431106d2] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776470980&Signature=N96~42APsNU5JKt~ufeuDIyzeyWGHJTE1MmCwNkhcNMhAFlnNdcA-c6144WxB9~mCYK~0x-zP0cJogoeAgcebCK4hCa4g0HHj81pDPXjYMzKNtYQCBJpt1AMiyYyDjVIZwF1aKenri5KN5pRuancLoFhzTPYGzlkH-~-VdvVppQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:09:40] [0.5.1] [INFO] file.py:624: [proxy:431106d2] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776470980&Signature=N96~42APsNU5JKt~ufeuDIyzeyWGHJTE1MmCwNkhcNMhAFlnNdcA-c6144WxB9~mCYK~0x-zP0cJogoeAgcebCK4hCa4g0HHj81pDPXjYMzKNtYQCBJpt1AMiyYyDjVIZwF1aKenri5KN5pRuancLoFhzTPYGzlkH-~-VdvVppQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:09:40] [0.5.1] [INFO] file.py:645: [proxy:431106d2] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776470980&Signature=N96~42APsNU5JKt~ufeuDIyzeyWGHJTE1MmCwNkhcNMhAFlnNdcA-c6144WxB9~mCYK~0x-zP0cJogoeAgcebCK4hCa4g0HHj81pDPXjYMzKNtYQCBJpt1AMiyYyDjVIZwF1aKenri5KN5pRuancLoFhzTPYGzlkH-~-VdvVppQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 04:09:40] [0.5.1] [INFO] file.py:672: [proxy:431106d2] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776470980&Signature=N96~42APsNU5JKt~ufeuDIyzeyWGHJTE1MmCwNkhcNMhAFlnNdcA-c6144WxB9~mCYK~0x-zP0cJogoeAgcebCK4hCa4g0HHj81pDPXjYMzKNtYQCBJpt1AMiyYyDjVIZwF1aKenri5KN5pRuancLoFhzTPYGzlkH-~-VdvVppQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:09:41] [0.5.1] [INFO] 122.96.50.157:8151 - "GET /proxy/music?token=pWw6G-F0y0w HTTP/1.1" 200 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 04:14:39] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:14:39] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:14:39] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:14:39] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:14:39] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=8kczusNWgns [2026-04-18 04:14:39] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:14:40] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:14:40] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:14:41] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:14:41] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:14:41] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=8kczusNWgns [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=8kczusNWgns audio_id:1582971365183456177 [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=8kczusNWgns ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:14:42] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.869 秒 [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:14:42] [0.5.1] [INFO] device_player.py:808: 226.8691972487335 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:14:42] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:14:42] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:519: [proxy:7b51df62] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:14:42] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:524: [proxy:7b51df62] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:552: [proxy:7b51df62] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:597: [proxy:7b51df62] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:14:42] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:14:42] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 04:14:42] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776456882131"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:14:42] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776456882131: True [2026-04-18 04:14:42] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776471282&Signature=aDuqiosHML6FJXVCmFYD881sTWbhkV0Qaw3QEktZppGOdv6AF8G-2l6QPmNnC2QUdq8BRPbqiNUkYvipX05jYTbATd4rXuDq~F9M0pdQ-DTlXi2kdtEtAs4M8yTadSnjrUTpjrbIetDWZYZPZUIKLMfOXGhorQd3JKQlrlHODgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:14:42] [0.5.1] [INFO] 34.21.156.125:35478 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:608: [proxy:7b51df62] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776471282&Signature=aDuqiosHML6FJXVCmFYD881sTWbhkV0Qaw3QEktZppGOdv6AF8G-2l6QPmNnC2QUdq8BRPbqiNUkYvipX05jYTbATd4rXuDq~F9M0pdQ-DTlXi2kdtEtAs4M8yTadSnjrUTpjrbIetDWZYZPZUIKLMfOXGhorQd3JKQlrlHODgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:624: [proxy:7b51df62] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776471282&Signature=aDuqiosHML6FJXVCmFYD881sTWbhkV0Qaw3QEktZppGOdv6AF8G-2l6QPmNnC2QUdq8BRPbqiNUkYvipX05jYTbATd4rXuDq~F9M0pdQ-DTlXi2kdtEtAs4M8yTadSnjrUTpjrbIetDWZYZPZUIKLMfOXGhorQd3JKQlrlHODgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:645: [proxy:7b51df62] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776471282&Signature=aDuqiosHML6FJXVCmFYD881sTWbhkV0Qaw3QEktZppGOdv6AF8G-2l6QPmNnC2QUdq8BRPbqiNUkYvipX05jYTbATd4rXuDq~F9M0pdQ-DTlXi2kdtEtAs4M8yTadSnjrUTpjrbIetDWZYZPZUIKLMfOXGhorQd3JKQlrlHODgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 04:14:42] [0.5.1] [INFO] file.py:672: [proxy:7b51df62] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776471282&Signature=aDuqiosHML6FJXVCmFYD881sTWbhkV0Qaw3QEktZppGOdv6AF8G-2l6QPmNnC2QUdq8BRPbqiNUkYvipX05jYTbATd4rXuDq~F9M0pdQ-DTlXi2kdtEtAs4M8yTadSnjrUTpjrbIetDWZYZPZUIKLMfOXGhorQd3JKQlrlHODgg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:14:43] [0.5.1] [INFO] 122.97.136.182:9016 - "GET /proxy/music?token=8kczusNWgns HTTP/1.1" 200 [2026-04-18 04:15:50] [0.5.1] [INFO] 172.17.0.1:53466 - "POST / HTTP/1.0" 405 [2026-04-18 04:15:51] [0.5.1] [INFO] 172.17.0.1:53482 - "POST / HTTP/1.0" 405 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 04:18:28] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:18:28] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:18:28] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:18:28] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 04:18:28] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=nxX1KK10bVM [2026-04-18 04:18:28] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:18:29] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:18:29] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:18:30] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:18:30] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:18:30] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=nxX1KK10bVM [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=nxX1KK10bVM audio_id:1582971365183456177 [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=nxX1KK10bVM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:18:31] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 264.643 秒 [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:18:31] [0.5.1] [INFO] device_player.py:808: 264.64253271484375 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:18:31] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:18:31] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:18:31] [0.5.1] [INFO] file.py:519: [proxy:dddeb85b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 04:18:31] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 04:18:31] [0.5.1] [INFO] file.py:524: [proxy:dddeb85b] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 04:18:31] [0.5.1] [INFO] file.py:552: [proxy:dddeb85b] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:18:31] [0.5.1] [INFO] file.py:597: [proxy:dddeb85b] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:18:31] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:18:31] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 04:18:31] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776457111358"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:18:31] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776457111358: True [2026-04-18 04:18:31] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776471511&Signature=G1ZXIwdvnlN2ZfMTsqDuqb4~Cb38D2Oq-JKgqB8keCddWu-LBUHsA90zpbVKJEUc4TXLpwO4F~Yqkv6AklW0l4NT7XG7OyxqnsKjrK0SXMPzAZORlSvD0XS2njnPTm9Mi8ORJwW-NAXdHihJnXGxUGd05KF0~g3NqKewJUy85Z0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:18:31] [0.5.1] [INFO] 34.21.156.125:51550 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 04:18:31] [0.5.1] [INFO] file.py:608: [proxy:dddeb85b] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776471511&Signature=G1ZXIwdvnlN2ZfMTsqDuqb4~Cb38D2Oq-JKgqB8keCddWu-LBUHsA90zpbVKJEUc4TXLpwO4F~Yqkv6AklW0l4NT7XG7OyxqnsKjrK0SXMPzAZORlSvD0XS2njnPTm9Mi8ORJwW-NAXdHihJnXGxUGd05KF0~g3NqKewJUy85Z0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:18:31] [0.5.1] [INFO] file.py:624: [proxy:dddeb85b] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776471511&Signature=G1ZXIwdvnlN2ZfMTsqDuqb4~Cb38D2Oq-JKgqB8keCddWu-LBUHsA90zpbVKJEUc4TXLpwO4F~Yqkv6AklW0l4NT7XG7OyxqnsKjrK0SXMPzAZORlSvD0XS2njnPTm9Mi8ORJwW-NAXdHihJnXGxUGd05KF0~g3NqKewJUy85Z0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:18:32] [0.5.1] [INFO] file.py:645: [proxy:dddeb85b] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776471511&Signature=G1ZXIwdvnlN2ZfMTsqDuqb4~Cb38D2Oq-JKgqB8keCddWu-LBUHsA90zpbVKJEUc4TXLpwO4F~Yqkv6AklW0l4NT7XG7OyxqnsKjrK0SXMPzAZORlSvD0XS2njnPTm9Mi8ORJwW-NAXdHihJnXGxUGd05KF0~g3NqKewJUy85Z0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 04:18:32] [0.5.1] [INFO] file.py:672: [proxy:dddeb85b] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776471511&Signature=G1ZXIwdvnlN2ZfMTsqDuqb4~Cb38D2Oq-JKgqB8keCddWu-LBUHsA90zpbVKJEUc4TXLpwO4F~Yqkv6AklW0l4NT7XG7OyxqnsKjrK0SXMPzAZORlSvD0XS2njnPTm9Mi8ORJwW-NAXdHihJnXGxUGd05KF0~g3NqKewJUy85Z0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:18:32] [0.5.1] [INFO] 122.96.50.157:28010 - "GET /proxy/music?token=nxX1KK10bVM HTTP/1.1" 200 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 04:22:55] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 04:22:55] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 04:22:55] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:22:55] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:22:55] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=sQNcciPRB0k [2026-04-18 04:22:55] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:22:57] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:22:57] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:22:57] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:22:57] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:22:57] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=sQNcciPRB0k [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=sQNcciPRB0k audio_id:1582971365183456177 [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=sQNcciPRB0k ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:22:58] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 295.728 秒 [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:22:58] [0.5.1] [INFO] device_player.py:808: 295.7283227579956 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:22:58] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:22:58] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:22:59] [0.5.1] [INFO] file.py:519: [proxy:b7f0e077] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:22:59] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 04:22:59] [0.5.1] [INFO] file.py:524: [proxy:b7f0e077] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:22:59] [0.5.1] [INFO] file.py:552: [proxy:b7f0e077] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:22:59] [0.5.1] [INFO] file.py:597: [proxy:b7f0e077] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:22:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:22:59] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 04:22:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776457379545"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:22:59] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776457379545: True [2026-04-18 04:22:59] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776471779&Signature=I9CD8pu3CHVI~elqa0s2eU6G~wL9wRLcsNRNG6CDeR95q8dua~UH-kzwrjfN1LcjUcg3DPkhMm3nZJ6p5IEAEzPGxWcB1CH0n~DmpKdG~mMynynIF8Ae6zA1qYRCYGn0ip4RfTWqefV0eKcOqPolsVI3BcrrHkbxbMOuPe3HXk4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:22:59] [0.5.1] [INFO] 34.21.156.125:57542 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 04:22:59] [0.5.1] [INFO] file.py:608: [proxy:b7f0e077] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776471779&Signature=I9CD8pu3CHVI~elqa0s2eU6G~wL9wRLcsNRNG6CDeR95q8dua~UH-kzwrjfN1LcjUcg3DPkhMm3nZJ6p5IEAEzPGxWcB1CH0n~DmpKdG~mMynynIF8Ae6zA1qYRCYGn0ip4RfTWqefV0eKcOqPolsVI3BcrrHkbxbMOuPe3HXk4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:22:59] [0.5.1] [INFO] file.py:624: [proxy:b7f0e077] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776471779&Signature=I9CD8pu3CHVI~elqa0s2eU6G~wL9wRLcsNRNG6CDeR95q8dua~UH-kzwrjfN1LcjUcg3DPkhMm3nZJ6p5IEAEzPGxWcB1CH0n~DmpKdG~mMynynIF8Ae6zA1qYRCYGn0ip4RfTWqefV0eKcOqPolsVI3BcrrHkbxbMOuPe3HXk4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:23:00] [0.5.1] [INFO] file.py:645: [proxy:b7f0e077] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776471779&Signature=I9CD8pu3CHVI~elqa0s2eU6G~wL9wRLcsNRNG6CDeR95q8dua~UH-kzwrjfN1LcjUcg3DPkhMm3nZJ6p5IEAEzPGxWcB1CH0n~DmpKdG~mMynynIF8Ae6zA1qYRCYGn0ip4RfTWqefV0eKcOqPolsVI3BcrrHkbxbMOuPe3HXk4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 04:23:00] [0.5.1] [INFO] file.py:672: [proxy:b7f0e077] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776471779&Signature=I9CD8pu3CHVI~elqa0s2eU6G~wL9wRLcsNRNG6CDeR95q8dua~UH-kzwrjfN1LcjUcg3DPkhMm3nZJ6p5IEAEzPGxWcB1CH0n~DmpKdG~mMynynIF8Ae6zA1qYRCYGn0ip4RfTWqefV0eKcOqPolsVI3BcrrHkbxbMOuPe3HXk4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:23:01] [0.5.1] [INFO] 122.97.136.182:5483 - "GET /proxy/music?token=sQNcciPRB0k HTTP/1.1" 200 [2026-04-18 04:27:39] [0.5.1] [INFO] 172.17.0.1:33294 - "GET / HTTP/1.0" 200 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 04:27:54] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 04:27:54] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 04:27:54] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:27:54] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:27:54] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=VgrrKh_-b-I [2026-04-18 04:27:54] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:27:55] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:27:55] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:27:56] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:27:56] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:27:56] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=VgrrKh_-b-I [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=VgrrKh_-b-I audio_id:1582971365183456177 [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=VgrrKh_-b-I ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:27:57] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:27:57] [0.5.1] [INFO] device_player.py:808: 254.01115106037904 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:27:57] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:27:57] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:27:57] [0.5.1] [INFO] file.py:519: [proxy:b5b2d06e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:27:57] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:27:57] [0.5.1] [INFO] file.py:524: [proxy:b5b2d06e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:27:57] [0.5.1] [INFO] file.py:552: [proxy:b5b2d06e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:27:57] [0.5.1] [INFO] file.py:597: [proxy:b5b2d06e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:27:57] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:27:57] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 04:27:57] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776457677724"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:27:58] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776457677724: True [2026-04-18 04:27:58] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776472077&Signature=E33e6uO59vdje21nhTej3Eo7TpHCkEHpklppLG9lZVPnmiXm2m67cRcp~DnxGn9CWYpIMi6zGuzCm8WoQbOukTfLbT6X8UxCbXfCbPZGHUznoeVBtwQdKE3N1OzD127byg4X0B7ThaG66OjBRb-1de388cbiMX2Tqx2KakR3DUE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:27:58] [0.5.1] [INFO] 34.21.156.125:57280 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:27:58] [0.5.1] [INFO] file.py:608: [proxy:b5b2d06e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776472077&Signature=E33e6uO59vdje21nhTej3Eo7TpHCkEHpklppLG9lZVPnmiXm2m67cRcp~DnxGn9CWYpIMi6zGuzCm8WoQbOukTfLbT6X8UxCbXfCbPZGHUznoeVBtwQdKE3N1OzD127byg4X0B7ThaG66OjBRb-1de388cbiMX2Tqx2KakR3DUE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:27:58] [0.5.1] [INFO] file.py:624: [proxy:b5b2d06e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776472077&Signature=E33e6uO59vdje21nhTej3Eo7TpHCkEHpklppLG9lZVPnmiXm2m67cRcp~DnxGn9CWYpIMi6zGuzCm8WoQbOukTfLbT6X8UxCbXfCbPZGHUznoeVBtwQdKE3N1OzD127byg4X0B7ThaG66OjBRb-1de388cbiMX2Tqx2KakR3DUE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:27:58] [0.5.1] [INFO] file.py:645: [proxy:b5b2d06e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776472077&Signature=E33e6uO59vdje21nhTej3Eo7TpHCkEHpklppLG9lZVPnmiXm2m67cRcp~DnxGn9CWYpIMi6zGuzCm8WoQbOukTfLbT6X8UxCbXfCbPZGHUznoeVBtwQdKE3N1OzD127byg4X0B7ThaG66OjBRb-1de388cbiMX2Tqx2KakR3DUE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 04:27:58] [0.5.1] [INFO] file.py:672: [proxy:b5b2d06e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776472077&Signature=E33e6uO59vdje21nhTej3Eo7TpHCkEHpklppLG9lZVPnmiXm2m67cRcp~DnxGn9CWYpIMi6zGuzCm8WoQbOukTfLbT6X8UxCbXfCbPZGHUznoeVBtwQdKE3N1OzD127byg4X0B7ThaG66OjBRb-1de388cbiMX2Tqx2KakR3DUE_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:27:59] [0.5.1] [INFO] 122.96.50.157:35478 - "GET /proxy/music?token=VgrrKh_-b-I HTTP/1.1" 200 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 04:32:11] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 04:32:11] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 04:32:11] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:32:11] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:32:11] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=tHyHQvMWTGM [2026-04-18 04:32:11] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:32:12] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:32:12] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:32:12] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:32:12] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:32:12] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=tHyHQvMWTGM [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=tHyHQvMWTGM audio_id:1582971365183456177 [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=tHyHQvMWTGM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:32:13] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.044 秒 [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:32:13] [0.5.1] [INFO] device_player.py:808: 342.04392817143247 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:32:13] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:32:13] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:32:13] [0.5.1] [INFO] file.py:519: [proxy:0c6c6a35] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:32:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:32:13] [0.5.1] [INFO] file.py:524: [proxy:0c6c6a35] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:32:13] [0.5.1] [INFO] file.py:552: [proxy:0c6c6a35] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:32:13] [0.5.1] [INFO] file.py:597: [proxy:0c6c6a35] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:32:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:32:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 04:32:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776457933936"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:32:14] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776457933936: True [2026-04-18 04:32:14] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776472334&Signature=YQdjGYIPxV6bkG4JOGJPL7iwIKmPMit-VahXfgqsd1WIHZH86FYSZ~V6qjK-ZootKiWdmYzqaNEf2RSs50Hx6-VeeoKFDlt15kouojsZA-WrV31g1ZVab8AeZIA5fdx0FJwCU5oxkScRakEb7PB6VMNsNhjLa2UgDKdqpyRjn4I_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:32:14] [0.5.1] [INFO] 34.21.156.125:44034 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:32:14] [0.5.1] [INFO] file.py:608: [proxy:0c6c6a35] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776472334&Signature=YQdjGYIPxV6bkG4JOGJPL7iwIKmPMit-VahXfgqsd1WIHZH86FYSZ~V6qjK-ZootKiWdmYzqaNEf2RSs50Hx6-VeeoKFDlt15kouojsZA-WrV31g1ZVab8AeZIA5fdx0FJwCU5oxkScRakEb7PB6VMNsNhjLa2UgDKdqpyRjn4I_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:32:14] [0.5.1] [INFO] file.py:624: [proxy:0c6c6a35] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776472334&Signature=YQdjGYIPxV6bkG4JOGJPL7iwIKmPMit-VahXfgqsd1WIHZH86FYSZ~V6qjK-ZootKiWdmYzqaNEf2RSs50Hx6-VeeoKFDlt15kouojsZA-WrV31g1ZVab8AeZIA5fdx0FJwCU5oxkScRakEb7PB6VMNsNhjLa2UgDKdqpyRjn4I_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:32:14] [0.5.1] [INFO] file.py:645: [proxy:0c6c6a35] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776472334&Signature=YQdjGYIPxV6bkG4JOGJPL7iwIKmPMit-VahXfgqsd1WIHZH86FYSZ~V6qjK-ZootKiWdmYzqaNEf2RSs50Hx6-VeeoKFDlt15kouojsZA-WrV31g1ZVab8AeZIA5fdx0FJwCU5oxkScRakEb7PB6VMNsNhjLa2UgDKdqpyRjn4I_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 04:32:14] [0.5.1] [INFO] file.py:672: [proxy:0c6c6a35] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776472334&Signature=YQdjGYIPxV6bkG4JOGJPL7iwIKmPMit-VahXfgqsd1WIHZH86FYSZ~V6qjK-ZootKiWdmYzqaNEf2RSs50Hx6-VeeoKFDlt15kouojsZA-WrV31g1ZVab8AeZIA5fdx0FJwCU5oxkScRakEb7PB6VMNsNhjLa2UgDKdqpyRjn4I_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:32:15] [0.5.1] [INFO] 122.97.136.182:54275 - "GET /proxy/music?token=tHyHQvMWTGM HTTP/1.1" 200 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 04:37:55] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 04:37:55] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 04:37:55] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:37:55] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:37:55] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=Uf6OEIdnX6Q [2026-04-18 04:37:55] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:37:57] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:37:57] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:37:58] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:37:58] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:37:58] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=Uf6OEIdnX6Q [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=Uf6OEIdnX6Q audio_id:1582971365183456177 [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=Uf6OEIdnX6Q ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:37:59] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 228.672 秒 [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:37:59] [0.5.1] [INFO] device_player.py:808: 228.67188363456725 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:37:59] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:37:59] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:37:59] [0.5.1] [INFO] file.py:519: [proxy:94434236] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:37:59] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:37:59] [0.5.1] [INFO] file.py:524: [proxy:94434236] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:37:59] [0.5.1] [INFO] file.py:552: [proxy:94434236] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:37:59] [0.5.1] [INFO] file.py:597: [proxy:94434236] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:37:59] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:37:59] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 04:37:59] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776458279644"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:37:59] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776458279644: True [2026-04-18 04:37:59] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776472679&Signature=d7dRlIIlTJGxlXLfllEGpwfeW0ILpmTyuPJ~HuVa6id4NKU~KuFnS2aYSx-A1f0TdTu06HUpyVC9cLB1F2KIZwrVp07Yo8eWO2KiqOjf3anCrqvgWfd8Hbx9nm-cNL0RYwHzkddo7nMJ79k4ihwnNfy7MxwOADyOejofyuNDltg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:37:59] [0.5.1] [INFO] 34.21.156.125:47350 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:37:59] [0.5.1] [INFO] file.py:608: [proxy:94434236] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776472679&Signature=d7dRlIIlTJGxlXLfllEGpwfeW0ILpmTyuPJ~HuVa6id4NKU~KuFnS2aYSx-A1f0TdTu06HUpyVC9cLB1F2KIZwrVp07Yo8eWO2KiqOjf3anCrqvgWfd8Hbx9nm-cNL0RYwHzkddo7nMJ79k4ihwnNfy7MxwOADyOejofyuNDltg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:37:59] [0.5.1] [INFO] file.py:624: [proxy:94434236] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776472679&Signature=d7dRlIIlTJGxlXLfllEGpwfeW0ILpmTyuPJ~HuVa6id4NKU~KuFnS2aYSx-A1f0TdTu06HUpyVC9cLB1F2KIZwrVp07Yo8eWO2KiqOjf3anCrqvgWfd8Hbx9nm-cNL0RYwHzkddo7nMJ79k4ihwnNfy7MxwOADyOejofyuNDltg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:38:00] [0.5.1] [INFO] file.py:645: [proxy:94434236] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776472679&Signature=d7dRlIIlTJGxlXLfllEGpwfeW0ILpmTyuPJ~HuVa6id4NKU~KuFnS2aYSx-A1f0TdTu06HUpyVC9cLB1F2KIZwrVp07Yo8eWO2KiqOjf3anCrqvgWfd8Hbx9nm-cNL0RYwHzkddo7nMJ79k4ihwnNfy7MxwOADyOejofyuNDltg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 04:38:00] [0.5.1] [INFO] file.py:672: [proxy:94434236] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776472679&Signature=d7dRlIIlTJGxlXLfllEGpwfeW0ILpmTyuPJ~HuVa6id4NKU~KuFnS2aYSx-A1f0TdTu06HUpyVC9cLB1F2KIZwrVp07Yo8eWO2KiqOjf3anCrqvgWfd8Hbx9nm-cNL0RYwHzkddo7nMJ79k4ihwnNfy7MxwOADyOejofyuNDltg_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:38:01] [0.5.1] [INFO] 122.97.136.182:35683 - "GET /proxy/music?token=Uf6OEIdnX6Q HTTP/1.1" 200 [2026-04-18 04:39:03] [0.5.1] [INFO] 172.17.0.1:52552 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 04:39:04] [0.5.1] [INFO] 172.17.0.1:52560 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 04:39:04] [0.5.1] [INFO] 172.17.0.1:52570 - "GET /static/default/index.html HTTP/1.0" 200 [2026-04-18 04:41:02] [0.5.1] [INFO] 172.17.0.1:33686 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 04:41:08] [0.5.1] [INFO] 172.17.0.1:42760 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 04:41:48] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:41:48] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:41:48] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:41:48] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:41:48] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=ojEEsV3WOKU [2026-04-18 04:41:48] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:41:49] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:41:49] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:41:49] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:41:49] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:41:49] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=ojEEsV3WOKU [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=ojEEsV3WOKU audio_id:1582971365183456177 [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=ojEEsV3WOKU ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 04:41:50] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 228.724 秒 [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:41:50] [0.5.1] [INFO] device_player.py:808: 228.72399082183838 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:41:50] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:41:50] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:519: [proxy:3f19a3b9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 04:41:51] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:524: [proxy:3f19a3b9] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:552: [proxy:3f19a3b9] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:597: [proxy:3f19a3b9] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:41:51] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:41:51] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 04:41:51] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776458511081"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:41:51] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776458511081: True [2026-04-18 04:41:51] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776472911&Signature=MPnzH4-k6YyZBC3yCLUXFwXxXPuRgYVJ9uzZxGxwuOWRG6HTFNtEszGOGNqNVfjwUxIZZJh-LqC5ZvItu76nnle9u2nJRJY3yzej52JKbDXxSeSAvLqqklvZ527kfis9Tnk2qe9WcY5dQv6USYPdK3Tr7mia7yOmnK7lWS2cwFk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:41:51] [0.5.1] [INFO] 34.21.156.125:60172 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:608: [proxy:3f19a3b9] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776472911&Signature=MPnzH4-k6YyZBC3yCLUXFwXxXPuRgYVJ9uzZxGxwuOWRG6HTFNtEszGOGNqNVfjwUxIZZJh-LqC5ZvItu76nnle9u2nJRJY3yzej52JKbDXxSeSAvLqqklvZ527kfis9Tnk2qe9WcY5dQv6USYPdK3Tr7mia7yOmnK7lWS2cwFk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:624: [proxy:3f19a3b9] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776472911&Signature=MPnzH4-k6YyZBC3yCLUXFwXxXPuRgYVJ9uzZxGxwuOWRG6HTFNtEszGOGNqNVfjwUxIZZJh-LqC5ZvItu76nnle9u2nJRJY3yzej52JKbDXxSeSAvLqqklvZ527kfis9Tnk2qe9WcY5dQv6USYPdK3Tr7mia7yOmnK7lWS2cwFk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:645: [proxy:3f19a3b9] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776472911&Signature=MPnzH4-k6YyZBC3yCLUXFwXxXPuRgYVJ9uzZxGxwuOWRG6HTFNtEszGOGNqNVfjwUxIZZJh-LqC5ZvItu76nnle9u2nJRJY3yzej52JKbDXxSeSAvLqqklvZ527kfis9Tnk2qe9WcY5dQv6USYPdK3Tr7mia7yOmnK7lWS2cwFk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 04:41:51] [0.5.1] [INFO] file.py:672: [proxy:3f19a3b9] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776472911&Signature=MPnzH4-k6YyZBC3yCLUXFwXxXPuRgYVJ9uzZxGxwuOWRG6HTFNtEszGOGNqNVfjwUxIZZJh-LqC5ZvItu76nnle9u2nJRJY3yzej52JKbDXxSeSAvLqqklvZ527kfis9Tnk2qe9WcY5dQv6USYPdK3Tr7mia7yOmnK7lWS2cwFk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:41:52] [0.5.1] [INFO] 122.96.50.157:20755 - "GET /proxy/music?token=ojEEsV3WOKU HTTP/1.1" 200 [2026-04-18 04:42:20] [0.5.1] [INFO] 172.17.0.1:55554 - "GET / HTTP/1.0" 200 [2026-04-18 04:42:21] [0.5.1] [INFO] 172.17.0.1:55562 - "GET / HTTP/1.0" 200 [2026-04-18 04:42:21] [0.5.1] [INFO] 172.17.0.1:55566 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 04:42:21] [0.5.1] [INFO] 172.17.0.1:55572 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 04:42:22] [0.5.1] [INFO] 172.17.0.1:55578 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 04:42:22] [0.5.1] [INFO] 172.17.0.1:55594 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 04:42:24] [0.5.1] [INFO] 172.17.0.1:55606 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 04:42:24] [0.5.1] [INFO] 172.17.0.1:55614 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 04:42:24] [0.5.1] [INFO] 172.17.0.1:55618 - "GET / HTTP/1.0" 200 [2026-04-18 04:42:24] [0.5.1] [INFO] 172.17.0.1:55632 - "GET /static/icons/ios/144.png HTTP/1.0" 200 [2026-04-18 04:42:25] [0.5.1] [INFO] 172.17.0.1:55640 - "HEAD /favicon.ico HTTP/1.0" 404 [2026-04-18 04:42:26] [0.5.1] [INFO] 172.17.0.1:43966 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 04:43:24] [0.5.1] [INFO] 172.17.0.1:58232 - "GET /static/iwebplayer/iwebplayer.html HTTP/1.0" 200 [2026-04-18 04:44:09] [0.5.1] [INFO] 172.17.0.1:40020 - "GET /static/tailwind/index.html HTTP/1.0" 200 [2026-04-18 04:44:20] [0.5.1] [INFO] 172.17.0.1:40354 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 04:44:21] [0.5.1] [INFO] 172.17.0.1:40356 - "GET /static/pure/index.html HTTP/1.0" 200 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 04:45:39] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:45:39] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:45:39] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:45:39] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:45:39] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=IpxmRPc9AnQ [2026-04-18 04:45:39] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:45:40] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:45:40] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:45:41] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:45:41] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:45:41] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=IpxmRPc9AnQ [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=IpxmRPc9AnQ audio_id:1582971365183456177 [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=IpxmRPc9AnQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 04:45:42] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 268.651 秒 [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:45:42] [0.5.1] [INFO] device_player.py:808: 268.651016910553 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:45:42] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:45:42] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:45:42] [0.5.1] [INFO] file.py:519: [proxy:d7631898] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:45:42] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 04:45:42] [0.5.1] [INFO] file.py:524: [proxy:d7631898] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 04:45:42] [0.5.1] [INFO] file.py:552: [proxy:d7631898] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:45:42] [0.5.1] [INFO] file.py:597: [proxy:d7631898] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:45:42] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:45:42] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 04:45:42] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776458742600"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:45:42] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776458742600: True [2026-04-18 04:45:42] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776473142&Signature=R3Pp-4JYgC2-8rglH9eHpzO8ltDGuNWdyGAlrbNaFrpfSvY4pmnEc1fpZnTFGffTvJbv8iWjXfkdQZDtt7CwgbsDYuTJex38qTiq~eI7OCh6EtN2smWSS8C4bhL5cMAN48YBzWeSdeBY4XHONM~L90TzP0qzx8sq39N3FeQBo0s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:45:42] [0.5.1] [INFO] 34.21.156.125:48214 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 04:45:42] [0.5.1] [INFO] file.py:608: [proxy:d7631898] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776473142&Signature=R3Pp-4JYgC2-8rglH9eHpzO8ltDGuNWdyGAlrbNaFrpfSvY4pmnEc1fpZnTFGffTvJbv8iWjXfkdQZDtt7CwgbsDYuTJex38qTiq~eI7OCh6EtN2smWSS8C4bhL5cMAN48YBzWeSdeBY4XHONM~L90TzP0qzx8sq39N3FeQBo0s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:45:42] [0.5.1] [INFO] file.py:624: [proxy:d7631898] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776473142&Signature=R3Pp-4JYgC2-8rglH9eHpzO8ltDGuNWdyGAlrbNaFrpfSvY4pmnEc1fpZnTFGffTvJbv8iWjXfkdQZDtt7CwgbsDYuTJex38qTiq~eI7OCh6EtN2smWSS8C4bhL5cMAN48YBzWeSdeBY4XHONM~L90TzP0qzx8sq39N3FeQBo0s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:45:43] [0.5.1] [INFO] file.py:645: [proxy:d7631898] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776473142&Signature=R3Pp-4JYgC2-8rglH9eHpzO8ltDGuNWdyGAlrbNaFrpfSvY4pmnEc1fpZnTFGffTvJbv8iWjXfkdQZDtt7CwgbsDYuTJex38qTiq~eI7OCh6EtN2smWSS8C4bhL5cMAN48YBzWeSdeBY4XHONM~L90TzP0qzx8sq39N3FeQBo0s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 04:45:43] [0.5.1] [INFO] file.py:683: [proxy:d7631898] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 04:45:43] [0.5.1] [INFO] 122.97.136.182:43642 - "GET /proxy/music?token=IpxmRPc9AnQ HTTP/1.1" 200 [2026-04-18 04:47:37] [0.5.1] [INFO] 172.17.0.1:48888 - "GET /static/xplayer/index.html HTTP/1.0" 200 [2026-04-18 04:47:37] [0.5.1] [INFO] 172.17.0.1:48904 - "GET /static/soundSpace/index.html HTTP/1.0" 200 [2026-04-18 04:48:49] [0.5.1] [INFO] 172.17.0.1:59620 - "GET /static/onlineSearch/index.html HTTP/1.0" 200 [2026-04-18 04:49:07] [0.5.1] [INFO] file.py:738: [proxy:d7631898] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776473142&Signature=R3Pp-4JYgC2-8rglH9eHpzO8ltDGuNWdyGAlrbNaFrpfSvY4pmnEc1fpZnTFGffTvJbv8iWjXfkdQZDtt7CwgbsDYuTJex38qTiq~eI7OCh6EtN2smWSS8C4bhL5cMAN48YBzWeSdeBY4XHONM~L90TzP0qzx8sq39N3FeQBo0s_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 04:50:10] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 04:50:10] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 04:50:10] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:50:10] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 04:50:10] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=eBvEybU9Ykk [2026-04-18 04:50:10] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:50:11] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:50:12] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:50:12] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:50:12] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:50:12] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=eBvEybU9Ykk [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=eBvEybU9Ykk audio_id:1582971365183456177 [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=eBvEybU9Ykk ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 04:50:13] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:50:13] [0.5.1] [INFO] device_player.py:808: 1.4052805147247314 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:50:13] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:50:13] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:519: [proxy:4a8083ef] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 04:50:13] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:524: [proxy:4a8083ef] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:552: [proxy:4a8083ef] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:597: [proxy:4a8083ef] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:50:13] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 04:50:13] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 04:50:13] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776459013712"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:50:13] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776459013712: True [2026-04-18 04:50:13] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 04:50:13] [0.5.1] [INFO] 34.21.156.125:45834 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:608: [proxy:4a8083ef] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:624: [proxy:4a8083ef] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:50:13] [0.5.1] [INFO] 34.21.156.125:45834 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:645: [proxy:4a8083ef] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:683: [proxy:4a8083ef] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 04:50:13] [0.5.1] [INFO] 122.97.136.182:65012 - "GET /proxy/music?token=eBvEybU9Ykk HTTP/1.1" 200 [2026-04-18 04:50:13] [0.5.1] [INFO] file.py:738: [proxy:4a8083ef] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 04:50:14] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:50:14] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:50:14] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:50:14] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:50:14] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=MPidGzy2jJc [2026-04-18 04:50:14] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:50:15] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:50:16] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:50:16] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:50:16] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:50:16] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=MPidGzy2jJc [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=MPidGzy2jJc audio_id:1582971365183456177 [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=MPidGzy2jJc ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:50:17] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:50:17] [0.5.1] [INFO] device_player.py:808: 299.25844387054445 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:50:17] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:50:17] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:50:17] [0.5.1] [INFO] file.py:519: [proxy:278187ea] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:50:17] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:50:17] [0.5.1] [INFO] file.py:524: [proxy:278187ea] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:50:17] [0.5.1] [INFO] file.py:552: [proxy:278187ea] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:50:17] [0.5.1] [INFO] file.py:597: [proxy:278187ea] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:50:17] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:50:17] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 04:50:17] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776459017755"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:50:18] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776459017755: True [2026-04-18 04:50:18] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776473417&Signature=MmOZKFD6Z-MOCzZrJz5ZH3rAry8WQUzT6wcBKHXaxmlgSygJaYQGGiJmE1yDLF6twYIPHj2VKDG7sB6~jl7uJ8bTV3XKM3S8W2W3C5dMFCd9Sc2qb~K~7ScJaUUa0DmWJYfKZKrWR4XIfPKSRmnTfVPIG77N~GReYxRPiW~z6M8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:50:18] [0.5.1] [INFO] 34.21.156.125:52142 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:50:18] [0.5.1] [INFO] file.py:608: [proxy:278187ea] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776473417&Signature=MmOZKFD6Z-MOCzZrJz5ZH3rAry8WQUzT6wcBKHXaxmlgSygJaYQGGiJmE1yDLF6twYIPHj2VKDG7sB6~jl7uJ8bTV3XKM3S8W2W3C5dMFCd9Sc2qb~K~7ScJaUUa0DmWJYfKZKrWR4XIfPKSRmnTfVPIG77N~GReYxRPiW~z6M8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:50:18] [0.5.1] [INFO] file.py:624: [proxy:278187ea] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776473417&Signature=MmOZKFD6Z-MOCzZrJz5ZH3rAry8WQUzT6wcBKHXaxmlgSygJaYQGGiJmE1yDLF6twYIPHj2VKDG7sB6~jl7uJ8bTV3XKM3S8W2W3C5dMFCd9Sc2qb~K~7ScJaUUa0DmWJYfKZKrWR4XIfPKSRmnTfVPIG77N~GReYxRPiW~z6M8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:50:18] [0.5.1] [INFO] file.py:645: [proxy:278187ea] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776473417&Signature=MmOZKFD6Z-MOCzZrJz5ZH3rAry8WQUzT6wcBKHXaxmlgSygJaYQGGiJmE1yDLF6twYIPHj2VKDG7sB6~jl7uJ8bTV3XKM3S8W2W3C5dMFCd9Sc2qb~K~7ScJaUUa0DmWJYfKZKrWR4XIfPKSRmnTfVPIG77N~GReYxRPiW~z6M8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 04:50:18] [0.5.1] [INFO] file.py:672: [proxy:278187ea] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776473417&Signature=MmOZKFD6Z-MOCzZrJz5ZH3rAry8WQUzT6wcBKHXaxmlgSygJaYQGGiJmE1yDLF6twYIPHj2VKDG7sB6~jl7uJ8bTV3XKM3S8W2W3C5dMFCd9Sc2qb~K~7ScJaUUa0DmWJYfKZKrWR4XIfPKSRmnTfVPIG77N~GReYxRPiW~z6M8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:50:19] [0.5.1] [INFO] 122.97.136.182:26783 - "GET /proxy/music?token=MPidGzy2jJc HTTP/1.1" 200 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 04:55:16] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:55:16] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:55:16] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:55:16] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:55:16] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=RxRwYVH254s [2026-04-18 04:55:16] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:55:17] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:55:17] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:55:18] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:55:18] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:55:18] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=RxRwYVH254s [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=RxRwYVH254s audio_id:1582971365183456177 [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=RxRwYVH254s ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:55:19] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.869 秒 [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:55:19] [0.5.1] [INFO] device_player.py:808: 226.8693786852722 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:55:19] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:55:19] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:55:19] [0.5.1] [INFO] file.py:519: [proxy:d61d768c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:55:19] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 04:55:19] [0.5.1] [INFO] file.py:524: [proxy:d61d768c] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 04:55:19] [0.5.1] [INFO] file.py:552: [proxy:d61d768c] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:55:19] [0.5.1] [INFO] file.py:597: [proxy:d61d768c] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:55:19] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:55:19] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 04:55:19] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776459319442"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:55:19] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776459319442: True [2026-04-18 04:55:19] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776473719&Signature=hzoxp3t1NJuD0c8VupeuLVRoG8oFJ6dx3BNe0eScvxlJVRrSc8n7pAexJ4y7Q58yMl7drXc1SpbSyXVOzQNfX2bcWbd8a~4yGi9sWoHtZjZLymKwA469-msESGiCHVUW~z9hd1tqF87Cu8si56EWY2NC~vTnhKe6uuULh7Hxz6k_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:55:19] [0.5.1] [INFO] 34.21.156.125:46958 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 04:55:19] [0.5.1] [INFO] file.py:608: [proxy:d61d768c] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776473719&Signature=hzoxp3t1NJuD0c8VupeuLVRoG8oFJ6dx3BNe0eScvxlJVRrSc8n7pAexJ4y7Q58yMl7drXc1SpbSyXVOzQNfX2bcWbd8a~4yGi9sWoHtZjZLymKwA469-msESGiCHVUW~z9hd1tqF87Cu8si56EWY2NC~vTnhKe6uuULh7Hxz6k_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:55:19] [0.5.1] [INFO] file.py:624: [proxy:d61d768c] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776473719&Signature=hzoxp3t1NJuD0c8VupeuLVRoG8oFJ6dx3BNe0eScvxlJVRrSc8n7pAexJ4y7Q58yMl7drXc1SpbSyXVOzQNfX2bcWbd8a~4yGi9sWoHtZjZLymKwA469-msESGiCHVUW~z9hd1tqF87Cu8si56EWY2NC~vTnhKe6uuULh7Hxz6k_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:55:20] [0.5.1] [INFO] file.py:645: [proxy:d61d768c] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776473719&Signature=hzoxp3t1NJuD0c8VupeuLVRoG8oFJ6dx3BNe0eScvxlJVRrSc8n7pAexJ4y7Q58yMl7drXc1SpbSyXVOzQNfX2bcWbd8a~4yGi9sWoHtZjZLymKwA469-msESGiCHVUW~z9hd1tqF87Cu8si56EWY2NC~vTnhKe6uuULh7Hxz6k_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 04:55:20] [0.5.1] [INFO] file.py:672: [proxy:d61d768c] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776473719&Signature=hzoxp3t1NJuD0c8VupeuLVRoG8oFJ6dx3BNe0eScvxlJVRrSc8n7pAexJ4y7Q58yMl7drXc1SpbSyXVOzQNfX2bcWbd8a~4yGi9sWoHtZjZLymKwA469-msESGiCHVUW~z9hd1tqF87Cu8si56EWY2NC~vTnhKe6uuULh7Hxz6k_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:55:21] [0.5.1] [INFO] 122.97.136.182:44197 - "GET /proxy/music?token=RxRwYVH254s HTTP/1.1" 200 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 04:59:06] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:59:06] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 04:59:06] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 04:59:06] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 04:59:06] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=FgsvpZcsNZk [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 04:59:06] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:59:07] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 04:59:07] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 04:59:07] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 04:59:07] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=FgsvpZcsNZk [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=FgsvpZcsNZk audio_id:1582971365183456177 [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=FgsvpZcsNZk ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 04:59:08] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 264.643 秒 [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 04:59:08] [0.5.1] [INFO] device_player.py:808: 264.64305628204346 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 04:59:08] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 04:59:08] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 04:59:08] [0.5.1] [INFO] file.py:519: [proxy:1c672ede] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 04:59:08] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 04:59:08] [0.5.1] [INFO] file.py:524: [proxy:1c672ede] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 04:59:08] [0.5.1] [INFO] file.py:552: [proxy:1c672ede] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 04:59:08] [0.5.1] [INFO] file.py:597: [proxy:1c672ede] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 04:59:08] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 04:59:08] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 04:59:08] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776459548417"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 04:59:08] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776459548417: True [2026-04-18 04:59:08] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776473948&Signature=LYybB6cLvME1iVGYiXUn45~BFuTqnFQsC0haOrgPOuPk9dsg5dzkMT-NJhVn2VUiY3D-PYHIK8UPANTWxQpTB69pJvaMA49iVzKZqGmbqGBPU0v-XpLi39iefThCjg~NgJupeoIcP1uQAN0tFOZRAe7laKoocR8lWPDZxK1MXjk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:59:08] [0.5.1] [INFO] 34.21.156.125:45420 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 04:59:08] [0.5.1] [INFO] file.py:608: [proxy:1c672ede] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776473948&Signature=LYybB6cLvME1iVGYiXUn45~BFuTqnFQsC0haOrgPOuPk9dsg5dzkMT-NJhVn2VUiY3D-PYHIK8UPANTWxQpTB69pJvaMA49iVzKZqGmbqGBPU0v-XpLi39iefThCjg~NgJupeoIcP1uQAN0tFOZRAe7laKoocR8lWPDZxK1MXjk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:59:08] [0.5.1] [INFO] file.py:624: [proxy:1c672ede] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776473948&Signature=LYybB6cLvME1iVGYiXUn45~BFuTqnFQsC0haOrgPOuPk9dsg5dzkMT-NJhVn2VUiY3D-PYHIK8UPANTWxQpTB69pJvaMA49iVzKZqGmbqGBPU0v-XpLi39iefThCjg~NgJupeoIcP1uQAN0tFOZRAe7laKoocR8lWPDZxK1MXjk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 04:59:09] [0.5.1] [INFO] file.py:645: [proxy:1c672ede] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776473948&Signature=LYybB6cLvME1iVGYiXUn45~BFuTqnFQsC0haOrgPOuPk9dsg5dzkMT-NJhVn2VUiY3D-PYHIK8UPANTWxQpTB69pJvaMA49iVzKZqGmbqGBPU0v-XpLi39iefThCjg~NgJupeoIcP1uQAN0tFOZRAe7laKoocR8lWPDZxK1MXjk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 04:59:09] [0.5.1] [INFO] file.py:672: [proxy:1c672ede] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776473948&Signature=LYybB6cLvME1iVGYiXUn45~BFuTqnFQsC0haOrgPOuPk9dsg5dzkMT-NJhVn2VUiY3D-PYHIK8UPANTWxQpTB69pJvaMA49iVzKZqGmbqGBPU0v-XpLi39iefThCjg~NgJupeoIcP1uQAN0tFOZRAe7laKoocR8lWPDZxK1MXjk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 04:59:10] [0.5.1] [INFO] 122.97.136.182:19383 - "GET /proxy/music?token=FgsvpZcsNZk HTTP/1.1" 200 [2026-04-18 05:01:19] [0.5.1] [INFO] file.py:519: [proxy:34d18f12] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 05:01:19] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 05:01:19] [0.5.1] [INFO] file.py:524: [proxy:34d18f12] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 05:01:19] [0.5.1] [INFO] file.py:552: [proxy:34d18f12] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:01:19] [0.5.1] [INFO] file.py:597: [proxy:34d18f12] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:01:19] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:01:19] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 05:01:19] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776459679597"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:01:19] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776459679597: True [2026-04-18 05:01:19] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776474079&Signature=RQ~D7wToZa3JYEJ3rK~U4kZHD5U0PFR6lfIuSfEeDKv2WLiRZSIl~6FjEuW~nHXHDopnp0ZjUr7QZRupwEYlRW1pTJQPwNk4W2ARmxJ2If6QeXpJqBszIpklrRrbgb1RLAGALOu2Zv5w1goheSNPP0X7gxJRW9vdyqen~GWOhkQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:01:19] [0.5.1] [INFO] 34.21.156.125:60386 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 05:01:19] [0.5.1] [INFO] file.py:608: [proxy:34d18f12] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776474079&Signature=RQ~D7wToZa3JYEJ3rK~U4kZHD5U0PFR6lfIuSfEeDKv2WLiRZSIl~6FjEuW~nHXHDopnp0ZjUr7QZRupwEYlRW1pTJQPwNk4W2ARmxJ2If6QeXpJqBszIpklrRrbgb1RLAGALOu2Zv5w1goheSNPP0X7gxJRW9vdyqen~GWOhkQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:01:19] [0.5.1] [INFO] file.py:624: [proxy:34d18f12] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776474079&Signature=RQ~D7wToZa3JYEJ3rK~U4kZHD5U0PFR6lfIuSfEeDKv2WLiRZSIl~6FjEuW~nHXHDopnp0ZjUr7QZRupwEYlRW1pTJQPwNk4W2ARmxJ2If6QeXpJqBszIpklrRrbgb1RLAGALOu2Zv5w1goheSNPP0X7gxJRW9vdyqen~GWOhkQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:01:20] [0.5.1] [INFO] file.py:645: [proxy:34d18f12] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776474079&Signature=RQ~D7wToZa3JYEJ3rK~U4kZHD5U0PFR6lfIuSfEeDKv2WLiRZSIl~6FjEuW~nHXHDopnp0ZjUr7QZRupwEYlRW1pTJQPwNk4W2ARmxJ2If6QeXpJqBszIpklrRrbgb1RLAGALOu2Zv5w1goheSNPP0X7gxJRW9vdyqen~GWOhkQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 05:01:20] [0.5.1] [INFO] file.py:672: [proxy:34d18f12] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776474079&Signature=RQ~D7wToZa3JYEJ3rK~U4kZHD5U0PFR6lfIuSfEeDKv2WLiRZSIl~6FjEuW~nHXHDopnp0ZjUr7QZRupwEYlRW1pTJQPwNk4W2ARmxJ2If6QeXpJqBszIpklrRrbgb1RLAGALOu2Zv5w1goheSNPP0X7gxJRW9vdyqen~GWOhkQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:01:21] [0.5.1] [INFO] 122.96.50.157:62645 - "GET /proxy/music?token=FgsvpZcsNZk HTTP/1.1" 200 [2026-04-18 05:03:19] [0.5.1] [INFO] 172.17.0.1:50434 - "GET / HTTP/1.0" 200 [2026-04-18 05:03:19] [0.5.1] [INFO] 172.17.0.1:50442 - "GET / HTTP/1.0" 200 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 05:03:32] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:03:32] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:03:32] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:03:32] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:03:32] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=Tbqfu1PCsgU [2026-04-18 05:03:32] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:03:34] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:03:34] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:03:35] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:03:35] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:03:35] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=Tbqfu1PCsgU [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=Tbqfu1PCsgU audio_id:1582971365183456177 [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=Tbqfu1PCsgU ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:03:36] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 295.728 秒 [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:03:36] [0.5.1] [INFO] device_player.py:808: 295.7279586928253 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:03:36] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:03:36] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:03:36] [0.5.1] [INFO] file.py:519: [proxy:a1e7e08d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:03:36] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 05:03:36] [0.5.1] [INFO] file.py:524: [proxy:a1e7e08d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:03:36] [0.5.1] [INFO] file.py:552: [proxy:a1e7e08d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:03:36] [0.5.1] [INFO] file.py:597: [proxy:a1e7e08d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:03:36] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:03:36] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 05:03:36] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776459816272"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:03:36] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776459816272: True [2026-04-18 05:03:36] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776474216&Signature=EBqiobK8piCDpQk3NU8IMRlfkTcGG5x1Taj7Y5r3ituBAt3EVrXXsPGwy3EcnGzwEEu14RsxuOVjDShGrbC9gTot5x2jlO5fP2WCAEooiQCB9A6UV3oQMp~gbrkIRQERVW9a770ewDSOZYnKo~94kZywIcMjivDB8VhOnKitl4U_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:03:36] [0.5.1] [INFO] 34.21.156.125:58602 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 05:03:36] [0.5.1] [INFO] file.py:608: [proxy:a1e7e08d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776474216&Signature=EBqiobK8piCDpQk3NU8IMRlfkTcGG5x1Taj7Y5r3ituBAt3EVrXXsPGwy3EcnGzwEEu14RsxuOVjDShGrbC9gTot5x2jlO5fP2WCAEooiQCB9A6UV3oQMp~gbrkIRQERVW9a770ewDSOZYnKo~94kZywIcMjivDB8VhOnKitl4U_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:03:36] [0.5.1] [INFO] file.py:624: [proxy:a1e7e08d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776474216&Signature=EBqiobK8piCDpQk3NU8IMRlfkTcGG5x1Taj7Y5r3ituBAt3EVrXXsPGwy3EcnGzwEEu14RsxuOVjDShGrbC9gTot5x2jlO5fP2WCAEooiQCB9A6UV3oQMp~gbrkIRQERVW9a770ewDSOZYnKo~94kZywIcMjivDB8VhOnKitl4U_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:03:37] [0.5.1] [INFO] file.py:645: [proxy:a1e7e08d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776474216&Signature=EBqiobK8piCDpQk3NU8IMRlfkTcGG5x1Taj7Y5r3ituBAt3EVrXXsPGwy3EcnGzwEEu14RsxuOVjDShGrbC9gTot5x2jlO5fP2WCAEooiQCB9A6UV3oQMp~gbrkIRQERVW9a770ewDSOZYnKo~94kZywIcMjivDB8VhOnKitl4U_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 05:03:37] [0.5.1] [INFO] file.py:672: [proxy:a1e7e08d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776474216&Signature=EBqiobK8piCDpQk3NU8IMRlfkTcGG5x1Taj7Y5r3ituBAt3EVrXXsPGwy3EcnGzwEEu14RsxuOVjDShGrbC9gTot5x2jlO5fP2WCAEooiQCB9A6UV3oQMp~gbrkIRQERVW9a770ewDSOZYnKo~94kZywIcMjivDB8VhOnKitl4U_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:03:38] [0.5.1] [INFO] 122.96.50.157:3445 - "GET /proxy/music?token=Tbqfu1PCsgU HTTP/1.1" 200 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 05:08:31] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:08:31] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:08:31] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:08:31] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:08:31] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=3AW7uBK7BYw [2026-04-18 05:08:31] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:08:32] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:08:33] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:08:33] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:08:33] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:08:33] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=3AW7uBK7BYw [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=3AW7uBK7BYw audio_id:1582971365183456177 [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=3AW7uBK7BYw ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:08:35] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:08:35] [0.5.1] [INFO] device_player.py:808: 254.0111491530304 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:08:35] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:08:35] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:08:35] [0.5.1] [INFO] file.py:519: [proxy:084ee1b2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:08:35] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:08:35] [0.5.1] [INFO] file.py:524: [proxy:084ee1b2] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:08:35] [0.5.1] [INFO] file.py:552: [proxy:084ee1b2] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:08:35] [0.5.1] [INFO] file.py:597: [proxy:084ee1b2] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:08:35] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:08:35] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 05:08:35] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776460115387"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:08:35] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776460115387: True [2026-04-18 05:08:35] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776474515&Signature=O6faZ7EXdBoOLQEoBTvIU7hZGOZDJvB~iSu6vBxAeFSmJuuuoV9qUTkYAjfbytKR1~e6peA2U~3TdOgCOF6FEfA4rANFplV-bFtpRKk5VTtOm1ZcUI2rSIGRWdfVvNHWvd4Hp7CJWL54Bj4D685SeAVP8a8ROBEGFF8UcPFJSZU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:08:35] [0.5.1] [INFO] 34.21.156.125:59796 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:08:35] [0.5.1] [INFO] file.py:608: [proxy:084ee1b2] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776474515&Signature=O6faZ7EXdBoOLQEoBTvIU7hZGOZDJvB~iSu6vBxAeFSmJuuuoV9qUTkYAjfbytKR1~e6peA2U~3TdOgCOF6FEfA4rANFplV-bFtpRKk5VTtOm1ZcUI2rSIGRWdfVvNHWvd4Hp7CJWL54Bj4D685SeAVP8a8ROBEGFF8UcPFJSZU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:08:35] [0.5.1] [INFO] file.py:624: [proxy:084ee1b2] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776474515&Signature=O6faZ7EXdBoOLQEoBTvIU7hZGOZDJvB~iSu6vBxAeFSmJuuuoV9qUTkYAjfbytKR1~e6peA2U~3TdOgCOF6FEfA4rANFplV-bFtpRKk5VTtOm1ZcUI2rSIGRWdfVvNHWvd4Hp7CJWL54Bj4D685SeAVP8a8ROBEGFF8UcPFJSZU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:08:36] [0.5.1] [INFO] file.py:645: [proxy:084ee1b2] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776474515&Signature=O6faZ7EXdBoOLQEoBTvIU7hZGOZDJvB~iSu6vBxAeFSmJuuuoV9qUTkYAjfbytKR1~e6peA2U~3TdOgCOF6FEfA4rANFplV-bFtpRKk5VTtOm1ZcUI2rSIGRWdfVvNHWvd4Hp7CJWL54Bj4D685SeAVP8a8ROBEGFF8UcPFJSZU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 05:08:36] [0.5.1] [INFO] file.py:672: [proxy:084ee1b2] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776474515&Signature=O6faZ7EXdBoOLQEoBTvIU7hZGOZDJvB~iSu6vBxAeFSmJuuuoV9qUTkYAjfbytKR1~e6peA2U~3TdOgCOF6FEfA4rANFplV-bFtpRKk5VTtOm1ZcUI2rSIGRWdfVvNHWvd4Hp7CJWL54Bj4D685SeAVP8a8ROBEGFF8UcPFJSZU_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:08:37] [0.5.1] [INFO] 122.96.50.157:32623 - "GET /proxy/music?token=3AW7uBK7BYw HTTP/1.1" 200 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 05:12:49] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:12:49] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:12:49] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:12:49] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:12:49] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=c_C0Y-P2aDE [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:12:49] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:12:50] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:12:50] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:12:50] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:12:50] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=c_C0Y-P2aDE [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=c_C0Y-P2aDE audio_id:1582971365183456177 [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=c_C0Y-P2aDE ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:12:51] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.043 秒 [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:12:51] [0.5.1] [INFO] device_player.py:808: 342.0434065115814 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:12:51] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:12:51] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:12:51] [0.5.1] [INFO] file.py:519: [proxy:02e1419e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:12:51] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:12:51] [0.5.1] [INFO] file.py:524: [proxy:02e1419e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:12:51] [0.5.1] [INFO] file.py:552: [proxy:02e1419e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:12:51] [0.5.1] [INFO] file.py:597: [proxy:02e1419e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:12:51] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:12:51] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 05:12:51] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776460371727"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:12:52] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776460371727: True [2026-04-18 05:12:52] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776474771&Signature=F2m--milOS3XxHwpUk2an3eoRdQ5NyhXi-f7NAunvN4ZtmE47mFFVD3KDgBYPYCLp3ahyKTp-xHVJfwgEsFAg-vRKilSaC61uYz1N-IlJGoOgNY4waTJsQP8OG609I7fopJtFf3jjl1TPDZduudgVNtvtgtGMsIau~8ivI~g6W4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:12:52] [0.5.1] [INFO] 34.21.156.125:43048 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:12:52] [0.5.1] [INFO] file.py:608: [proxy:02e1419e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776474771&Signature=F2m--milOS3XxHwpUk2an3eoRdQ5NyhXi-f7NAunvN4ZtmE47mFFVD3KDgBYPYCLp3ahyKTp-xHVJfwgEsFAg-vRKilSaC61uYz1N-IlJGoOgNY4waTJsQP8OG609I7fopJtFf3jjl1TPDZduudgVNtvtgtGMsIau~8ivI~g6W4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:12:52] [0.5.1] [INFO] file.py:624: [proxy:02e1419e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776474771&Signature=F2m--milOS3XxHwpUk2an3eoRdQ5NyhXi-f7NAunvN4ZtmE47mFFVD3KDgBYPYCLp3ahyKTp-xHVJfwgEsFAg-vRKilSaC61uYz1N-IlJGoOgNY4waTJsQP8OG609I7fopJtFf3jjl1TPDZduudgVNtvtgtGMsIau~8ivI~g6W4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:12:52] [0.5.1] [INFO] file.py:645: [proxy:02e1419e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776474771&Signature=F2m--milOS3XxHwpUk2an3eoRdQ5NyhXi-f7NAunvN4ZtmE47mFFVD3KDgBYPYCLp3ahyKTp-xHVJfwgEsFAg-vRKilSaC61uYz1N-IlJGoOgNY4waTJsQP8OG609I7fopJtFf3jjl1TPDZduudgVNtvtgtGMsIau~8ivI~g6W4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 05:12:52] [0.5.1] [INFO] file.py:672: [proxy:02e1419e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776474771&Signature=F2m--milOS3XxHwpUk2an3eoRdQ5NyhXi-f7NAunvN4ZtmE47mFFVD3KDgBYPYCLp3ahyKTp-xHVJfwgEsFAg-vRKilSaC61uYz1N-IlJGoOgNY4waTJsQP8OG609I7fopJtFf3jjl1TPDZduudgVNtvtgtGMsIau~8ivI~g6W4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:12:53] [0.5.1] [INFO] 122.97.136.182:42178 - "GET /proxy/music?token=c_C0Y-P2aDE HTTP/1.1" 200 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 05:18:33] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:18:33] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:18:33] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:18:33] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:18:33] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=y3QYJyjUBiA [2026-04-18 05:18:33] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:18:34] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:18:34] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:18:35] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:18:35] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:18:35] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=y3QYJyjUBiA [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=y3QYJyjUBiA audio_id:1582971365183456177 [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=y3QYJyjUBiA ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:18:36] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 228.672 秒 [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:18:36] [0.5.1] [INFO] device_player.py:808: 228.67204242134093 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:18:36] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:18:36] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:18:36] [0.5.1] [INFO] file.py:519: [proxy:b0ed96b4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:18:36] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:18:36] [0.5.1] [INFO] file.py:524: [proxy:b0ed96b4] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:18:36] [0.5.1] [INFO] file.py:552: [proxy:b0ed96b4] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:18:36] [0.5.1] [INFO] file.py:597: [proxy:b0ed96b4] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:18:36] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:18:36] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 05:18:36] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776460716475"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:18:36] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776460716475: True [2026-04-18 05:18:36] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776475116&Signature=LI4j3dG8jmA4XKCI7TT2M6XCVgVNVOIcI~VbI1zC3NhmXO3r1K3eNCJdn6GBAn2c~wSntGadB7ohdUNGcN-dV8xgDpXhj9FkBxoywkmgitYu-an~SE0mX3R-leVm9PVDb2rb2kTTSeRl4vZXY-lZbYv9pUyuT-YWvGnLLGWOuxc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:18:36] [0.5.1] [INFO] 34.21.156.125:57678 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:18:36] [0.5.1] [INFO] file.py:608: [proxy:b0ed96b4] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776475116&Signature=LI4j3dG8jmA4XKCI7TT2M6XCVgVNVOIcI~VbI1zC3NhmXO3r1K3eNCJdn6GBAn2c~wSntGadB7ohdUNGcN-dV8xgDpXhj9FkBxoywkmgitYu-an~SE0mX3R-leVm9PVDb2rb2kTTSeRl4vZXY-lZbYv9pUyuT-YWvGnLLGWOuxc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:18:36] [0.5.1] [INFO] file.py:624: [proxy:b0ed96b4] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776475116&Signature=LI4j3dG8jmA4XKCI7TT2M6XCVgVNVOIcI~VbI1zC3NhmXO3r1K3eNCJdn6GBAn2c~wSntGadB7ohdUNGcN-dV8xgDpXhj9FkBxoywkmgitYu-an~SE0mX3R-leVm9PVDb2rb2kTTSeRl4vZXY-lZbYv9pUyuT-YWvGnLLGWOuxc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:18:37] [0.5.1] [INFO] file.py:645: [proxy:b0ed96b4] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776475116&Signature=LI4j3dG8jmA4XKCI7TT2M6XCVgVNVOIcI~VbI1zC3NhmXO3r1K3eNCJdn6GBAn2c~wSntGadB7ohdUNGcN-dV8xgDpXhj9FkBxoywkmgitYu-an~SE0mX3R-leVm9PVDb2rb2kTTSeRl4vZXY-lZbYv9pUyuT-YWvGnLLGWOuxc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 05:18:37] [0.5.1] [INFO] file.py:672: [proxy:b0ed96b4] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776475116&Signature=LI4j3dG8jmA4XKCI7TT2M6XCVgVNVOIcI~VbI1zC3NhmXO3r1K3eNCJdn6GBAn2c~wSntGadB7ohdUNGcN-dV8xgDpXhj9FkBxoywkmgitYu-an~SE0mX3R-leVm9PVDb2rb2kTTSeRl4vZXY-lZbYv9pUyuT-YWvGnLLGWOuxc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:18:38] [0.5.1] [INFO] 122.96.50.157:30834 - "GET /proxy/music?token=y3QYJyjUBiA HTTP/1.1" 200 [2026-04-18 05:19:44] [0.5.1] [ERROR] file.py:468: [bili-ffmpeg] _feed_ffmpeg error: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 466, in _feed_ffmpeg await proc.stdin.drain() File "/usr/local/lib/python3.14/asyncio/streams.py", line 386, in drain await self._protocol._drain_helper() File "/usr/local/lib/python3.14/asyncio/streams.py", line 172, in _drain_helper await waiter BrokenPipeError [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 05:22:25] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 05:22:25] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 05:22:25] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:22:25] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:22:25] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=YxaSwuqEP0w [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:22:25] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:22:26] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:22:26] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:22:26] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=YxaSwuqEP0w [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=YxaSwuqEP0w audio_id:1582971365183456177 [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=YxaSwuqEP0w ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 05:22:27] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 228.724 秒 [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:22:27] [0.5.1] [INFO] device_player.py:808: 228.72424664497376 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:22:27] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:22:27] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:22:27] [0.5.1] [INFO] file.py:519: [proxy:ec92721b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 05:22:27] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 05:22:27] [0.5.1] [INFO] file.py:524: [proxy:ec92721b] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 05:22:27] [0.5.1] [INFO] file.py:552: [proxy:ec92721b] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:22:27] [0.5.1] [INFO] file.py:597: [proxy:ec92721b] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:22:27] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:22:27] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 05:22:27] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776460947486"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:22:27] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776460947486: True [2026-04-18 05:22:27] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776475347&Signature=Vl2B8ssPJTxr0O9ZH3NYwLohJLfwvFI0K8UmTyWphpV3uR6sDt4dT3IHk-9pwBHjgknWMG4n3A9F4HZXwJIbq-fGtJzKxbJSIJHhnRje0H0nA99aw1dbQyi6wYOMzaTVk3Ao9D4xHRgQMpYMLisFl1wbSqcpqDPzpVUOx53NmGY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:22:27] [0.5.1] [INFO] 34.21.156.125:49998 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 05:22:27] [0.5.1] [INFO] file.py:608: [proxy:ec92721b] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776475347&Signature=Vl2B8ssPJTxr0O9ZH3NYwLohJLfwvFI0K8UmTyWphpV3uR6sDt4dT3IHk-9pwBHjgknWMG4n3A9F4HZXwJIbq-fGtJzKxbJSIJHhnRje0H0nA99aw1dbQyi6wYOMzaTVk3Ao9D4xHRgQMpYMLisFl1wbSqcpqDPzpVUOx53NmGY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:22:27] [0.5.1] [INFO] file.py:624: [proxy:ec92721b] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776475347&Signature=Vl2B8ssPJTxr0O9ZH3NYwLohJLfwvFI0K8UmTyWphpV3uR6sDt4dT3IHk-9pwBHjgknWMG4n3A9F4HZXwJIbq-fGtJzKxbJSIJHhnRje0H0nA99aw1dbQyi6wYOMzaTVk3Ao9D4xHRgQMpYMLisFl1wbSqcpqDPzpVUOx53NmGY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:22:28] [0.5.1] [INFO] file.py:645: [proxy:ec92721b] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776475347&Signature=Vl2B8ssPJTxr0O9ZH3NYwLohJLfwvFI0K8UmTyWphpV3uR6sDt4dT3IHk-9pwBHjgknWMG4n3A9F4HZXwJIbq-fGtJzKxbJSIJHhnRje0H0nA99aw1dbQyi6wYOMzaTVk3Ao9D4xHRgQMpYMLisFl1wbSqcpqDPzpVUOx53NmGY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 05:22:28] [0.5.1] [INFO] file.py:672: [proxy:ec92721b] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776475347&Signature=Vl2B8ssPJTxr0O9ZH3NYwLohJLfwvFI0K8UmTyWphpV3uR6sDt4dT3IHk-9pwBHjgknWMG4n3A9F4HZXwJIbq-fGtJzKxbJSIJHhnRje0H0nA99aw1dbQyi6wYOMzaTVk3Ao9D4xHRgQMpYMLisFl1wbSqcpqDPzpVUOx53NmGY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:22:29] [0.5.1] [INFO] 122.96.50.157:37366 - "GET /proxy/music?token=YxaSwuqEP0w HTTP/1.1" 200 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 05:26:16] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 05:26:16] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 05:26:16] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:26:16] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:26:16] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=iE0ISxRibc8 [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:26:16] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:26:17] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:26:17] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:26:17] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:26:17] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=iE0ISxRibc8 [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=iE0ISxRibc8 audio_id:1582971365183456177 [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=iE0ISxRibc8 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 05:26:18] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 268.651 秒 [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:26:18] [0.5.1] [INFO] device_player.py:808: 268.65141769218445 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:26:18] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:26:18] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:26:18] [0.5.1] [INFO] file.py:519: [proxy:aac45522] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:26:18] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 05:26:18] [0.5.1] [INFO] file.py:524: [proxy:aac45522] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:26:18] [0.5.1] [INFO] file.py:552: [proxy:aac45522] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:26:18] [0.5.1] [INFO] file.py:597: [proxy:aac45522] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:26:18] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:26:18] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 05:26:18] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776461178734"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:26:19] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776461178734: True [2026-04-18 05:26:19] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776475578&Signature=LR2nT56j3oHTaPtY8auYsPaDgYIddjh0aCWEtl2eGnPGAN~JKyOoWvbeVNTi7MX0KmNNFF4V4wQEcNKbd97ZFvRxIpuedo53gHyOj4ISNt~ATxhXTBOPVdNRtHEI3YrL0bvBc-hBqLoVr020BCvPz1Mb5opeOo78K3C-3oTADNY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:26:19] [0.5.1] [INFO] 34.21.156.125:51200 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 05:26:19] [0.5.1] [INFO] file.py:608: [proxy:aac45522] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776475578&Signature=LR2nT56j3oHTaPtY8auYsPaDgYIddjh0aCWEtl2eGnPGAN~JKyOoWvbeVNTi7MX0KmNNFF4V4wQEcNKbd97ZFvRxIpuedo53gHyOj4ISNt~ATxhXTBOPVdNRtHEI3YrL0bvBc-hBqLoVr020BCvPz1Mb5opeOo78K3C-3oTADNY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:26:19] [0.5.1] [INFO] file.py:624: [proxy:aac45522] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776475578&Signature=LR2nT56j3oHTaPtY8auYsPaDgYIddjh0aCWEtl2eGnPGAN~JKyOoWvbeVNTi7MX0KmNNFF4V4wQEcNKbd97ZFvRxIpuedo53gHyOj4ISNt~ATxhXTBOPVdNRtHEI3YrL0bvBc-hBqLoVr020BCvPz1Mb5opeOo78K3C-3oTADNY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:26:19] [0.5.1] [INFO] file.py:645: [proxy:aac45522] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776475578&Signature=LR2nT56j3oHTaPtY8auYsPaDgYIddjh0aCWEtl2eGnPGAN~JKyOoWvbeVNTi7MX0KmNNFF4V4wQEcNKbd97ZFvRxIpuedo53gHyOj4ISNt~ATxhXTBOPVdNRtHEI3YrL0bvBc-hBqLoVr020BCvPz1Mb5opeOo78K3C-3oTADNY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 05:26:19] [0.5.1] [INFO] file.py:683: [proxy:aac45522] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 05:26:19] [0.5.1] [INFO] 122.97.136.182:8172 - "GET /proxy/music?token=iE0ISxRibc8 HTTP/1.1" 200 [2026-04-18 05:29:56] [0.5.1] [INFO] file.py:738: [proxy:aac45522] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776475578&Signature=LR2nT56j3oHTaPtY8auYsPaDgYIddjh0aCWEtl2eGnPGAN~JKyOoWvbeVNTi7MX0KmNNFF4V4wQEcNKbd97ZFvRxIpuedo53gHyOj4ISNt~ATxhXTBOPVdNRtHEI3YrL0bvBc-hBqLoVr020BCvPz1Mb5opeOo78K3C-3oTADNY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 05:30:47] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 05:30:47] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 05:30:47] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:30:47] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 05:30:47] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=_uMAIOFtkvQ [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:30:47] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:30:48] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:30:48] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:30:48] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:30:48] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=_uMAIOFtkvQ [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=_uMAIOFtkvQ audio_id:1582971365183456177 [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=_uMAIOFtkvQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 05:30:49] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:30:49] [0.5.1] [INFO] device_player.py:808: 1.4052645406799316 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:30:49] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:30:49] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:519: [proxy:4e5e0e3e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 05:30:49] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:524: [proxy:4e5e0e3e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:552: [proxy:4e5e0e3e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:597: [proxy:4e5e0e3e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:30:49] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 05:30:49] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 05:30:49] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776461449363"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:30:49] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776461449363: True [2026-04-18 05:30:49] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 05:30:49] [0.5.1] [INFO] 34.21.156.125:37016 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:608: [proxy:4e5e0e3e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:624: [proxy:4e5e0e3e] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:30:49] [0.5.1] [INFO] 34.21.156.125:37016 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:645: [proxy:4e5e0e3e] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:683: [proxy:4e5e0e3e] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 05:30:49] [0.5.1] [INFO] 122.97.136.182:14532 - "GET /proxy/music?token=_uMAIOFtkvQ HTTP/1.1" 200 [2026-04-18 05:30:49] [0.5.1] [INFO] file.py:738: [proxy:4e5e0e3e] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 05:30:50] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 05:30:50] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 05:30:50] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:30:50] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:30:50] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=8nSLPQO-Dug [2026-04-18 05:30:50] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:30:51] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:30:51] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=8nSLPQO-Dug [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=8nSLPQO-Dug audio_id:1582971365183456177 [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=8nSLPQO-Dug ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:30:52] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:30:52] [0.5.1] [INFO] device_player.py:808: 299.25849060058596 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:30:52] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:30:52] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:30:52] [0.5.1] [INFO] file.py:519: [proxy:a812b44e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:30:52] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:30:52] [0.5.1] [INFO] file.py:524: [proxy:a812b44e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:30:52] [0.5.1] [INFO] file.py:552: [proxy:a812b44e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:30:52] [0.5.1] [INFO] file.py:597: [proxy:a812b44e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:30:52] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:30:52] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 05:30:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776461452939"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:30:53] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776461452939: True [2026-04-18 05:30:53] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776475853&Signature=Mxm1Wa4ZAN0YpV8NBQtxXH5Nh9ejliGoW2-ToaLCOsSMBwH026uCStRUa4s-aQSyN93ARoF1SRaiS75kHP0xoWtehhue~ptZatbnaPhtGx2nc2kFS6-ejQSoTHEqkdSEEexRfHywO9EywvVhjVvFyYw9Nd2RziF3zNBwWhgNGPQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:30:53] [0.5.1] [INFO] 34.21.156.125:37030 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:30:53] [0.5.1] [INFO] file.py:608: [proxy:a812b44e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776475853&Signature=Mxm1Wa4ZAN0YpV8NBQtxXH5Nh9ejliGoW2-ToaLCOsSMBwH026uCStRUa4s-aQSyN93ARoF1SRaiS75kHP0xoWtehhue~ptZatbnaPhtGx2nc2kFS6-ejQSoTHEqkdSEEexRfHywO9EywvVhjVvFyYw9Nd2RziF3zNBwWhgNGPQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:30:53] [0.5.1] [INFO] file.py:624: [proxy:a812b44e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776475853&Signature=Mxm1Wa4ZAN0YpV8NBQtxXH5Nh9ejliGoW2-ToaLCOsSMBwH026uCStRUa4s-aQSyN93ARoF1SRaiS75kHP0xoWtehhue~ptZatbnaPhtGx2nc2kFS6-ejQSoTHEqkdSEEexRfHywO9EywvVhjVvFyYw9Nd2RziF3zNBwWhgNGPQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:30:53] [0.5.1] [INFO] file.py:645: [proxy:a812b44e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776475853&Signature=Mxm1Wa4ZAN0YpV8NBQtxXH5Nh9ejliGoW2-ToaLCOsSMBwH026uCStRUa4s-aQSyN93ARoF1SRaiS75kHP0xoWtehhue~ptZatbnaPhtGx2nc2kFS6-ejQSoTHEqkdSEEexRfHywO9EywvVhjVvFyYw9Nd2RziF3zNBwWhgNGPQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 05:30:53] [0.5.1] [INFO] file.py:672: [proxy:a812b44e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776475853&Signature=Mxm1Wa4ZAN0YpV8NBQtxXH5Nh9ejliGoW2-ToaLCOsSMBwH026uCStRUa4s-aQSyN93ARoF1SRaiS75kHP0xoWtehhue~ptZatbnaPhtGx2nc2kFS6-ejQSoTHEqkdSEEexRfHywO9EywvVhjVvFyYw9Nd2RziF3zNBwWhgNGPQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:30:54] [0.5.1] [INFO] 122.97.136.182:14929 - "GET /proxy/music?token=8nSLPQO-Dug HTTP/1.1" 200 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 05:35:52] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 05:35:52] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 05:35:52] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:35:52] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:35:52] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=PH4RpsipJBE [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:35:52] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:35:53] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:35:53] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:35:53] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:35:53] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=PH4RpsipJBE [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=PH4RpsipJBE audio_id:1582971365183456177 [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=PH4RpsipJBE ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:35:54] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.870 秒 [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:35:54] [0.5.1] [INFO] device_player.py:808: 226.87001955441283 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:35:54] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:35:54] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:35:54] [0.5.1] [INFO] file.py:519: [proxy:11b5d2e9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:35:54] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:35:54] [0.5.1] [INFO] file.py:524: [proxy:11b5d2e9] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:35:54] [0.5.1] [INFO] file.py:552: [proxy:11b5d2e9] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:35:54] [0.5.1] [INFO] file.py:597: [proxy:11b5d2e9] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:35:54] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:35:54] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 05:35:54] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776461754411"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:35:54] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776461754411: True [2026-04-18 05:35:54] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776476154&Signature=BW7GTwBuI~7c-lc50e0ZV11Q441Wq4YZLqPoD6wxQSS3hcU62~X9bt2mcESUO6VRxK11LBsbU~JPBt55ax13jYOxYaX~uf7~uwcfxh6ZFhzgXfd7jXbOTiEp~xFl~y48NoIFAeBXDOk2XRW-jDO7URQhOh-eZC0z-KnMC2UAaXA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:35:54] [0.5.1] [INFO] 34.21.156.125:42566 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:35:54] [0.5.1] [INFO] file.py:608: [proxy:11b5d2e9] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776476154&Signature=BW7GTwBuI~7c-lc50e0ZV11Q441Wq4YZLqPoD6wxQSS3hcU62~X9bt2mcESUO6VRxK11LBsbU~JPBt55ax13jYOxYaX~uf7~uwcfxh6ZFhzgXfd7jXbOTiEp~xFl~y48NoIFAeBXDOk2XRW-jDO7URQhOh-eZC0z-KnMC2UAaXA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:35:54] [0.5.1] [INFO] file.py:624: [proxy:11b5d2e9] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776476154&Signature=BW7GTwBuI~7c-lc50e0ZV11Q441Wq4YZLqPoD6wxQSS3hcU62~X9bt2mcESUO6VRxK11LBsbU~JPBt55ax13jYOxYaX~uf7~uwcfxh6ZFhzgXfd7jXbOTiEp~xFl~y48NoIFAeBXDOk2XRW-jDO7URQhOh-eZC0z-KnMC2UAaXA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:35:55] [0.5.1] [INFO] file.py:645: [proxy:11b5d2e9] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776476154&Signature=BW7GTwBuI~7c-lc50e0ZV11Q441Wq4YZLqPoD6wxQSS3hcU62~X9bt2mcESUO6VRxK11LBsbU~JPBt55ax13jYOxYaX~uf7~uwcfxh6ZFhzgXfd7jXbOTiEp~xFl~y48NoIFAeBXDOk2XRW-jDO7URQhOh-eZC0z-KnMC2UAaXA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 05:35:55] [0.5.1] [INFO] file.py:672: [proxy:11b5d2e9] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776476154&Signature=BW7GTwBuI~7c-lc50e0ZV11Q441Wq4YZLqPoD6wxQSS3hcU62~X9bt2mcESUO6VRxK11LBsbU~JPBt55ax13jYOxYaX~uf7~uwcfxh6ZFhzgXfd7jXbOTiEp~xFl~y48NoIFAeBXDOk2XRW-jDO7URQhOh-eZC0z-KnMC2UAaXA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:35:56] [0.5.1] [INFO] 122.97.136.182:5440 - "GET /proxy/music?token=PH4RpsipJBE HTTP/1.1" 200 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 05:39:41] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 05:39:41] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 05:39:41] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:39:41] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 05:39:41] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=CVGQmrAM-Wo [2026-04-18 05:39:41] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:39:42] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:39:42] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:39:42] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:39:42] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:39:42] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=CVGQmrAM-Wo [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=CVGQmrAM-Wo audio_id:1582971365183456177 [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=CVGQmrAM-Wo ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:39:43] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 264.643 秒 [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:39:43] [0.5.1] [INFO] device_player.py:808: 264.64281237983704 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:39:43] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:39:43] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:39:43] [0.5.1] [INFO] file.py:519: [proxy:d47bedb2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 05:39:43] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 05:39:43] [0.5.1] [INFO] file.py:524: [proxy:d47bedb2] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 05:39:43] [0.5.1] [INFO] file.py:552: [proxy:d47bedb2] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:39:43] [0.5.1] [INFO] file.py:597: [proxy:d47bedb2] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:39:44] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:39:44] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 05:39:44] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776461984057"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:39:44] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776461984057: True [2026-04-18 05:39:44] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776476384&Signature=e4VSEp3sM4~v-9yqh~NofeZuK8N~neeZLTaxONNoGbKfbpMo3iN3-XUepNP6DxQDX3hw~bq1i6RqkXBfLOQ6LlsitJUSsLk1qM1DeO~LwLDE2ENbPFbl-oh6ravaMo~~OzQAOB3t2touOwRdXgcRBntzO9qfgahjd4xmPKs1aMo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:39:44] [0.5.1] [INFO] 34.21.156.125:49990 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 05:39:44] [0.5.1] [INFO] file.py:608: [proxy:d47bedb2] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776476384&Signature=e4VSEp3sM4~v-9yqh~NofeZuK8N~neeZLTaxONNoGbKfbpMo3iN3-XUepNP6DxQDX3hw~bq1i6RqkXBfLOQ6LlsitJUSsLk1qM1DeO~LwLDE2ENbPFbl-oh6ravaMo~~OzQAOB3t2touOwRdXgcRBntzO9qfgahjd4xmPKs1aMo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:39:44] [0.5.1] [INFO] file.py:624: [proxy:d47bedb2] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776476384&Signature=e4VSEp3sM4~v-9yqh~NofeZuK8N~neeZLTaxONNoGbKfbpMo3iN3-XUepNP6DxQDX3hw~bq1i6RqkXBfLOQ6LlsitJUSsLk1qM1DeO~LwLDE2ENbPFbl-oh6ravaMo~~OzQAOB3t2touOwRdXgcRBntzO9qfgahjd4xmPKs1aMo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:39:44] [0.5.1] [INFO] file.py:645: [proxy:d47bedb2] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776476384&Signature=e4VSEp3sM4~v-9yqh~NofeZuK8N~neeZLTaxONNoGbKfbpMo3iN3-XUepNP6DxQDX3hw~bq1i6RqkXBfLOQ6LlsitJUSsLk1qM1DeO~LwLDE2ENbPFbl-oh6ravaMo~~OzQAOB3t2touOwRdXgcRBntzO9qfgahjd4xmPKs1aMo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 05:39:44] [0.5.1] [INFO] file.py:672: [proxy:d47bedb2] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776476384&Signature=e4VSEp3sM4~v-9yqh~NofeZuK8N~neeZLTaxONNoGbKfbpMo3iN3-XUepNP6DxQDX3hw~bq1i6RqkXBfLOQ6LlsitJUSsLk1qM1DeO~LwLDE2ENbPFbl-oh6ravaMo~~OzQAOB3t2touOwRdXgcRBntzO9qfgahjd4xmPKs1aMo_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:39:45] [0.5.1] [INFO] 122.96.50.157:64012 - "GET /proxy/music?token=CVGQmrAM-Wo HTTP/1.1" 200 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 05:44:08] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:44:08] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:44:08] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:44:08] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:44:08] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=gK23SSakoZw [2026-04-18 05:44:08] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:44:09] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:44:10] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:44:10] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:44:10] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:44:10] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=gK23SSakoZw [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=gK23SSakoZw audio_id:1582971365183456177 [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=gK23SSakoZw ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:44:11] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 295.729 秒 [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:44:11] [0.5.1] [INFO] device_player.py:808: 295.72855402401734 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:44:11] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:44:11] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:44:11] [0.5.1] [INFO] file.py:519: [proxy:ea01f6b4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:44:11] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 05:44:11] [0.5.1] [INFO] file.py:524: [proxy:ea01f6b4] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 05:44:11] [0.5.1] [INFO] file.py:552: [proxy:ea01f6b4] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:44:11] [0.5.1] [INFO] file.py:597: [proxy:ea01f6b4] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:44:11] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:44:11] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 05:44:11] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776462251301"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:44:11] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776462251301: True [2026-04-18 05:44:11] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776476651&Signature=Ez5JSYnVrN0Zx00lvgEqIT74KSoTlGkU6BAkXsPPkgeg4lchlDyYk0g~dFTNtdL84XFFvoA1cpZkfEdvQIEyicXYnX0JOKh8myM6Oq~zxhi6zw5YQ9bNAfaTUJ3YD-7rJVfeYRSFj4lO4m~I6otzgRS09Jc3wdcUzP9MltmjEnI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:44:11] [0.5.1] [INFO] 34.21.156.125:51862 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 05:44:11] [0.5.1] [INFO] file.py:608: [proxy:ea01f6b4] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776476651&Signature=Ez5JSYnVrN0Zx00lvgEqIT74KSoTlGkU6BAkXsPPkgeg4lchlDyYk0g~dFTNtdL84XFFvoA1cpZkfEdvQIEyicXYnX0JOKh8myM6Oq~zxhi6zw5YQ9bNAfaTUJ3YD-7rJVfeYRSFj4lO4m~I6otzgRS09Jc3wdcUzP9MltmjEnI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:44:11] [0.5.1] [INFO] file.py:624: [proxy:ea01f6b4] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776476651&Signature=Ez5JSYnVrN0Zx00lvgEqIT74KSoTlGkU6BAkXsPPkgeg4lchlDyYk0g~dFTNtdL84XFFvoA1cpZkfEdvQIEyicXYnX0JOKh8myM6Oq~zxhi6zw5YQ9bNAfaTUJ3YD-7rJVfeYRSFj4lO4m~I6otzgRS09Jc3wdcUzP9MltmjEnI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:44:12] [0.5.1] [INFO] file.py:645: [proxy:ea01f6b4] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776476651&Signature=Ez5JSYnVrN0Zx00lvgEqIT74KSoTlGkU6BAkXsPPkgeg4lchlDyYk0g~dFTNtdL84XFFvoA1cpZkfEdvQIEyicXYnX0JOKh8myM6Oq~zxhi6zw5YQ9bNAfaTUJ3YD-7rJVfeYRSFj4lO4m~I6otzgRS09Jc3wdcUzP9MltmjEnI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 05:44:12] [0.5.1] [INFO] file.py:672: [proxy:ea01f6b4] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776476651&Signature=Ez5JSYnVrN0Zx00lvgEqIT74KSoTlGkU6BAkXsPPkgeg4lchlDyYk0g~dFTNtdL84XFFvoA1cpZkfEdvQIEyicXYnX0JOKh8myM6Oq~zxhi6zw5YQ9bNAfaTUJ3YD-7rJVfeYRSFj4lO4m~I6otzgRS09Jc3wdcUzP9MltmjEnI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:44:13] [0.5.1] [INFO] 122.97.136.182:54299 - "GET /proxy/music?token=gK23SSakoZw HTTP/1.1" 200 [2026-04-18 05:47:18] [0.5.1] [INFO] 172.17.0.1:54914 - "GET / HTTP/1.0" 200 [2026-04-18 05:47:18] [0.5.1] [INFO] 172.17.0.1:54926 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 05:47:18] [0.5.1] [INFO] 172.17.0.1:54930 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 05:47:18] [0.5.1] [INFO] 172.17.0.1:54932 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 05:47:18] [0.5.1] [INFO] 172.17.0.1:54936 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 05:47:19] [0.5.1] [INFO] 172.17.0.1:54940 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 05:49:06] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:49:06] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:49:06] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:49:06] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:49:06] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=NhfUxElySeE [2026-04-18 05:49:06] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:49:07] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:49:07] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:49:08] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:49:08] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:49:08] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=NhfUxElySeE [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=NhfUxElySeE audio_id:1582971365183456177 [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=NhfUxElySeE ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:49:09] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:49:09] [0.5.1] [INFO] device_player.py:808: 254.01095364979554 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:49:09] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:49:09] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:49:09] [0.5.1] [INFO] file.py:519: [proxy:4f3eaeb3] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:49:09] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:49:09] [0.5.1] [INFO] file.py:524: [proxy:4f3eaeb3] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:49:09] [0.5.1] [INFO] file.py:552: [proxy:4f3eaeb3] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:49:09] [0.5.1] [INFO] file.py:597: [proxy:4f3eaeb3] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:49:09] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:49:09] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 05:49:09] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776462549175"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:49:09] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776462549175: True [2026-04-18 05:49:09] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776476949&Signature=Y58oLumsvPGSUzsUzf1BNWgNBCF-WHqbZ96lOLMzMoxesGGWrjcDI9jTV4BOYWVBQNfmaUb7scYBBHCM-jYEhBc4bOxoDuTp0iOsIt5gaXRtqGb43hqpBHWwN1XWlH1dm~8SVmKuR7RanL0Sgztoj8LcXlxcxmT73j6RzQ4-fbM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:49:09] [0.5.1] [INFO] 34.21.156.125:46038 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:49:09] [0.5.1] [INFO] file.py:608: [proxy:4f3eaeb3] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776476949&Signature=Y58oLumsvPGSUzsUzf1BNWgNBCF-WHqbZ96lOLMzMoxesGGWrjcDI9jTV4BOYWVBQNfmaUb7scYBBHCM-jYEhBc4bOxoDuTp0iOsIt5gaXRtqGb43hqpBHWwN1XWlH1dm~8SVmKuR7RanL0Sgztoj8LcXlxcxmT73j6RzQ4-fbM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:49:09] [0.5.1] [INFO] file.py:624: [proxy:4f3eaeb3] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776476949&Signature=Y58oLumsvPGSUzsUzf1BNWgNBCF-WHqbZ96lOLMzMoxesGGWrjcDI9jTV4BOYWVBQNfmaUb7scYBBHCM-jYEhBc4bOxoDuTp0iOsIt5gaXRtqGb43hqpBHWwN1XWlH1dm~8SVmKuR7RanL0Sgztoj8LcXlxcxmT73j6RzQ4-fbM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:49:10] [0.5.1] [INFO] file.py:645: [proxy:4f3eaeb3] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776476949&Signature=Y58oLumsvPGSUzsUzf1BNWgNBCF-WHqbZ96lOLMzMoxesGGWrjcDI9jTV4BOYWVBQNfmaUb7scYBBHCM-jYEhBc4bOxoDuTp0iOsIt5gaXRtqGb43hqpBHWwN1XWlH1dm~8SVmKuR7RanL0Sgztoj8LcXlxcxmT73j6RzQ4-fbM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 05:49:10] [0.5.1] [INFO] file.py:672: [proxy:4f3eaeb3] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776476949&Signature=Y58oLumsvPGSUzsUzf1BNWgNBCF-WHqbZ96lOLMzMoxesGGWrjcDI9jTV4BOYWVBQNfmaUb7scYBBHCM-jYEhBc4bOxoDuTp0iOsIt5gaXRtqGb43hqpBHWwN1XWlH1dm~8SVmKuR7RanL0Sgztoj8LcXlxcxmT73j6RzQ4-fbM_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:49:11] [0.5.1] [INFO] 122.96.50.157:51678 - "GET /proxy/music?token=NhfUxElySeE HTTP/1.1" 200 [2026-04-18 05:52:17] [0.5.1] [INFO] 172.17.0.1:36470 - "GET / HTTP/1.0" 200 [2026-04-18 05:52:18] [0.5.1] [INFO] 172.17.0.1:36478 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 05:52:18] [0.5.1] [INFO] 172.17.0.1:36488 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 05:52:18] [0.5.1] [INFO] 172.17.0.1:36490 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 05:52:18] [0.5.1] [INFO] 172.17.0.1:36494 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 05:52:18] [0.5.1] [INFO] 172.17.0.1:36504 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 05:52:20] [0.5.1] [INFO] 172.17.0.1:36510 - "GET /static/icons/ios/144.png HTTP/1.0" 200 [2026-04-18 05:52:20] [0.5.1] [INFO] 172.17.0.1:36520 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 05:52:25] [0.5.1] [INFO] 172.17.0.1:36524 - "GET / HTTP/1.0" 200 [2026-04-18 05:52:25] [0.5.1] [INFO] 172.17.0.1:36538 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 05:52:25] [0.5.1] [INFO] 172.17.0.1:36542 - "GET /static/weapp/qrcode.html HTTP/1.0" 200 [2026-04-18 05:52:25] [0.5.1] [INFO] 172.17.0.1:36554 - "GET /static/sw.js HTTP/1.0" 200 [2026-04-18 05:52:26] [0.5.1] [INFO] 172.17.0.1:36558 - "GET /static/index.html HTTP/1.0" 200 [2026-04-18 05:52:26] [0.5.1] [INFO] 172.17.0.1:39672 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 05:52:26] [0.5.1] [INFO] 172.17.0.1:39692 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 05:52:26] [0.5.1] [INFO] 172.17.0.1:39680 - "GET /static/icons/ios/144.png HTTP/1.0" 200 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 05:53:23] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:53:23] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:53:23] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:53:23] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:53:23] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=PAyDI24EUp0 [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:53:23] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:53:24] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:53:24] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:53:24] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:53:24] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=PAyDI24EUp0 [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=PAyDI24EUp0 audio_id:1582971365183456177 [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=PAyDI24EUp0 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:53:25] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.044 秒 [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:53:25] [0.5.1] [INFO] device_player.py:808: 342.04359653118894 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:53:25] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:53:25] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:53:25] [0.5.1] [INFO] file.py:519: [proxy:b3928100] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:53:25] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:53:25] [0.5.1] [INFO] file.py:524: [proxy:b3928100] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:53:25] [0.5.1] [INFO] file.py:552: [proxy:b3928100] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:53:25] [0.5.1] [INFO] file.py:597: [proxy:b3928100] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:53:25] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:53:25] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 05:53:25] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776462805652"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:53:25] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776462805652: True [2026-04-18 05:53:25] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776477205&Signature=WR7CzBZgH~07f72ZDaDrDfpmCKCfGpzle9inKTHcr3UEyGCRBajZp6DgbtDHCn7-qKgo-4j0mzgcjm~wosemPDtfQNpIf47IVokxH3uWmrm5recSqTv8v~GSs00enFpEC~Bsb7vbD5y-1ku5yaXHtKXjSnNPETAN~fkUsH0dDhQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:53:25] [0.5.1] [INFO] 34.21.156.125:38254 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:53:25] [0.5.1] [INFO] file.py:608: [proxy:b3928100] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776477205&Signature=WR7CzBZgH~07f72ZDaDrDfpmCKCfGpzle9inKTHcr3UEyGCRBajZp6DgbtDHCn7-qKgo-4j0mzgcjm~wosemPDtfQNpIf47IVokxH3uWmrm5recSqTv8v~GSs00enFpEC~Bsb7vbD5y-1ku5yaXHtKXjSnNPETAN~fkUsH0dDhQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:53:25] [0.5.1] [INFO] file.py:624: [proxy:b3928100] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776477205&Signature=WR7CzBZgH~07f72ZDaDrDfpmCKCfGpzle9inKTHcr3UEyGCRBajZp6DgbtDHCn7-qKgo-4j0mzgcjm~wosemPDtfQNpIf47IVokxH3uWmrm5recSqTv8v~GSs00enFpEC~Bsb7vbD5y-1ku5yaXHtKXjSnNPETAN~fkUsH0dDhQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:53:26] [0.5.1] [INFO] file.py:645: [proxy:b3928100] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776477205&Signature=WR7CzBZgH~07f72ZDaDrDfpmCKCfGpzle9inKTHcr3UEyGCRBajZp6DgbtDHCn7-qKgo-4j0mzgcjm~wosemPDtfQNpIf47IVokxH3uWmrm5recSqTv8v~GSs00enFpEC~Bsb7vbD5y-1ku5yaXHtKXjSnNPETAN~fkUsH0dDhQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 05:53:26] [0.5.1] [INFO] file.py:672: [proxy:b3928100] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776477205&Signature=WR7CzBZgH~07f72ZDaDrDfpmCKCfGpzle9inKTHcr3UEyGCRBajZp6DgbtDHCn7-qKgo-4j0mzgcjm~wosemPDtfQNpIf47IVokxH3uWmrm5recSqTv8v~GSs00enFpEC~Bsb7vbD5y-1ku5yaXHtKXjSnNPETAN~fkUsH0dDhQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:53:27] [0.5.1] [INFO] 122.97.136.182:17412 - "GET /proxy/music?token=PAyDI24EUp0 HTTP/1.1" 200 [2026-04-18 05:57:25] [0.5.1] [INFO] 172.17.0.1:55792 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 05:57:25] [0.5.1] [INFO] 172.17.0.1:55798 - "GET /static/tailwind/libs/vue%403.5.13.js HTTP/1.0" 200 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 05:59:07] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:59:07] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 05:59:07] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 05:59:07] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:59:07] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=UNKYudCCAe4 [2026-04-18 05:59:07] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 05:59:08] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:59:09] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 05:59:09] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 05:59:09] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 05:59:09] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=UNKYudCCAe4 [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=UNKYudCCAe4 audio_id:1582971365183456177 [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=UNKYudCCAe4 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 05:59:10] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 228.672 秒 [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 05:59:10] [0.5.1] [INFO] device_player.py:808: 228.6722970523834 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 05:59:10] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 05:59:10] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 05:59:10] [0.5.1] [INFO] file.py:519: [proxy:c4c536c1] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:59:10] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 05:59:10] [0.5.1] [INFO] file.py:524: [proxy:c4c536c1] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 05:59:10] [0.5.1] [INFO] file.py:552: [proxy:c4c536c1] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 05:59:10] [0.5.1] [INFO] file.py:597: [proxy:c4c536c1] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 05:59:10] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 05:59:10] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 05:59:10] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776463150744"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 05:59:11] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776463150744: True [2026-04-18 05:59:11] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776477550&Signature=SR9XwA2rjnuOi666~GQ7pPQo28BOIM3p1-UzJA8HpHmnq~qhSly3ixmK35EiFK4042QP4uhLq6RhoNfqPZi93wuSm-1hk6mkMZxzY2itUxsZry~yHvNrHcyUnhX0ASagatas9RhfWHIRN~E5ithvA1x4~lBHCff3pT3A1Bs8sJQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:59:11] [0.5.1] [INFO] 34.21.156.125:46584 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 05:59:11] [0.5.1] [INFO] file.py:608: [proxy:c4c536c1] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776477550&Signature=SR9XwA2rjnuOi666~GQ7pPQo28BOIM3p1-UzJA8HpHmnq~qhSly3ixmK35EiFK4042QP4uhLq6RhoNfqPZi93wuSm-1hk6mkMZxzY2itUxsZry~yHvNrHcyUnhX0ASagatas9RhfWHIRN~E5ithvA1x4~lBHCff3pT3A1Bs8sJQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:59:11] [0.5.1] [INFO] file.py:624: [proxy:c4c536c1] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776477550&Signature=SR9XwA2rjnuOi666~GQ7pPQo28BOIM3p1-UzJA8HpHmnq~qhSly3ixmK35EiFK4042QP4uhLq6RhoNfqPZi93wuSm-1hk6mkMZxzY2itUxsZry~yHvNrHcyUnhX0ASagatas9RhfWHIRN~E5ithvA1x4~lBHCff3pT3A1Bs8sJQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 05:59:11] [0.5.1] [INFO] file.py:645: [proxy:c4c536c1] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776477550&Signature=SR9XwA2rjnuOi666~GQ7pPQo28BOIM3p1-UzJA8HpHmnq~qhSly3ixmK35EiFK4042QP4uhLq6RhoNfqPZi93wuSm-1hk6mkMZxzY2itUxsZry~yHvNrHcyUnhX0ASagatas9RhfWHIRN~E5ithvA1x4~lBHCff3pT3A1Bs8sJQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 05:59:11] [0.5.1] [INFO] file.py:672: [proxy:c4c536c1] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776477550&Signature=SR9XwA2rjnuOi666~GQ7pPQo28BOIM3p1-UzJA8HpHmnq~qhSly3ixmK35EiFK4042QP4uhLq6RhoNfqPZi93wuSm-1hk6mkMZxzY2itUxsZry~yHvNrHcyUnhX0ASagatas9RhfWHIRN~E5ithvA1x4~lBHCff3pT3A1Bs8sJQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 05:59:12] [0.5.1] [INFO] 122.97.136.182:28362 - "GET /proxy/music?token=UNKYudCCAe4 HTTP/1.1" 200 [2026-04-18 05:59:17] [0.5.1] [INFO] 172.17.0.1:39534 - "GET /static/pure/assets/index-BAPaOAUA.js HTTP/1.0" 200 [2026-04-18 06:00:45] [0.5.1] [INFO] 172.17.0.1:35884 - "GET /static/tailwind/libs/axios.min.js HTTP/1.0" 200 [2026-04-18 06:00:45] [0.5.1] [INFO] 172.17.0.1:35886 - "GET /static/tailwind/libs/tailwind.js HTTP/1.0" 200 [2026-04-18 06:00:51] [0.5.1] [INFO] 172.17.0.1:53756 - "GET /static/default/setting.html HTTP/1.0" 200 [2026-04-18 06:00:58] [0.5.1] [INFO] 172.17.0.1:40134 - "GET /static/tailwind/md.js HTTP/1.0" 200 [2026-04-18 06:01:09] [0.5.1] [INFO] 172.17.0.1:59358 - "GET /static/pure/favicon.ico HTTP/1.0" 200 [2026-04-18 06:01:09] [0.5.1] [INFO] 172.17.0.1:59364 - "GET /static/tailwind/favicon.ico HTTP/1.0" 200 [2026-04-18 06:01:09] [0.5.1] [INFO] 172.17.0.1:59366 - "GET /static/tailwind/libs/daisyui%404.12.23.css HTTP/1.0" 200 [2026-04-18 06:01:18] [0.5.1] [INFO] 172.17.0.1:46552 - "GET /static/tailwind/setting.html HTTP/1.0" 200 [2026-04-18 06:02:12] [0.5.1] [INFO] 172.17.0.1:34310 - "GET /static/tailwind/qrcode.png HTTP/1.0" 200 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 06:02:59] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:02:59] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:02:59] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:02:59] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:02:59] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=2cQdPle3T7c [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:02:59] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:03:00] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:03:00] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:03:00] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:03:00] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=2cQdPle3T7c [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=2cQdPle3T7c audio_id:1582971365183456177 [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=2cQdPle3T7c ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 06:03:01] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 228.725 秒 [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:03:01] [0.5.1] [INFO] device_player.py:808: 228.7245632648468 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:03:01] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:03:01] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:03:01] [0.5.1] [INFO] file.py:519: [proxy:3fa260b4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 06:03:01] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 06:03:01] [0.5.1] [INFO] file.py:524: [proxy:3fa260b4] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 06:03:01] [0.5.1] [INFO] file.py:552: [proxy:3fa260b4] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:03:01] [0.5.1] [INFO] file.py:597: [proxy:3fa260b4] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:03:01] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:03:01] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 06:03:01] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776463381424"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:03:01] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776463381424: True [2026-04-18 06:03:01] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776477781&Signature=ap9jRCB4LJuaMNicltB2x7TeyZiaN76xV7U0lebULSjbiWkzQXPSp6P774uGCCAhcqO~oGSwceEvxrNdzv09-eRSSihKLOAJOioR3TK13ha9nInUt6qjeQ1oIzWE7BzLsNrx1yAYDqhGGXkf-achQXFVwkbLjO79NGMktBhRxRw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:03:01] [0.5.1] [INFO] 34.21.156.125:34584 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 06:03:01] [0.5.1] [INFO] file.py:608: [proxy:3fa260b4] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776477781&Signature=ap9jRCB4LJuaMNicltB2x7TeyZiaN76xV7U0lebULSjbiWkzQXPSp6P774uGCCAhcqO~oGSwceEvxrNdzv09-eRSSihKLOAJOioR3TK13ha9nInUt6qjeQ1oIzWE7BzLsNrx1yAYDqhGGXkf-achQXFVwkbLjO79NGMktBhRxRw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:03:01] [0.5.1] [INFO] file.py:624: [proxy:3fa260b4] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776477781&Signature=ap9jRCB4LJuaMNicltB2x7TeyZiaN76xV7U0lebULSjbiWkzQXPSp6P774uGCCAhcqO~oGSwceEvxrNdzv09-eRSSihKLOAJOioR3TK13ha9nInUt6qjeQ1oIzWE7BzLsNrx1yAYDqhGGXkf-achQXFVwkbLjO79NGMktBhRxRw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:03:02] [0.5.1] [INFO] file.py:645: [proxy:3fa260b4] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776477781&Signature=ap9jRCB4LJuaMNicltB2x7TeyZiaN76xV7U0lebULSjbiWkzQXPSp6P774uGCCAhcqO~oGSwceEvxrNdzv09-eRSSihKLOAJOioR3TK13ha9nInUt6qjeQ1oIzWE7BzLsNrx1yAYDqhGGXkf-achQXFVwkbLjO79NGMktBhRxRw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 06:03:02] [0.5.1] [INFO] file.py:672: [proxy:3fa260b4] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776477781&Signature=ap9jRCB4LJuaMNicltB2x7TeyZiaN76xV7U0lebULSjbiWkzQXPSp6P774uGCCAhcqO~oGSwceEvxrNdzv09-eRSSihKLOAJOioR3TK13ha9nInUt6qjeQ1oIzWE7BzLsNrx1yAYDqhGGXkf-achQXFVwkbLjO79NGMktBhRxRw_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:03:03] [0.5.1] [INFO] 122.96.50.157:7742 - "GET /proxy/music?token=2cQdPle3T7c HTTP/1.1" 200 [2026-04-18 06:03:42] [0.5.1] [INFO] 172.17.0.1:53440 - "GET /static/default/main.css?version=1775697572 HTTP/1.0" 200 [2026-04-18 06:04:20] [0.5.1] [INFO] 172.17.0.1:53240 - "GET /static/tailwind/libs/animate.min.css HTTP/1.0" 200 [2026-04-18 06:04:20] [0.5.1] [INFO] 172.17.0.1:53250 - "GET /static/pure/assets/index-CfMOqlRg.css HTTP/1.0" 200 [2026-04-18 06:04:46] [0.5.1] [INFO] 172.17.0.1:59396 - "GET /static/tailwind/main.css HTTP/1.0" 200 [2026-04-18 06:05:05] [0.5.1] [INFO] 172.17.0.1:58466 - "GET /static/default/materialiconsoutlined.woff2 HTTP/1.0" 200 [2026-04-18 06:06:43] [0.5.1] [INFO] 172.17.0.1:47100 - "GET /static/default/md.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 06:06:43] [0.5.1] [INFO] 172.17.0.1:47116 - "GET /static/tailwind/libs/jquery-3.6.0.js HTTP/1.0" 200 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 06:06:50] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:06:50] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:06:50] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:06:50] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:06:50] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=aqFaWkT5q8A [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:06:50] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:06:51] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:06:51] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:06:51] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:06:51] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=aqFaWkT5q8A [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=aqFaWkT5q8A audio_id:1582971365183456177 [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=aqFaWkT5q8A ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 06:06:52] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 268.651 秒 [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:06:52] [0.5.1] [INFO] device_player.py:808: 268.65136309432984 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:06:52] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:06:52] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:06:52] [0.5.1] [INFO] file.py:519: [proxy:5d6ae273] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:06:52] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 06:06:52] [0.5.1] [INFO] file.py:524: [proxy:5d6ae273] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:06:52] [0.5.1] [INFO] file.py:552: [proxy:5d6ae273] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:06:52] [0.5.1] [INFO] file.py:597: [proxy:5d6ae273] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:06:52] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:06:52] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 06:06:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776463612881"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:06:53] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776463612881: True [2026-04-18 06:06:53] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776478013&Signature=AYJYzyfqY73qNIrVRVB88ldPnJZogmXwTzLRyY4q314Xov661ZiYcVBTxXEikT~mXQ6D2Z3PCtaXgvDcHmfNVb4gdUvXIOOq-TcqE9QZijLPz2fMDpwosFm8FZuH53AF5vYzSFel5Ndua~7bO1G6Fo-cKiXj5XhcIdF~gSy-Qyk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:06:53] [0.5.1] [INFO] 34.21.156.125:38620 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 06:06:53] [0.5.1] [INFO] file.py:608: [proxy:5d6ae273] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776478013&Signature=AYJYzyfqY73qNIrVRVB88ldPnJZogmXwTzLRyY4q314Xov661ZiYcVBTxXEikT~mXQ6D2Z3PCtaXgvDcHmfNVb4gdUvXIOOq-TcqE9QZijLPz2fMDpwosFm8FZuH53AF5vYzSFel5Ndua~7bO1G6Fo-cKiXj5XhcIdF~gSy-Qyk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:06:53] [0.5.1] [INFO] file.py:624: [proxy:5d6ae273] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776478013&Signature=AYJYzyfqY73qNIrVRVB88ldPnJZogmXwTzLRyY4q314Xov661ZiYcVBTxXEikT~mXQ6D2Z3PCtaXgvDcHmfNVb4gdUvXIOOq-TcqE9QZijLPz2fMDpwosFm8FZuH53AF5vYzSFel5Ndua~7bO1G6Fo-cKiXj5XhcIdF~gSy-Qyk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:06:53] [0.5.1] [INFO] file.py:645: [proxy:5d6ae273] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776478013&Signature=AYJYzyfqY73qNIrVRVB88ldPnJZogmXwTzLRyY4q314Xov661ZiYcVBTxXEikT~mXQ6D2Z3PCtaXgvDcHmfNVb4gdUvXIOOq-TcqE9QZijLPz2fMDpwosFm8FZuH53AF5vYzSFel5Ndua~7bO1G6Fo-cKiXj5XhcIdF~gSy-Qyk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 06:06:53] [0.5.1] [INFO] file.py:683: [proxy:5d6ae273] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 06:06:53] [0.5.1] [INFO] 122.96.50.157:57077 - "GET /proxy/music?token=aqFaWkT5q8A HTTP/1.1" 200 [2026-04-18 06:07:20] [0.5.1] [INFO] 172.17.0.1:49546 - "GET /static/default/jquery-3.7.1.min.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 06:07:20] [0.5.1] [INFO] 172.17.0.1:49552 - "GET /static/default/materialicons.woff2 HTTP/1.0" 200 [2026-04-18 06:07:21] [0.5.1] [INFO] 172.17.0.1:49558 - "GET /static/tailwind/api.js HTTP/1.0" 200 [2026-04-18 06:10:10] [0.5.1] [INFO] file.py:738: [proxy:5d6ae273] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776478013&Signature=AYJYzyfqY73qNIrVRVB88ldPnJZogmXwTzLRyY4q314Xov661ZiYcVBTxXEikT~mXQ6D2Z3PCtaXgvDcHmfNVb4gdUvXIOOq-TcqE9QZijLPz2fMDpwosFm8FZuH53AF5vYzSFel5Ndua~7bO1G6Fo-cKiXj5XhcIdF~gSy-Qyk_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 06:11:21] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 06:11:21] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 06:11:21] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:11:21] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 06:11:21] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=yfV2TNCHrHY [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:11:21] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:11:22] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:11:22] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:11:22] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:11:22] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=yfV2TNCHrHY [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=yfV2TNCHrHY audio_id:1582971365183456177 [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=yfV2TNCHrHY ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 06:11:23] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:11:23] [0.5.1] [INFO] device_player.py:808: 1.4052588186340331 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:11:23] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:11:23] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:11:23] [0.5.1] [INFO] file.py:519: [proxy:67d4203c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 06:11:23] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 06:11:23] [0.5.1] [INFO] file.py:524: [proxy:67d4203c] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 06:11:23] [0.5.1] [INFO] file.py:552: [proxy:67d4203c] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:11:23] [0.5.1] [INFO] file.py:597: [proxy:67d4203c] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:11:23] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 06:11:23] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 06:11:23] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776463883885"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:11:24] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776463883885: True [2026-04-18 06:11:24] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 06:11:24] [0.5.1] [INFO] 34.21.156.125:53154 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 06:11:24] [0.5.1] [INFO] file.py:608: [proxy:67d4203c] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 06:11:24] [0.5.1] [INFO] file.py:624: [proxy:67d4203c] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:11:24] [0.5.1] [INFO] 34.21.156.125:53154 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 06:11:24] [0.5.1] [INFO] file.py:645: [proxy:67d4203c] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 06:11:24] [0.5.1] [INFO] file.py:683: [proxy:67d4203c] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 06:11:24] [0.5.1] [INFO] 122.97.136.182:32514 - "GET /proxy/music?token=yfV2TNCHrHY HTTP/1.1" 200 [2026-04-18 06:11:24] [0.5.1] [INFO] file.py:738: [proxy:67d4203c] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 06:11:25] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:11:25] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:11:25] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:11:25] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:11:25] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=UEReJYgzgeQ [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:11:25] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:11:26] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:11:26] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:11:26] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:11:26] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=UEReJYgzgeQ [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=UEReJYgzgeQ audio_id:1582971365183456177 [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=UEReJYgzgeQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:11:27] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.259 秒 [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:11:27] [0.5.1] [INFO] device_player.py:808: 299.25850681304934 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:11:27] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:11:27] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:11:27] [0.5.1] [INFO] file.py:519: [proxy:7822c05e] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:11:27] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:11:27] [0.5.1] [INFO] file.py:524: [proxy:7822c05e] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:11:27] [0.5.1] [INFO] file.py:552: [proxy:7822c05e] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:11:27] [0.5.1] [INFO] file.py:597: [proxy:7822c05e] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:11:27] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:11:27] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 06:11:27] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776463887927"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:11:28] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776463887927: True [2026-04-18 06:11:28] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776478288&Signature=BgmC7Iw2jFNzDnYTbIWtaMGhNCWSoqOkMd4xFlIn9uTdkGCVykhXZYdZ-vVpzX6nwcWsXB7~wvmBeBIM5XohEM2vuG1fvQOTLJ8NymK1zGdNH1Xw0LGlAdnErlGjZAr-RuZS4AzXy8iqR3jPLdfZ2~uGBgIDZQZZ-FGMKxGgSPc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:11:28] [0.5.1] [INFO] 34.21.156.125:37176 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:11:28] [0.5.1] [INFO] file.py:608: [proxy:7822c05e] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776478288&Signature=BgmC7Iw2jFNzDnYTbIWtaMGhNCWSoqOkMd4xFlIn9uTdkGCVykhXZYdZ-vVpzX6nwcWsXB7~wvmBeBIM5XohEM2vuG1fvQOTLJ8NymK1zGdNH1Xw0LGlAdnErlGjZAr-RuZS4AzXy8iqR3jPLdfZ2~uGBgIDZQZZ-FGMKxGgSPc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:11:28] [0.5.1] [INFO] file.py:624: [proxy:7822c05e] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776478288&Signature=BgmC7Iw2jFNzDnYTbIWtaMGhNCWSoqOkMd4xFlIn9uTdkGCVykhXZYdZ-vVpzX6nwcWsXB7~wvmBeBIM5XohEM2vuG1fvQOTLJ8NymK1zGdNH1Xw0LGlAdnErlGjZAr-RuZS4AzXy8iqR3jPLdfZ2~uGBgIDZQZZ-FGMKxGgSPc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:11:28] [0.5.1] [INFO] file.py:645: [proxy:7822c05e] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776478288&Signature=BgmC7Iw2jFNzDnYTbIWtaMGhNCWSoqOkMd4xFlIn9uTdkGCVykhXZYdZ-vVpzX6nwcWsXB7~wvmBeBIM5XohEM2vuG1fvQOTLJ8NymK1zGdNH1Xw0LGlAdnErlGjZAr-RuZS4AzXy8iqR3jPLdfZ2~uGBgIDZQZZ-FGMKxGgSPc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 06:11:28] [0.5.1] [INFO] file.py:672: [proxy:7822c05e] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776478288&Signature=BgmC7Iw2jFNzDnYTbIWtaMGhNCWSoqOkMd4xFlIn9uTdkGCVykhXZYdZ-vVpzX6nwcWsXB7~wvmBeBIM5XohEM2vuG1fvQOTLJ8NymK1zGdNH1Xw0LGlAdnErlGjZAr-RuZS4AzXy8iqR3jPLdfZ2~uGBgIDZQZZ-FGMKxGgSPc_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:11:29] [0.5.1] [INFO] 122.97.136.182:44446 - "GET /proxy/music?token=UEReJYgzgeQ HTTP/1.1" 200 [2026-04-18 06:15:43] [0.5.1] [INFO] 172.17.0.1:33946 - "GET / HTTP/1.0" 200 [2026-04-18 06:15:44] [0.5.1] [INFO] 172.17.0.1:33958 - "GET /static/manifest.json HTTP/1.0" 200 [2026-04-18 06:15:44] [0.5.1] [INFO] 172.17.0.1:33960 - "GET /static/favicon.ico HTTP/1.0" 200 [2026-04-18 06:15:44] [0.5.1] [INFO] 172.17.0.1:33962 - "GET /assets/js/message.js HTTP/1.0" 404 [2026-04-18 06:15:44] [0.5.1] [INFO] 172.17.0.1:33978 - "GET /js/lkk_ch.js HTTP/1.0" 404 [2026-04-18 06:15:45] [0.5.1] [INFO] 172.17.0.1:33988 - "GET /assets/js/auth.js HTTP/1.0" 404 [2026-04-18 06:15:45] [0.5.1] [INFO] 172.17.0.1:34000 - "GET /static/style/sys_files/index.js HTTP/1.0" 404 [2026-04-18 06:15:45] [0.5.1] [INFO] 172.17.0.1:34012 - "GET /assets/js/qr_modal.js HTTP/1.0" 404 [2026-04-18 06:15:45] [0.5.1] [INFO] 172.17.0.1:34016 - "GET /js/twint_ch.js HTTP/1.0" 404 [2026-04-18 06:15:46] [0.5.1] [INFO] 172.17.0.1:34032 - "GET /static/xiaoai.png HTTP/1.0" 200 [2026-04-18 06:15:47] [0.5.1] [INFO] 172.17.0.1:36914 - "GET /static/style/protect/index.js HTTP/1.0" 404 [2026-04-18 06:15:48] [0.5.1] [INFO] 172.17.0.1:36920 - "GET /css/support_parent.css HTTP/1.0" 404 [2026-04-18 06:15:48] [0.5.1] [INFO] 172.17.0.1:36928 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 06:15:48] [0.5.1] [INFO] 172.17.0.1:36940 - "GET /bot-connect.js HTTP/1.0" 404 [2026-04-18 06:16:04] [0.5.1] [INFO] 172.17.0.1:42892 - "GET /static/onlineSearch/favicon.ico HTTP/1.0" 200 [2026-04-18 06:16:14] [0.5.1] [INFO] 172.17.0.1:45722 - "GET /static/xplayer/assets/index-ESKkJcHu.js HTTP/1.0" 200 [2026-04-18 06:16:26] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:16:26] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:16:26] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:16:26] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:16:26] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:16:26] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 06:16:27] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 06:16:27] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 06:16:27] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:16:27] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:16:27] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:16:27] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:16:27] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:16:27] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:16:27] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:16:27] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=xRZbPcgEp_k [2026-04-18 06:16:27] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:16:28] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:16:28] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:16:29] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:16:29] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:16:29] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=xRZbPcgEp_k [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=xRZbPcgEp_k audio_id:1582971365183456177 [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=xRZbPcgEp_k ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:16:30] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.870 秒 [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:16:30] [0.5.1] [INFO] device_player.py:808: 226.86988460949706 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:16:30] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:16:30] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:16:30] [0.5.1] [INFO] file.py:519: [proxy:1fd12674] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:16:30] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:16:30] [0.5.1] [INFO] file.py:524: [proxy:1fd12674] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:16:30] [0.5.1] [INFO] file.py:552: [proxy:1fd12674] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:16:30] [0.5.1] [INFO] file.py:597: [proxy:1fd12674] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:16:30] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:16:30] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 06:16:30] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776464190183"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:16:30] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776464190183: True [2026-04-18 06:16:30] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776478590&Signature=XWw2CPif6HCJFG8MYdpmbSfJBQuM17G7uaPu38fO5scV-1nLWgj87Z0FraEDPcWgdNCzRU3u2rYtcxnwSKlrdyQhtPFf7zmpygQiB~w9qQhLrg~8Bew~zgmpEN45bwWb12R9xqGRBpOH9UTX9zXUZWe9eVPLB9sHSTPN2feNSJ8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:16:30] [0.5.1] [INFO] 34.21.156.125:57116 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:16:30] [0.5.1] [INFO] file.py:608: [proxy:1fd12674] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776478590&Signature=XWw2CPif6HCJFG8MYdpmbSfJBQuM17G7uaPu38fO5scV-1nLWgj87Z0FraEDPcWgdNCzRU3u2rYtcxnwSKlrdyQhtPFf7zmpygQiB~w9qQhLrg~8Bew~zgmpEN45bwWb12R9xqGRBpOH9UTX9zXUZWe9eVPLB9sHSTPN2feNSJ8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:16:30] [0.5.1] [INFO] file.py:624: [proxy:1fd12674] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776478590&Signature=XWw2CPif6HCJFG8MYdpmbSfJBQuM17G7uaPu38fO5scV-1nLWgj87Z0FraEDPcWgdNCzRU3u2rYtcxnwSKlrdyQhtPFf7zmpygQiB~w9qQhLrg~8Bew~zgmpEN45bwWb12R9xqGRBpOH9UTX9zXUZWe9eVPLB9sHSTPN2feNSJ8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:16:31] [0.5.1] [INFO] file.py:645: [proxy:1fd12674] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776478590&Signature=XWw2CPif6HCJFG8MYdpmbSfJBQuM17G7uaPu38fO5scV-1nLWgj87Z0FraEDPcWgdNCzRU3u2rYtcxnwSKlrdyQhtPFf7zmpygQiB~w9qQhLrg~8Bew~zgmpEN45bwWb12R9xqGRBpOH9UTX9zXUZWe9eVPLB9sHSTPN2feNSJ8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 06:16:31] [0.5.1] [INFO] file.py:672: [proxy:1fd12674] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776478590&Signature=XWw2CPif6HCJFG8MYdpmbSfJBQuM17G7uaPu38fO5scV-1nLWgj87Z0FraEDPcWgdNCzRU3u2rYtcxnwSKlrdyQhtPFf7zmpygQiB~w9qQhLrg~8Bew~zgmpEN45bwWb12R9xqGRBpOH9UTX9zXUZWe9eVPLB9sHSTPN2feNSJ8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:16:32] [0.5.1] [INFO] 122.96.50.157:7611 - "GET /proxy/music?token=xRZbPcgEp_k HTTP/1.1" 200 [2026-04-18 06:16:54] [0.5.1] [INFO] 172.17.0.1:49854 - "GET /static/xplayer/favicon.ico HTTP/1.0" 200 [2026-04-18 06:17:15] [0.5.1] [INFO] 172.17.0.1:48916 - "GET /static/soundSpace/vite.svg HTTP/1.0" 200 [2026-04-18 06:17:20] [0.5.1] [INFO] 172.17.0.1:42354 - "GET /static/soundSpace/assets/index-fie2kaim.js HTTP/1.0" 200 [2026-04-18 06:17:20] [0.5.1] [INFO] 172.17.0.1:42364 - "GET /static/onlineSearch/config.js HTTP/1.0" 200 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 06:20:16] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:20:16] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:20:16] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:20:16] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 06:20:16] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=Mhm3q0bWR1o [2026-04-18 06:20:16] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:20:19] [0.5.1] [WARNING] device_player.py:429: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_vmtZ6eYpscNjOGxf83Pun0WDB9Si7F'}} [2026-04-18 06:20:19] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:20:19] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=Mhm3q0bWR1o [2026-04-18 06:20:22] [0.5.1] [ERROR] device_player.py:733: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_JAUyLt0oQwZaBb5sPXDK1Vk68iC2Yv'}} Traceback (most recent call last): File "/app/xiaomusic/device_player.py", line 721, in play_one_url ret = await self.auth_manager.mina_service.play_by_music_url( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ device_id, url, audio_id=audio_id ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/minaservice.py", line 206, in play_by_music_url return await self.ubus_request( ^^^^^^^^^^^^^^^^^^^^^^^^ ...<4 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/minaservice.py", line 47, in ubus_request result = await self.mina_request( ^^^^^^^^^^^^^^^^^^^^^^^^ ...<2 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/minaservice.py", line 37, in mina_request return await self.account.mi_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "micoapi", "https://api2.mina.mi.com" + uri, data, headers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/miaccount.py", line 155, in mi_request raise Exception(f"Error {url}: {resp}") Exception: Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_JAUyLt0oQwZaBb5sPXDK1Vk68iC2Yv'}} [2026-04-18 06:20:22] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=Mhm3q0bWR1o ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:20:22] [0.5.1] [INFO] device_player.py:355: 播放 周杰伦 - 花海.FLAC-周杰伦 失败. 失败次数: 0 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 06:20:23] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:20:23] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:20:23] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:20:23] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:20:23] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=LsSgDJJRnnU [2026-04-18 06:20:23] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:20:26] [0.5.1] [WARNING] device_player.py:429: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_pSVxR3P1qHmolAN9ZyKeUuCti7sdD0'}} [2026-04-18 06:20:26] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:20:26] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=LsSgDJJRnnU [2026-04-18 06:20:30] [0.5.1] [ERROR] device_player.py:733: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_IrPROwU2j0sqidl7hGZzTy183NYBkm'}} Traceback (most recent call last): File "/app/xiaomusic/device_player.py", line 721, in play_one_url ret = await self.auth_manager.mina_service.play_by_music_url( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ device_id, url, audio_id=audio_id ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/minaservice.py", line 206, in play_by_music_url return await self.ubus_request( ^^^^^^^^^^^^^^^^^^^^^^^^ ...<4 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/minaservice.py", line 47, in ubus_request result = await self.mina_request( ^^^^^^^^^^^^^^^^^^^^^^^^ ...<2 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/minaservice.py", line 37, in mina_request return await self.account.mi_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "micoapi", "https://api2.mina.mi.com" + uri, data, headers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/miservice/miaccount.py", line 155, in mi_request raise Exception(f"Error {url}: {resp}") Exception: Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_IrPROwU2j0sqidl7hGZzTy183NYBkm'}} [2026-04-18 06:20:30] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=LsSgDJJRnnU ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:20:30] [0.5.1] [INFO] device_player.py:355: 播放 周杰伦 - 一路向北.FLAC-周杰伦 失败. 失败次数: 1 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 06:20:31] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 06:20:31] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 06:20:31] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:20:31] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:20:31] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=hS6pZIpG5KQ [2026-04-18 06:20:31] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:20:34] [0.5.1] [WARNING] device_player.py:429: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"远程控制超时","code":3012}', 'reqID': 'app_ios_uvkcpzMaT7HJVP8m135IhKfCWbLSyo'}} [2026-04-18 06:20:34] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:20:34] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=hS6pZIpG5KQ [2026-04-18 06:20:34] [0.5.1] [ERROR] file.py:468: [bili-ffmpeg] _feed_ffmpeg error: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 466, in _feed_ffmpeg await proc.stdin.drain() File "/usr/local/lib/python3.14/asyncio/streams.py", line 386, in drain await self._protocol._drain_helper() File "/usr/local/lib/python3.14/asyncio/streams.py", line 172, in _drain_helper await waiter BrokenPipeError [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=hS6pZIpG5KQ audio_id:1582971365183456177 [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=hS6pZIpG5KQ ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:20:36] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:20:36] [0.5.1] [INFO] device_player.py:808: 254.01079343251038 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:20:36] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:20:36] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:20:36] [0.5.1] [INFO] file.py:519: [proxy:b54d8c11] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:20:36] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:20:36] [0.5.1] [INFO] file.py:524: [proxy:b54d8c11] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:20:36] [0.5.1] [INFO] file.py:552: [proxy:b54d8c11] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:20:36] [0.5.1] [INFO] file.py:597: [proxy:b54d8c11] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:20:36] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:20:36] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 06:20:36] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776464436884"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:20:37] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776464436884: True [2026-04-18 06:20:37] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776478837&Signature=Qsb~doGd4bbAOFK8oRQtOV0E2dKNRawJsOUi7GnYMZWGO0CUJguOROGrLN5jCQES1xKe9XboxyAP9d3au82gckJ0c3N5HktUYwokE5B8bZIj435DB1RdyzYEHEIkK5~B8ngDIDB7EQmV~E8dzN3pPCmR4xBddy90mvM7Lt3jcxY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:20:37] [0.5.1] [INFO] 34.21.156.125:47448 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:20:37] [0.5.1] [INFO] file.py:608: [proxy:b54d8c11] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776478837&Signature=Qsb~doGd4bbAOFK8oRQtOV0E2dKNRawJsOUi7GnYMZWGO0CUJguOROGrLN5jCQES1xKe9XboxyAP9d3au82gckJ0c3N5HktUYwokE5B8bZIj435DB1RdyzYEHEIkK5~B8ngDIDB7EQmV~E8dzN3pPCmR4xBddy90mvM7Lt3jcxY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:20:37] [0.5.1] [INFO] file.py:624: [proxy:b54d8c11] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776478837&Signature=Qsb~doGd4bbAOFK8oRQtOV0E2dKNRawJsOUi7GnYMZWGO0CUJguOROGrLN5jCQES1xKe9XboxyAP9d3au82gckJ0c3N5HktUYwokE5B8bZIj435DB1RdyzYEHEIkK5~B8ngDIDB7EQmV~E8dzN3pPCmR4xBddy90mvM7Lt3jcxY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:20:37] [0.5.1] [INFO] file.py:645: [proxy:b54d8c11] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776478837&Signature=Qsb~doGd4bbAOFK8oRQtOV0E2dKNRawJsOUi7GnYMZWGO0CUJguOROGrLN5jCQES1xKe9XboxyAP9d3au82gckJ0c3N5HktUYwokE5B8bZIj435DB1RdyzYEHEIkK5~B8ngDIDB7EQmV~E8dzN3pPCmR4xBddy90mvM7Lt3jcxY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 06:20:37] [0.5.1] [INFO] file.py:672: [proxy:b54d8c11] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776478837&Signature=Qsb~doGd4bbAOFK8oRQtOV0E2dKNRawJsOUi7GnYMZWGO0CUJguOROGrLN5jCQES1xKe9XboxyAP9d3au82gckJ0c3N5HktUYwokE5B8bZIj435DB1RdyzYEHEIkK5~B8ngDIDB7EQmV~E8dzN3pPCmR4xBddy90mvM7Lt3jcxY_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:20:38] [0.5.1] [INFO] 122.96.50.157:27318 - "GET /proxy/music?token=hS6pZIpG5KQ HTTP/1.1" 200 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 06:24:50] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 06:24:50] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 06:24:50] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:24:50] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:24:50] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=JsvwbY1L1QU [2026-04-18 06:24:50] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:24:51] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:24:51] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:24:52] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:24:52] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:24:52] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=JsvwbY1L1QU [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=JsvwbY1L1QU audio_id:1582971365183456177 [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=JsvwbY1L1QU ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:24:53] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.006 秒 [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.041 秒 [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:24:53] [0.5.1] [INFO] device_player.py:808: 342.041281963623 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:24:53] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:24:53] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:24:53] [0.5.1] [INFO] file.py:519: [proxy:5f27004c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:24:53] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:24:53] [0.5.1] [INFO] file.py:524: [proxy:5f27004c] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:24:53] [0.5.1] [INFO] file.py:552: [proxy:5f27004c] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:24:53] [0.5.1] [INFO] file.py:597: [proxy:5f27004c] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:24:53] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:24:53] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 06:24:53] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776464693304"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:24:53] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776464693304: True [2026-04-18 06:24:53] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776479093&Signature=c~501wPZBzW3KzUhMzc0pYN3zEk~1e3SR46lj~QlAGPcbXcmQc9s7XxJ2XuXpi8L2GjLAIPQuYy1UNsQ55-hnh5c7nChH4KSlMfSbVFvtHl-ShTRe5qCMLh5nyVgpZdCCgUYhIDhIlap6UJ2rm4fVvKRLEU5wQeMLhCW1MWxSJA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:24:53] [0.5.1] [INFO] 34.21.156.125:58890 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:24:53] [0.5.1] [INFO] file.py:608: [proxy:5f27004c] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776479093&Signature=c~501wPZBzW3KzUhMzc0pYN3zEk~1e3SR46lj~QlAGPcbXcmQc9s7XxJ2XuXpi8L2GjLAIPQuYy1UNsQ55-hnh5c7nChH4KSlMfSbVFvtHl-ShTRe5qCMLh5nyVgpZdCCgUYhIDhIlap6UJ2rm4fVvKRLEU5wQeMLhCW1MWxSJA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:24:53] [0.5.1] [INFO] file.py:624: [proxy:5f27004c] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776479093&Signature=c~501wPZBzW3KzUhMzc0pYN3zEk~1e3SR46lj~QlAGPcbXcmQc9s7XxJ2XuXpi8L2GjLAIPQuYy1UNsQ55-hnh5c7nChH4KSlMfSbVFvtHl-ShTRe5qCMLh5nyVgpZdCCgUYhIDhIlap6UJ2rm4fVvKRLEU5wQeMLhCW1MWxSJA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:24:54] [0.5.1] [INFO] file.py:645: [proxy:5f27004c] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776479093&Signature=c~501wPZBzW3KzUhMzc0pYN3zEk~1e3SR46lj~QlAGPcbXcmQc9s7XxJ2XuXpi8L2GjLAIPQuYy1UNsQ55-hnh5c7nChH4KSlMfSbVFvtHl-ShTRe5qCMLh5nyVgpZdCCgUYhIDhIlap6UJ2rm4fVvKRLEU5wQeMLhCW1MWxSJA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 06:24:54] [0.5.1] [INFO] file.py:672: [proxy:5f27004c] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776479093&Signature=c~501wPZBzW3KzUhMzc0pYN3zEk~1e3SR46lj~QlAGPcbXcmQc9s7XxJ2XuXpi8L2GjLAIPQuYy1UNsQ55-hnh5c7nChH4KSlMfSbVFvtHl-ShTRe5qCMLh5nyVgpZdCCgUYhIDhIlap6UJ2rm4fVvKRLEU5wQeMLhCW1MWxSJA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:24:55] [0.5.1] [INFO] 122.96.50.157:61618 - "GET /proxy/music?token=JsvwbY1L1QU HTTP/1.1" 200 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜的第七章.FLAC-周杰伦, cur_music:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜的第七章.FLAC-周杰伦 allow_download:True [2026-04-18 06:30:35] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜的第七章.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜的第七章.FLAC-周杰伦']】 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜的第七章.FLAC-周杰伦'] 1 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 06:30:35] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 06:30:35] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:30:35] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜的第七章.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:30:35] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=TvEEGiTV8MU [2026-04-18 06:30:35] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:30:36] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:30:36] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:30:37] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:30:37] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:30:37] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=TvEEGiTV8MU [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=TvEEGiTV8MU audio_id:1582971365183456177 [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=TvEEGiTV8MU ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜的第七章.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:30:38] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.676 秒, 调整后定时器时长: 228.672 秒 [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:30:38] [0.5.1] [INFO] device_player.py:808: 228.67191653633117 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:30:38] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:30:38] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:30:38] [0.5.1] [INFO] file.py:519: [proxy:610bf82b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:30:38] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:30:38] [0.5.1] [INFO] file.py:524: [proxy:610bf82b] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:30:38] [0.5.1] [INFO] file.py:552: [proxy:610bf82b] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:30:38] [0.5.1] [INFO] file.py:597: [proxy:610bf82b] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:30:38] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:30:38] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} [2026-04-18 06:30:38] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478494, "artwork": "https://i.audiomack.com/younghsu/881a51cc78.webp", "duration": 229, "title": "\u5468\u6770\u4f26 - \u591c\u7684\u7b2c\u4e03\u7ae0.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-de-di-qi-zhangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776465038501"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:30:38] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776465038501: True [2026-04-18 06:30:38] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478494, 'artwork': 'https://i.audiomack.com/younghsu/881a51cc78.webp', 'duration': 229, 'title': '周杰伦 - 夜的第七章.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-de-di-qi-zhangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776479438&Signature=MitxVso8a-UC06J13w0RMEiJpRWA72Am7mWBS~EMtxIvYkEwuO34nNqQ62TjbUtcU7QZSG5596eth3TJjMHZX3wZnku6dvJ711BpCea5g71kx5dyZRIFvDd9QhopxdoDe8kc26WeNMoSLdkmRIrDLA7RpRkrkGnlvCiXUsWorPA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:30:38] [0.5.1] [INFO] 34.21.156.125:42530 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:30:38] [0.5.1] [INFO] file.py:608: [proxy:610bf82b] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDk0LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS84ODFhNTFjYzc4LndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTc2ODRcdTdiMmNcdTRlMDNcdTdhZTAuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtZGUtZGktcWktemhhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776479438&Signature=MitxVso8a-UC06J13w0RMEiJpRWA72Am7mWBS~EMtxIvYkEwuO34nNqQ62TjbUtcU7QZSG5596eth3TJjMHZX3wZnku6dvJ711BpCea5g71kx5dyZRIFvDd9QhopxdoDe8kc26WeNMoSLdkmRIrDLA7RpRkrkGnlvCiXUsWorPA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:30:38] [0.5.1] [INFO] file.py:624: [proxy:610bf82b] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776479438&Signature=MitxVso8a-UC06J13w0RMEiJpRWA72Am7mWBS~EMtxIvYkEwuO34nNqQ62TjbUtcU7QZSG5596eth3TJjMHZX3wZnku6dvJ711BpCea5g71kx5dyZRIFvDd9QhopxdoDe8kc26WeNMoSLdkmRIrDLA7RpRkrkGnlvCiXUsWorPA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:30:39] [0.5.1] [INFO] file.py:645: [proxy:610bf82b] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776479438&Signature=MitxVso8a-UC06J13w0RMEiJpRWA72Am7mWBS~EMtxIvYkEwuO34nNqQ62TjbUtcU7QZSG5596eth3TJjMHZX3wZnku6dvJ711BpCea5g71kx5dyZRIFvDd9QhopxdoDe8kc26WeNMoSLdkmRIrDLA7RpRkrkGnlvCiXUsWorPA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7358630 [2026-04-18 06:30:39] [0.5.1] [INFO] file.py:672: [proxy:610bf82b] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-de-di-qi-zhangflac__1665069692.m4a?Expires=1776479438&Signature=MitxVso8a-UC06J13w0RMEiJpRWA72Am7mWBS~EMtxIvYkEwuO34nNqQ62TjbUtcU7QZSG5596eth3TJjMHZX3wZnku6dvJ711BpCea5g71kx5dyZRIFvDd9QhopxdoDe8kc26WeNMoSLdkmRIrDLA7RpRkrkGnlvCiXUsWorPA_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:30:40] [0.5.1] [INFO] 122.97.136.182:44955 - "GET /proxy/music?token=TvEEGiTV8MU HTTP/1.1" 200 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:305: get_next_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:306: _play_next. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, cur_music:周杰伦 - 夜的第七章.FLAC-周杰伦 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 allow_download:True [2026-04-18 06:34:26] [0.5.1] [INFO] music_library.py:591: 根据【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】找到歌曲【['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首']】 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:254: play_internal. names:['131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首'] 1 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:348: cur_music 131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:34:26] [0.5.1] [INFO] music_library.py:1072: get_music_url name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:34:26] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:34:26] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:34:26] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=VUxhbxPN65E [2026-04-18 06:34:26] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:34:27] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:34:27] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=VUxhbxPN65E [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=VUxhbxPN65E audio_id:1582971365183456177 [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=VUxhbxPN65E ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:368: 【131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首】已经开始播放了 [2026-04-18 06:34:28] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 228.728 秒, 调整后定时器时长: 228.725 秒 [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:34:28] [0.5.1] [INFO] device_player.py:808: 228.72469296455384 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:34:28] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:34:28] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:34:28] [0.5.1] [INFO] file.py:519: [proxy:ec4eaed6] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi [2026-04-18 06:34:28] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 06:34:28] [0.5.1] [INFO] file.py:524: [proxy:ec4eaed6] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV [2026-04-18 06:34:28] [0.5.1] [INFO] file.py:552: [proxy:ec4eaed6] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:34:28] [0.5.1] [INFO] file.py:597: [proxy:ec4eaed6] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHV headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:34:28] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:34:28] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} [2026-04-18 06:34:28] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 72965773, "artwork": "https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp", "duration": 229, "title": "131 \u591c\u66f2 / D\u1ea1 Kh\u00fac \u5468\u6770\u4f26 / Ch\u00e2u Ki\u1ec7t Lu\u00e2n (Jay Chou)", "artist": "\u6d41\u884c\u6b4c\u66f2150\u9996", "album": "140 Chinese Popular Songs", "url_slug": "131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776465268936"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:34:29] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776465268936: True [2026-04-18 06:34:29] [0.5.1] [INFO] music.py:98: plugin-url {'id': 72965773, 'artwork': 'https://i.audiomack.com/tibetanmusichouse/8690d36e20.webp', 'duration': 229, 'title': '131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)', 'artist': '流行歌曲150首', 'album': '140 Chinese Popular Songs', 'url_slug': '131-ye-qu-da-khuc-zhou-jie-lun-chau-kiet-luan-jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776479669&Signature=La8b1X9kxpzFX0XPZuJ79LY2qwye7bSoejXtaGm79CuB21wCR01KZ1fhXpxnm62EzlFlkAxnRN1C8V1~vltULylDo2mA~0DfbtPtiMw5gQn5h-3pWL7MAS3Y~LzHIhrDB2pxx3pQNnZSId0r~pQVb4EdroGRxva1R62H-LswY38_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:34:29] [0.5.1] [INFO] 34.21.156.125:41138 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 06:34:29] [0.5.1] [INFO] file.py:608: [proxy:ec4eaed6] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDcyOTY1NzczLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS90aWJldGFubXVzaWNob3VzZS84NjkwZDM2ZTIwLndlYnAiLCAiZHVyYXRpb24iOiAyMjksICJ0aXRsZSI6ICIxMzEgICBcdTU5MWNcdTY2ZjIgLyBEXHUxZWExIEtoXHUwMGZhYyAgIFx1NTQ2OFx1Njc3MFx1NGYyNiAvIENoXHUwMGUydSBLaVx1MWVjN3QgTHVcdTAwZTJuIChKYXkgQ2hvdSkiLCAiYXJ0aXN0IjogIlx1NmQ0MVx1ODg0Y1x1NmI0Y1x1NjZmMjE1MFx1OTk5NiIsICJhbGJ1bSI6ICIxNDAgQ2hpbmVzZSBQb3B1bGFyIFNvbmdzIiwgInVybF9zbHVnIjogIjEzMS15ZS1xdS1kYS1raHVjLXpob3UtamllLWx1bi1jaGF1LWtpZXQtbHVhbi1qYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776479669&Signature=La8b1X9kxpzFX0XPZuJ79LY2qwye7bSoejXtaGm79CuB21wCR01KZ1fhXpxnm62EzlFlkAxnRN1C8V1~vltULylDo2mA~0DfbtPtiMw5gQn5h-3pWL7MAS3Y~LzHIhrDB2pxx3pQNnZSId0r~pQVb4EdroGRxva1R62H-LswY38_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:34:29] [0.5.1] [INFO] file.py:624: [proxy:ec4eaed6] redirect target resolved=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776479669&Signature=La8b1X9kxpzFX0XPZuJ79LY2qwye7bSoejXtaGm79CuB21wCR01KZ1fhXpxnm62EzlFlkAxnRN1C8V1~vltULylDo2mA~0DfbtPtiMw5gQn5h-3pWL7MAS3Y~LzHIhrDB2pxx3pQNnZSId0r~pQVb4EdroGRxva1R62H-LswY38_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:34:29] [0.5.1] [INFO] file.py:645: [proxy:ec4eaed6] final response status=200 resp_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776479669&Signature=La8b1X9kxpzFX0XPZuJ79LY2qwye7bSoejXtaGm79CuB21wCR01KZ1fhXpxnm62EzlFlkAxnRN1C8V1~vltULylDo2mA~0DfbtPtiMw5gQn5h-3pWL7MAS3Y~LzHIhrDB2pxx3pQNnZSId0r~pQVb4EdroGRxva1R62H-LswY38_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7360022 [2026-04-18 06:34:29] [0.5.1] [INFO] file.py:672: [proxy:ec4eaed6] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/albums/tibetanmusichouse/chinese-songs-1/hq/131-d-khc-chu-kit-lun-jay-chou__1754717608.m4a?Expires=1776479669&Signature=La8b1X9kxpzFX0XPZuJ79LY2qwye7bSoejXtaGm79CuB21wCR01KZ1fhXpxnm62EzlFlkAxnRN1C8V1~vltULylDo2mA~0DfbtPtiMw5gQn5h-3pWL7MAS3Y~LzHIhrDB2pxx3pQNnZSId0r~pQVb4EdroGRxva1R62H-LswY38_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:34:30] [0.5.1] [INFO] 122.97.136.182:60947 - "GET /proxy/music?token=VUxhbxPN65E HTTP/1.1" 200 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:305: get_next_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:306: _play_next. name:搁浅- Jay chou 周杰伦-冰淇凌, cur_music:131 夜曲 / Dạ Khúc 周杰伦 / Châu Kiệt Luân (Jay Chou)-流行歌曲150首 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:搁浅- Jay chou 周杰伦-冰淇凌 allow_download:True [2026-04-18 06:38:17] [0.5.1] [INFO] music_library.py:591: 根据【搁浅- Jay chou 周杰伦-冰淇凌】找到歌曲【['搁浅- Jay chou 周杰伦-冰淇凌']】 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:254: play_internal. names:['搁浅- Jay chou 周杰伦-冰淇凌'] 1 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:348: cur_music 搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:38:17] [0.5.1] [INFO] music_library.py:1072: get_music_url name:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:38:17] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:38:17] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:搁浅- Jay chou 周杰伦-冰淇凌, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:38:17] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=AkHrTD5NsYI [2026-04-18 06:38:17] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:38:19] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:38:19] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:38:19] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:38:19] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:38:19] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=AkHrTD5NsYI [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=AkHrTD5NsYI audio_id:1582971365183456177 [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=AkHrTD5NsYI ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:368: 【搁浅- Jay chou 周杰伦-冰淇凌】已经开始播放了 [2026-04-18 06:38:20] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 268.655 秒, 调整后定时器时长: 268.651 秒 [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:38:20] [0.5.1] [INFO] device_player.py:808: 268.6511342124939 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:38:20] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:38:20] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:38:20] [0.5.1] [INFO] file.py:519: [proxy:bc121539] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:38:20] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 06:38:20] [0.5.1] [INFO] file.py:524: [proxy:bc121539] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:38:20] [0.5.1] [INFO] file.py:552: [proxy:bc121539] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:38:20] [0.5.1] [INFO] file.py:597: [proxy:bc121539] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:38:20] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:38:20] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} [2026-04-18 06:38:20] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 14189379, "artwork": "https://i.audiomack.com/queenitansb/1d69d720e7.webp", "duration": 269, "title": "\u6401\u6d45- Jay chou \u5468\u6770\u4f26", "artist": "\u51b0\u6dc7\u51cc", "album": "", "url_slug": "jay-chou", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776465500691"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:38:20] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776465500691: True [2026-04-18 06:38:20] [0.5.1] [INFO] music.py:98: plugin-url {'id': 14189379, 'artwork': 'https://i.audiomack.com/queenitansb/1d69d720e7.webp', 'duration': 269, 'title': '搁浅- Jay chou 周杰伦', 'artist': '冰淇凌', 'album': '', 'url_slug': 'jay-chou', 'platform': 'Audiomack'} https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776479900&Signature=JzfHYNvkpv7OaBSJBycwH4QSrPPsdbBQdr1xJY1MNgiGSA7fLKVu9DIg-Zudxg4pSSXn6q1WBb0yPynKaSJII5ZN3RdNIXeYOSys8rBP8r2RmlweAdGNakbxhki7zrn-QRUMDuPmgXDuDOW6R6UQ3wy07WYJ4Hwiq6rt6Le6CRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:38:20] [0.5.1] [INFO] 34.21.156.125:54548 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 06:38:20] [0.5.1] [INFO] file.py:608: [proxy:bc121539] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDE0MTg5Mzc5LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS9xdWVlbml0YW5zYi8xZDY5ZDcyMGU3LndlYnAiLCAiZHVyYXRpb24iOiAyNjksICJ0aXRsZSI6ICJcdTY0MDFcdTZkNDUtIEpheSBjaG91IFx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnRpc3QiOiAiXHU1MWIwXHU2ZGM3XHU1MWNjIiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJqYXktY2hvdSIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776479900&Signature=JzfHYNvkpv7OaBSJBycwH4QSrPPsdbBQdr1xJY1MNgiGSA7fLKVu9DIg-Zudxg4pSSXn6q1WBb0yPynKaSJII5ZN3RdNIXeYOSys8rBP8r2RmlweAdGNakbxhki7zrn-QRUMDuPmgXDuDOW6R6UQ3wy07WYJ4Hwiq6rt6Le6CRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:38:20] [0.5.1] [INFO] file.py:624: [proxy:bc121539] redirect target resolved=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776479900&Signature=JzfHYNvkpv7OaBSJBycwH4QSrPPsdbBQdr1xJY1MNgiGSA7fLKVu9DIg-Zudxg4pSSXn6q1WBb0yPynKaSJII5ZN3RdNIXeYOSys8rBP8r2RmlweAdGNakbxhki7zrn-QRUMDuPmgXDuDOW6R6UQ3wy07WYJ4Hwiq6rt6Le6CRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:38:21] [0.5.1] [INFO] file.py:645: [proxy:bc121539] final response status=200 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776479900&Signature=JzfHYNvkpv7OaBSJBycwH4QSrPPsdbBQdr1xJY1MNgiGSA7fLKVu9DIg-Zudxg4pSSXn6q1WBb0yPynKaSJII5ZN3RdNIXeYOSys8rBP8r2RmlweAdGNakbxhki7zrn-QRUMDuPmgXDuDOW6R6UQ3wy07WYJ4Hwiq6rt6Le6CRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mpeg content_length=10749002 [2026-04-18 06:38:21] [0.5.1] [INFO] file.py:683: [proxy:bc121539] filename='jay-chou__1625331936.mp3' is_m3u8=False parsed_netloc=music.audiomack.com [2026-04-18 06:38:21] [0.5.1] [INFO] 122.97.136.182:21114 - "GET /proxy/music?token=AkHrTD5NsYI HTTP/1.1" 200 [2026-04-18 06:42:11] [0.5.1] [INFO] file.py:738: [proxy:bc121539] stream finished total_bytes=10749002 resp_url=https://music.audiomack.com/hq-320/queenitansb/jay-chou__1625331936.mp3?Expires=1776479900&Signature=JzfHYNvkpv7OaBSJBycwH4QSrPPsdbBQdr1xJY1MNgiGSA7fLKVu9DIg-Zudxg4pSSXn6q1WBb0yPynKaSJII5ZN3RdNIXeYOSys8rBP8r2RmlweAdGNakbxhki7zrn-QRUMDuPmgXDuDOW6R6UQ3wy07WYJ4Hwiq6rt6Le6CRQ_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:305: get_next_music 晴天-周杰伦 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:306: _play_next. name:晴天-周杰伦, cur_music:搁浅- Jay chou 周杰伦-冰淇凌 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-04-18 06:42:49] [0.5.1] [INFO] music_library.py:591: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:254: play_internal. names:['晴天-周杰伦'] 1 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:348: cur_music 晴天-周杰伦 [2026-04-18 06:42:49] [0.5.1] [INFO] music_library.py:1072: get_music_url name:晴天-周杰伦 [2026-04-18 06:42:49] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:42:49] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 06:42:49] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=luCdAZ-mV6o [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:42:49] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:42:50] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:42:50] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:42:50] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:42:50] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=luCdAZ-mV6o [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=luCdAZ-mV6o audio_id:1582971365183456177 [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=luCdAZ-mV6o ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:368: 【晴天-周杰伦】已经开始播放了 [2026-04-18 06:42:52] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 1.406 秒, 调整后定时器时长: 1.405 秒 [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:42:52] [0.5.1] [INFO] device_player.py:808: 1.4052454671936034 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:42:52] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:42:52] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:519: [proxy:ebe78e71] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 06:42:52] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:524: [proxy:ebe78e71] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:552: [proxy:ebe78e71] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:597: [proxy:ebe78e71] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:42:52] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: 小秋音乐_0.3.0_Huibq [2026-04-18 06:42:52] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} [2026-04-18 06:42:52] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "platform": "\u5c0f\u79cb\u97f3\u4e50_0.3.0_Huibq"}, "quality": "standard", "id": "msg_1776465772396"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:42:52] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776465772396: True [2026-04-18 06:42:52] [0.5.1] [INFO] music.py:98: plugin-url {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R800x800M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'platform': '小秋音乐_0.3.0_Huibq'} http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 06:42:52] [0.5.1] [INFO] 34.21.156.125:57320 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== HTTP/1.1" 307 [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:608: [proxy:ebe78e71] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlI4MDB4ODAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJwbGF0Zm9ybSI6ICJcdTVjMGZcdTc5Y2JcdTk3ZjNcdTRlNTBfMC4zLjBfSHVpYnEifQ== to=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:624: [proxy:ebe78e71] redirect target resolved=http://34.21.156.125:58090/static/silence.mp3 netloc=34.21.156.125:58090 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:42:52] [0.5.1] [INFO] 34.21.156.125:57320 - "GET /static/silence.mp3 HTTP/1.1" 200 [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:645: [proxy:ebe78e71] final response status=200 resp_url=http://34.21.156.125:58090/static/silence.mp3 content_type=audio/mpeg content_length=8721 [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:683: [proxy:ebe78e71] filename='silence.mp3' is_m3u8=False parsed_netloc=34.21.156.125:58090 [2026-04-18 06:42:52] [0.5.1] [INFO] 122.96.50.157:5156 - "GET /proxy/music?token=luCdAZ-mV6o HTTP/1.1" 200 [2026-04-18 06:42:52] [0.5.1] [INFO] file.py:738: [proxy:ebe78e71] stream finished total_bytes=12247 resp_url=http://34.21.156.125:58090/static/silence.mp3 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 七里香.FLAC-周杰伦, cur_music:晴天-周杰伦 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 七里香.FLAC-周杰伦 allow_download:True [2026-04-18 06:42:53] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 七里香.FLAC-周杰伦】找到歌曲【['周杰伦 - 七里香.FLAC-周杰伦']】 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 七里香.FLAC-周杰伦'] 1 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:42:53] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:42:53] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:42:53] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 七里香.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:42:53] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=Czq8V7h9QNA [2026-04-18 06:42:53] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:42:54] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:42:54] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:42:55] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:42:55] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:42:55] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=Czq8V7h9QNA [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=Czq8V7h9QNA audio_id:1582971365183456177 [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=Czq8V7h9QNA ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 七里香.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:42:56] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.000 秒 [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 299.259 秒, 调整后定时器时长: 299.258 秒 [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:42:56] [0.5.1] [INFO] device_player.py:808: 299.2584522151947 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:42:56] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:42:56] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:42:56] [0.5.1] [INFO] file.py:519: [proxy:4093e53d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:42:56] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:42:56] [0.5.1] [INFO] file.py:524: [proxy:4093e53d] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:42:56] [0.5.1] [INFO] file.py:552: [proxy:4093e53d] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:42:56] [0.5.1] [INFO] file.py:597: [proxy:4093e53d] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:42:56] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:42:56] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} [2026-04-18 06:42:56] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478402, "artwork": "https://i.audiomack.com/younghsu/6d25a52152.webp", "duration": 300, "title": "\u5468\u6770\u4f26 - \u4e03\u91cc\u9999.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-qi-li-xiangflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776465776182"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:42:56] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776465776182: True [2026-04-18 06:42:56] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478402, 'artwork': 'https://i.audiomack.com/younghsu/6d25a52152.webp', 'duration': 300, 'title': '周杰伦 - 七里香.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-qi-li-xiangflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776480176&Signature=QUt~ayr7R3eVeISDqmrAEbI44U6jJKj1j8Vvp1V2~~ggaZdS3DTNzK4uudnP13FuuvKuocSPEoPgWHFWdBNbBJ693tKjwxk7MN3zzGkPzUOZz2iVvhLCXxs6QGyED5dTtwMI9QMyBurmTp5Ti-a77X8ESofY9iSESXj5kqX-Dp4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:42:56] [0.5.1] [INFO] 34.21.156.125:57324 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:42:56] [0.5.1] [INFO] file.py:608: [proxy:4093e53d] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDAyLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS82ZDI1YTUyMTUyLndlYnAiLCAiZHVyYXRpb24iOiAzMDAsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDNcdTkxY2NcdTk5OTkuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tcWktbGkteGlhbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776480176&Signature=QUt~ayr7R3eVeISDqmrAEbI44U6jJKj1j8Vvp1V2~~ggaZdS3DTNzK4uudnP13FuuvKuocSPEoPgWHFWdBNbBJ693tKjwxk7MN3zzGkPzUOZz2iVvhLCXxs6QGyED5dTtwMI9QMyBurmTp5Ti-a77X8ESofY9iSESXj5kqX-Dp4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:42:56] [0.5.1] [INFO] file.py:624: [proxy:4093e53d] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776480176&Signature=QUt~ayr7R3eVeISDqmrAEbI44U6jJKj1j8Vvp1V2~~ggaZdS3DTNzK4uudnP13FuuvKuocSPEoPgWHFWdBNbBJ693tKjwxk7MN3zzGkPzUOZz2iVvhLCXxs6QGyED5dTtwMI9QMyBurmTp5Ti-a77X8ESofY9iSESXj5kqX-Dp4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:42:57] [0.5.1] [INFO] file.py:645: [proxy:4093e53d] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776480176&Signature=QUt~ayr7R3eVeISDqmrAEbI44U6jJKj1j8Vvp1V2~~ggaZdS3DTNzK4uudnP13FuuvKuocSPEoPgWHFWdBNbBJ693tKjwxk7MN3zzGkPzUOZz2iVvhLCXxs6QGyED5dTtwMI9QMyBurmTp5Ti-a77X8ESofY9iSESXj5kqX-Dp4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9628880 [2026-04-18 06:42:57] [0.5.1] [INFO] file.py:672: [proxy:4093e53d] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-qi-li-xiangflac__1665802212.m4a?Expires=1776480176&Signature=QUt~ayr7R3eVeISDqmrAEbI44U6jJKj1j8Vvp1V2~~ggaZdS3DTNzK4uudnP13FuuvKuocSPEoPgWHFWdBNbBJ693tKjwxk7MN3zzGkPzUOZz2iVvhLCXxs6QGyED5dTtwMI9QMyBurmTp5Ti-a77X8ESofY9iSESXj5kqX-Dp4_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:42:57] [0.5.1] [INFO] 122.96.50.157:28587 - "GET /proxy/music?token=Czq8V7h9QNA HTTP/1.1" 200 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 夜曲.FLAC-周杰伦, cur_music:周杰伦 - 七里香.FLAC-周杰伦 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 夜曲.FLAC-周杰伦 allow_download:True [2026-04-18 06:47:55] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 夜曲.FLAC-周杰伦】找到歌曲【['周杰伦 - 夜曲.FLAC-周杰伦']】 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 夜曲.FLAC-周杰伦'] 1 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:47:55] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:47:55] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:47:55] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 夜曲.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:47:55] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=SkIiOTOuNq4 [2026-04-18 06:47:55] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:47:56] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:47:56] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:47:56] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:47:56] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:47:56] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=SkIiOTOuNq4 [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=SkIiOTOuNq4 audio_id:1582971365183456177 [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=SkIiOTOuNq4 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 夜曲.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:47:57] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 226.873 秒, 调整后定时器时长: 226.870 秒 [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:47:57] [0.5.1] [INFO] device_player.py:808: 226.8697918646698 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:47:57] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:47:57] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:47:58] [0.5.1] [INFO] file.py:519: [proxy:3837a6e9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:47:58] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 06:47:58] [0.5.1] [INFO] file.py:524: [proxy:3837a6e9] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 06:47:58] [0.5.1] [INFO] file.py:552: [proxy:3837a6e9] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:47:58] [0.5.1] [INFO] file.py:597: [proxy:3837a6e9] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:47:58] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:47:58] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} [2026-04-18 06:47:58] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478488, "artwork": "https://i.audiomack.com/younghsu/9a4f8f8b7a.webp", "duration": 227, "title": "\u5468\u6770\u4f26 - \u591c\u66f2.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-ye-quflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776466078260"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:47:58] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776466078260: True [2026-04-18 06:47:58] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478488, 'artwork': 'https://i.audiomack.com/younghsu/9a4f8f8b7a.webp', 'duration': 227, 'title': '周杰伦 - 夜曲.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-ye-quflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776480478&Signature=O1v7g7QiORjdrgh4cZkcfsMKmS3T-tHrXX-v~GOsD2e7VraEkoXkb1iyUDjyl3qrZd5TdTUdE77EmR8GEaAn7H~undkqDXgglRxcwCTErLB9F2Ho-QfIc2HWXKbc59d2ijEgCH2prg9OWPFD-Wwn-pOTS2zoNFQOI~YLVLRbsC0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:47:58] [0.5.1] [INFO] 34.21.156.125:59864 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 06:47:58] [0.5.1] [INFO] file.py:608: [proxy:3837a6e9] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NDg4LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85YTRmOGY4YjdhLndlYnAiLCAiZHVyYXRpb24iOiAyMjcsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTU5MWNcdTY2ZjIuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWUtcXVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776480478&Signature=O1v7g7QiORjdrgh4cZkcfsMKmS3T-tHrXX-v~GOsD2e7VraEkoXkb1iyUDjyl3qrZd5TdTUdE77EmR8GEaAn7H~undkqDXgglRxcwCTErLB9F2Ho-QfIc2HWXKbc59d2ijEgCH2prg9OWPFD-Wwn-pOTS2zoNFQOI~YLVLRbsC0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:47:58] [0.5.1] [INFO] file.py:624: [proxy:3837a6e9] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776480478&Signature=O1v7g7QiORjdrgh4cZkcfsMKmS3T-tHrXX-v~GOsD2e7VraEkoXkb1iyUDjyl3qrZd5TdTUdE77EmR8GEaAn7H~undkqDXgglRxcwCTErLB9F2Ho-QfIc2HWXKbc59d2ijEgCH2prg9OWPFD-Wwn-pOTS2zoNFQOI~YLVLRbsC0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:47:59] [0.5.1] [INFO] file.py:645: [proxy:3837a6e9] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776480478&Signature=O1v7g7QiORjdrgh4cZkcfsMKmS3T-tHrXX-v~GOsD2e7VraEkoXkb1iyUDjyl3qrZd5TdTUdE77EmR8GEaAn7H~undkqDXgglRxcwCTErLB9F2Ho-QfIc2HWXKbc59d2ijEgCH2prg9OWPFD-Wwn-pOTS2zoNFQOI~YLVLRbsC0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=7300355 [2026-04-18 06:47:59] [0.5.1] [INFO] file.py:672: [proxy:3837a6e9] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-ye-quflac__1665069666.m4a?Expires=1776480478&Signature=O1v7g7QiORjdrgh4cZkcfsMKmS3T-tHrXX-v~GOsD2e7VraEkoXkb1iyUDjyl3qrZd5TdTUdE77EmR8GEaAn7H~undkqDXgglRxcwCTErLB9F2Ho-QfIc2HWXKbc59d2ijEgCH2prg9OWPFD-Wwn-pOTS2zoNFQOI~YLVLRbsC0_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:48:00] [0.5.1] [INFO] 122.96.50.157:59274 - "GET /proxy/music?token=SkIiOTOuNq4 HTTP/1.1" 200 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 花海.FLAC-周杰伦, cur_music:周杰伦 - 夜曲.FLAC-周杰伦 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 花海.FLAC-周杰伦 allow_download:True [2026-04-18 06:51:44] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 花海.FLAC-周杰伦】找到歌曲【['周杰伦 - 花海.FLAC-周杰伦']】 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 花海.FLAC-周杰伦'] 1 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:51:44] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:51:44] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:51:44] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 花海.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 06:51:44] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=Un67zBtrF08 [2026-04-18 06:51:44] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:51:45] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:51:45] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:51:46] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:51:46] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:51:46] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=Un67zBtrF08 [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=Un67zBtrF08 audio_id:1582971365183456177 [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=Un67zBtrF08 ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 花海.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:51:47] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 264.647 秒, 调整后定时器时长: 264.643 秒 [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:51:47] [0.5.1] [INFO] device_player.py:808: 264.6428722229004 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:51:47] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:51:47] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:51:47] [0.5.1] [INFO] file.py:519: [proxy:e3495c87] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 06:51:47] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') [2026-04-18 06:51:47] [0.5.1] [INFO] file.py:524: [proxy:e3495c87] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0=', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= [2026-04-18 06:51:47] [0.5.1] [INFO] file.py:552: [proxy:e3495c87] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:51:47] [0.5.1] [INFO] file.py:597: [proxy:e3495c87] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:51:47] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:51:47] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} [2026-04-18 06:51:47] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478083, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 265, "title": "\u5468\u6770\u4f26 - \u82b1\u6d77.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-hua-haiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776466307153"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:51:47] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776466307153: True [2026-04-18 06:51:47] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478083, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 265, 'title': '周杰伦 - 花海.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-hua-haiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776480707&Signature=YqU~P~ppKy~-j9gf2az1UOIytpbvV2CeS6fOQpsKEbTzXSaWmi3O~6BNC55o3ANTLXd57EnBJrYlwiZNOrgCRf9yqysvcOOBTymlGw7IzoXwGD7enW0qrR1xsyQuWHFOUtDcaeF9ggjLtGcLNrb98xUJvs7d-EyXDfB17DKaTzI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:51:47] [0.5.1] [INFO] 34.21.156.125:53924 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= HTTP/1.1" 307 [2026-04-18 06:51:47] [0.5.1] [INFO] file.py:608: [proxy:e3495c87] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MDgzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNjUsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTgyYjFcdTZkNzcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4taHVhLWhhaWZsYWMiLCAicGxhdGZvcm0iOiAiQXVkaW9tYWNrIn0= to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776480707&Signature=YqU~P~ppKy~-j9gf2az1UOIytpbvV2CeS6fOQpsKEbTzXSaWmi3O~6BNC55o3ANTLXd57EnBJrYlwiZNOrgCRf9yqysvcOOBTymlGw7IzoXwGD7enW0qrR1xsyQuWHFOUtDcaeF9ggjLtGcLNrb98xUJvs7d-EyXDfB17DKaTzI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:51:47] [0.5.1] [INFO] file.py:624: [proxy:e3495c87] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776480707&Signature=YqU~P~ppKy~-j9gf2az1UOIytpbvV2CeS6fOQpsKEbTzXSaWmi3O~6BNC55o3ANTLXd57EnBJrYlwiZNOrgCRf9yqysvcOOBTymlGw7IzoXwGD7enW0qrR1xsyQuWHFOUtDcaeF9ggjLtGcLNrb98xUJvs7d-EyXDfB17DKaTzI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:51:48] [0.5.1] [INFO] file.py:645: [proxy:e3495c87] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776480707&Signature=YqU~P~ppKy~-j9gf2az1UOIytpbvV2CeS6fOQpsKEbTzXSaWmi3O~6BNC55o3ANTLXd57EnBJrYlwiZNOrgCRf9yqysvcOOBTymlGw7IzoXwGD7enW0qrR1xsyQuWHFOUtDcaeF9ggjLtGcLNrb98xUJvs7d-EyXDfB17DKaTzI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8515810 [2026-04-18 06:51:48] [0.5.1] [INFO] file.py:672: [proxy:e3495c87] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-hua-haiflac__1665069667.m4a?Expires=1776480707&Signature=YqU~P~ppKy~-j9gf2az1UOIytpbvV2CeS6fOQpsKEbTzXSaWmi3O~6BNC55o3ANTLXd57EnBJrYlwiZNOrgCRf9yqysvcOOBTymlGw7IzoXwGD7enW0qrR1xsyQuWHFOUtDcaeF9ggjLtGcLNrb98xUJvs7d-EyXDfB17DKaTzI_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:51:49] [0.5.1] [INFO] 122.96.50.157:31116 - "GET /proxy/music?token=Un67zBtrF08 HTTP/1.1" 200 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 一路向北.FLAC-周杰伦, cur_music:周杰伦 - 花海.FLAC-周杰伦 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 一路向北.FLAC-周杰伦 allow_download:True [2026-04-18 06:56:11] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 一路向北.FLAC-周杰伦】找到歌曲【['周杰伦 - 一路向北.FLAC-周杰伦']】 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 一路向北.FLAC-周杰伦'] 1 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:56:11] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 06:56:11] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 06:56:11] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 一路向北.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:56:11] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=6EmmjYD01cw [2026-04-18 06:56:11] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 06:56:12] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:56:13] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 06:56:13] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 06:56:13] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 06:56:13] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=6EmmjYD01cw [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=6EmmjYD01cw audio_id:1582971365183456177 [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=6EmmjYD01cw ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 一路向北.FLAC-周杰伦】已经开始播放了 [2026-04-18 06:56:14] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 295.732 秒, 调整后定时器时长: 295.729 秒 [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 06:56:14] [0.5.1] [INFO] device_player.py:808: 295.7288377421265 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 06:56:14] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 06:56:14] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 06:56:14] [0.5.1] [INFO] file.py:519: [proxy:653c2489] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:56:14] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') [2026-04-18 06:56:14] [0.5.1] [INFO] file.py:524: [proxy:653c2489] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ==', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== [2026-04-18 06:56:14] [0.5.1] [INFO] file.py:552: [proxy:653c2489] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 06:56:14] [0.5.1] [INFO] file.py:597: [proxy:653c2489] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 06:56:14] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 06:56:14] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} [2026-04-18 06:56:14] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478517, "artwork": "https://i.audiomack.com/younghsu/95f4320933.webp", "duration": 296, "title": "\u5468\u6770\u4f26 - \u4e00\u8def\u5411\u5317.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-lu-xiang-beiflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776466574726"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 06:56:15] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776466574726: True [2026-04-18 06:56:15] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478517, 'artwork': 'https://i.audiomack.com/younghsu/95f4320933.webp', 'duration': 296, 'title': '周杰伦 - 一路向北.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-lu-xiang-beiflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776480974&Signature=dJ1PusW78e~t9kslGQ4EbrM1OXj1nc7ueJewx992-ifCPM72mU8ikEzOyhZcXmQ~O46VCkCZD0yClahQnDe2jMEd7A4gEf7nQrq4FBcAPvfiOKkXmK8hGxQyzTnmuyy1-~XgSWrrpjWunRnBwm8OTcYtClpFYv8VQDT2rDRHyl8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:56:15] [0.5.1] [INFO] 34.21.156.125:42450 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== HTTP/1.1" 307 [2026-04-18 06:56:15] [0.5.1] [INFO] file.py:608: [proxy:653c2489] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTE3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS85NWY0MzIwOTMzLndlYnAiLCAiZHVyYXRpb24iOiAyOTYsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlMDBcdThkZWZcdTU0MTFcdTUzMTcuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktbHUteGlhbmctYmVpZmxhYyIsICJwbGF0Zm9ybSI6ICJBdWRpb21hY2sifQ== to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776480974&Signature=dJ1PusW78e~t9kslGQ4EbrM1OXj1nc7ueJewx992-ifCPM72mU8ikEzOyhZcXmQ~O46VCkCZD0yClahQnDe2jMEd7A4gEf7nQrq4FBcAPvfiOKkXmK8hGxQyzTnmuyy1-~XgSWrrpjWunRnBwm8OTcYtClpFYv8VQDT2rDRHyl8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:56:15] [0.5.1] [INFO] file.py:624: [proxy:653c2489] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776480974&Signature=dJ1PusW78e~t9kslGQ4EbrM1OXj1nc7ueJewx992-ifCPM72mU8ikEzOyhZcXmQ~O46VCkCZD0yClahQnDe2jMEd7A4gEf7nQrq4FBcAPvfiOKkXmK8hGxQyzTnmuyy1-~XgSWrrpjWunRnBwm8OTcYtClpFYv8VQDT2rDRHyl8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 06:56:15] [0.5.1] [INFO] file.py:645: [proxy:653c2489] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776480974&Signature=dJ1PusW78e~t9kslGQ4EbrM1OXj1nc7ueJewx992-ifCPM72mU8ikEzOyhZcXmQ~O46VCkCZD0yClahQnDe2jMEd7A4gEf7nQrq4FBcAPvfiOKkXmK8hGxQyzTnmuyy1-~XgSWrrpjWunRnBwm8OTcYtClpFYv8VQDT2rDRHyl8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=9516099 [2026-04-18 06:56:15] [0.5.1] [INFO] file.py:672: [proxy:653c2489] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-lu-xiang-beiflac__1665069667.m4a?Expires=1776480974&Signature=dJ1PusW78e~t9kslGQ4EbrM1OXj1nc7ueJewx992-ifCPM72mU8ikEzOyhZcXmQ~O46VCkCZD0yClahQnDe2jMEd7A4gEf7nQrq4FBcAPvfiOKkXmK8hGxQyzTnmuyy1-~XgSWrrpjWunRnBwm8OTcYtClpFYv8VQDT2rDRHyl8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 06:56:16] [0.5.1] [INFO] 122.97.136.182:31168 - "GET /proxy/music?token=6EmmjYD01cw HTTP/1.1" 200 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 兰亭序.FLAC-周杰伦, cur_music:周杰伦 - 一路向北.FLAC-周杰伦 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 兰亭序.FLAC-周杰伦 allow_download:True [2026-04-18 07:01:10] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 兰亭序.FLAC-周杰伦】找到歌曲【['周杰伦 - 兰亭序.FLAC-周杰伦']】 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 兰亭序.FLAC-周杰伦'] 1 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 07:01:10] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 07:01:10] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 07:01:10] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 兰亭序.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 07:01:10] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=OHXTZo-RYBM [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 07:01:10] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 07:01:11] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 07:01:11] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 07:01:11] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 07:01:11] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=OHXTZo-RYBM [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=OHXTZo-RYBM audio_id:1582971365183456177 [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=OHXTZo-RYBM ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 兰亭序.FLAC-周杰伦】已经开始播放了 [2026-04-18 07:01:14] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.004 秒 [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 254.015 秒, 调整后定时器时长: 254.011 秒 [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 07:01:14] [0.5.1] [INFO] device_player.py:808: 254.01096819332886 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 07:01:14] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 07:01:14] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 07:01:15] [0.5.1] [INFO] file.py:519: [proxy:97db9cf3] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 07:01:15] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 07:01:15] [0.5.1] [INFO] file.py:524: [proxy:97db9cf3] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 07:01:15] [0.5.1] [INFO] file.py:552: [proxy:97db9cf3] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 07:01:15] [0.5.1] [INFO] file.py:597: [proxy:97db9cf3] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 07:01:15] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 07:01:15] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} [2026-04-18 07:01:15] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478363, "artwork": "https://i.audiomack.com/younghsu/ed252062a4.webp", "duration": 254, "title": "\u5468\u6770\u4f26 - \u5170\u4ead\u5e8f.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-lan-ting-xuflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776466875254"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 07:01:15] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776466875254: True [2026-04-18 07:01:15] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478363, 'artwork': 'https://i.audiomack.com/younghsu/ed252062a4.webp', 'duration': 254, 'title': '周杰伦 - 兰亭序.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-lan-ting-xuflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776481275&Signature=MXYFctM~7lzIVrXFo8NzkmloXyaOkG0MSigm6pBb3p7Whs6V2gR-vsOSAMTYL9LEY26Qqx-flPFnpYfb1mLgddf7okjg1-Azyc3ya~m~JqbRVQre2OfR~q1ZD4sOerBLWvTan2n3h5LjCgzW2qddpDEL8q6oTsSkAaW~mD3Birs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 07:01:15] [0.5.1] [INFO] 34.21.156.125:33890 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 07:01:15] [0.5.1] [INFO] file.py:608: [proxy:97db9cf3] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4MzYzLCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS9lZDI1MjA2MmE0LndlYnAiLCAiZHVyYXRpb24iOiAyNTQsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTUxNzBcdTRlYWRcdTVlOGYuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4tbGFuLXRpbmcteHVmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776481275&Signature=MXYFctM~7lzIVrXFo8NzkmloXyaOkG0MSigm6pBb3p7Whs6V2gR-vsOSAMTYL9LEY26Qqx-flPFnpYfb1mLgddf7okjg1-Azyc3ya~m~JqbRVQre2OfR~q1ZD4sOerBLWvTan2n3h5LjCgzW2qddpDEL8q6oTsSkAaW~mD3Birs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 07:01:15] [0.5.1] [INFO] file.py:624: [proxy:97db9cf3] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776481275&Signature=MXYFctM~7lzIVrXFo8NzkmloXyaOkG0MSigm6pBb3p7Whs6V2gR-vsOSAMTYL9LEY26Qqx-flPFnpYfb1mLgddf7okjg1-Azyc3ya~m~JqbRVQre2OfR~q1ZD4sOerBLWvTan2n3h5LjCgzW2qddpDEL8q6oTsSkAaW~mD3Birs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 07:01:16] [0.5.1] [INFO] file.py:645: [proxy:97db9cf3] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776481275&Signature=MXYFctM~7lzIVrXFo8NzkmloXyaOkG0MSigm6pBb3p7Whs6V2gR-vsOSAMTYL9LEY26Qqx-flPFnpYfb1mLgddf7okjg1-Azyc3ya~m~JqbRVQre2OfR~q1ZD4sOerBLWvTan2n3h5LjCgzW2qddpDEL8q6oTsSkAaW~mD3Birs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=8173653 [2026-04-18 07:01:16] [0.5.1] [INFO] file.py:672: [proxy:97db9cf3] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-lan-ting-xuflac__1665069684.m4a?Expires=1776481275&Signature=MXYFctM~7lzIVrXFo8NzkmloXyaOkG0MSigm6pBb3p7Whs6V2gR-vsOSAMTYL9LEY26Qqx-flPFnpYfb1mLgddf7okjg1-Azyc3ya~m~JqbRVQre2OfR~q1ZD4sOerBLWvTan2n3h5LjCgzW2qddpDEL8q6oTsSkAaW~mD3Birs_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 07:01:17] [0.5.1] [INFO] 122.97.136.182:48457 - "GET /proxy/music?token=OHXTZo-RYBM HTTP/1.1" 200 [2026-04-18 07:05:08] [0.5.1] [INFO] 172.17.0.1:42192 - "GET /robots.txt HTTP/1.0" 404 [2026-04-18 07:05:09] [0.5.1] [INFO] 172.17.0.1:42206 - "GET /static/default/setting.js?version=1775697572 HTTP/1.0" 200 [2026-04-18 07:05:24] [0.5.1] [INFO] 172.17.0.1:44482 - "GET /static/default/downloadtool.html HTTP/1.0" 200 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:784: 定时器时间到了 did: 419359157 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:293: 开始播放下一首 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:186: 没打乱 _online_佚名 ['周杰伦 - 七里香.FLAC-周杰伦', '周杰伦 - 夜曲.FLAC-周杰伦'] ... ['搁浅- Jay chou 周杰伦-冰淇凌', '晴天-周杰伦'] with len: 10 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:305: get_next_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:306: _play_next. name:周杰伦 - 以父之名.FLAC-周杰伦, cur_music:周杰伦 - 兰亭序.FLAC-周杰伦 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:244: play_internal. search_key: name:周杰伦 - 以父之名.FLAC-周杰伦 allow_download:True [2026-04-18 07:05:28] [0.5.1] [INFO] music_library.py:591: 根据【周杰伦 - 以父之名.FLAC-周杰伦】找到歌曲【['周杰伦 - 以父之名.FLAC-周杰伦']】 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:254: play_internal. names:['周杰伦 - 以父之名.FLAC-周杰伦'] 1 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:928: cancel_group_next_timer {'419359157': } [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:348: cur_music 周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 07:05:28] [0.5.1] [INFO] music_library.py:1072: get_music_url name:周杰伦 - 以父之名.FLAC-周杰伦 [2026-04-18 07:05:28] [0.5.1] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-18 07:05:28] [0.5.1] [INFO] music_library.py:1088: get_music_url web music. name:周杰伦 - 以父之名.FLAC-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 07:05:28] [0.5.1] [INFO] music_library.py:1194: Using token proxy url: http://34.21.156.125:58090/proxy/music?token=kwiXuGqAZSg [2026-04-18 07:05:28] [0.5.1] [INFO] device_player.py:888: group_force_stop_xiaoai 小爱音箱Play ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [2026-04-18 07:05:29] [0.5.1] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 07:05:29] [0.5.1] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 8, "loop_type": 1 }'}} [2026-04-18 07:05:29] [0.5.1] [INFO] device_player.py:450: stop_if_xiaoai_is_playing player_stop device_id:3e792e41-53c6-439f-95da-2fd68f4e61da enable_force_stop:False ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-18 07:05:29] [0.5.1] [INFO] device_player.py:891: group_force_stop_xiaoai ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [None] [2026-04-18 07:05:29] [0.5.1] [INFO] device_player.py:351: 播放 http://34.21.156.125:58090/proxy/music?token=kwiXuGqAZSg [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:724: play_one_url play_by_music_url device_id:3e792e41-53c6-439f-95da-2fd68f4e61da ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://34.21.156.125:58090/proxy/music?token=kwiXuGqAZSg audio_id:1582971365183456177 [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:703: group_player_play http://34.21.156.125:58090/proxy/music?token=kwiXuGqAZSg ['3e792e41-53c6-439f-95da-2fd68f4e61da'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:368: 【周杰伦 - 以父之名.FLAC-周杰伦】已经开始播放了 [2026-04-18 07:05:30] [0.5.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:391: 获取音乐时长耗时: 0.003 秒 [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:396: 原始歌曲时长: 342.047 秒, 调整后定时器时长: 342.044 秒 [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:913: cancel_next_timer did: 419359157 [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:923: 下一曲定时器不见了 did: 419359157 [2026-04-18 07:05:30] [0.5.1] [INFO] device_player.py:808: 342.04391148213193 秒后将会播放下一首歌曲 did: 419359157 [2026-04-18 07:05:30] [0.5.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-18 07:05:30] [0.5.1] [INFO] config_manager.py:82: save_cur_config ok [2026-04-18 07:05:30] [0.5.1] [INFO] file.py:519: [proxy:95b3165a] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 07:05:30] [0.5.1] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') [2026-04-18 07:05:30] [0.5.1] [INFO] file.py:524: [proxy:95b3165a] expand_self_url parsed=ParseResult(scheme='http', netloc='34.21.156.125:58090', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9', fragment='') final_url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 [2026-04-18 07:05:30] [0.5.1] [INFO] file.py:552: [proxy:95b3165a] mode=music timeout=600s netloc=34.21.156.125:58090 [2026-04-18 07:05:30] [0.5.1] [INFO] file.py:597: [proxy:95b3165a] initial GET url=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-04-18 07:05:30] [0.5.1] [INFO] js_plugin_manager.py:195: JS Plugin Manager sending message: getMediaSource for plugin: Audiomack [2026-04-18 07:05:30] [0.5.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager music item: {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} [2026-04-18 07:05:30] [0.5.1] [WARNING] js_plugin_manager.py:144: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Audiomack", "musicItem": {"id": 11478507, "artwork": "https://i.audiomack.com/younghsu/1658bf33c3.webp", "duration": 343, "title": "\u5468\u6770\u4f26 - \u4ee5\u7236\u4e4b\u540d.FLAC", "artist": "\u5468\u6770\u4f26", "album": "", "url_slug": "zhou-jie-lun-yi-fu-zhi-mingflac", "platform": "Audiomack"}, "quality": "standard", "id": "msg_1776467130701"}, error: Expecting value: line 1 column 2 (char 1) [2026-04-18 07:05:31] [0.5.1] [INFO] js_plugin_manager.py:209: JS Plugin Manager received response for message msg_1776467130701: True [2026-04-18 07:05:31] [0.5.1] [INFO] music.py:98: plugin-url {'id': 11478507, 'artwork': 'https://i.audiomack.com/younghsu/1658bf33c3.webp', 'duration': 343, 'title': '周杰伦 - 以父之名.FLAC', 'artist': '周杰伦', 'album': '', 'url_slug': 'zhou-jie-lun-yi-fu-zhi-mingflac', 'platform': 'Audiomack'} https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776481530&Signature=Kuy8RJseffMSdfhOpXFauGLOYbMhR0XAU~eLtcVLvEgjneGwmOJ8jttPxdNaXieH6TMpURbdv4~aEmrKINcjs-NEzqhc31Sd-oUyQj8eqFhQwih3GkYuydZz5GOcqWKrWVpBJWMRZ4khyaT8ECzrKETT7J6zESXFx~sU9JwkC~8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 07:05:31] [0.5.1] [INFO] 34.21.156.125:35146 - "GET /api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 HTTP/1.1" 307 [2026-04-18 07:05:31] [0.5.1] [INFO] file.py:608: [proxy:95b3165a] redirect#1 status=307 from=http://34.21.156.125:58090/api/proxy/plugin-url?data=eyJpZCI6IDExNDc4NTA3LCAiYXJ0d29yayI6ICJodHRwczovL2kuYXVkaW9tYWNrLmNvbS95b3VuZ2hzdS8xNjU4YmYzM2MzLndlYnAiLCAiZHVyYXRpb24iOiAzNDMsICJ0aXRsZSI6ICJcdTU0NjhcdTY3NzBcdTRmMjYgLSBcdTRlZTVcdTcyMzZcdTRlNGJcdTU0MGQuRkxBQyIsICJhcnRpc3QiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgImFsYnVtIjogIiIsICJ1cmxfc2x1ZyI6ICJ6aG91LWppZS1sdW4teWktZnUtemhpLW1pbmdmbGFjIiwgInBsYXRmb3JtIjogIkF1ZGlvbWFjayJ9 to=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776481530&Signature=Kuy8RJseffMSdfhOpXFauGLOYbMhR0XAU~eLtcVLvEgjneGwmOJ8jttPxdNaXieH6TMpURbdv4~aEmrKINcjs-NEzqhc31Sd-oUyQj8eqFhQwih3GkYuydZz5GOcqWKrWVpBJWMRZ4khyaT8ECzrKETT7J6zESXFx~sU9JwkC~8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 07:05:31] [0.5.1] [INFO] file.py:624: [proxy:95b3165a] redirect target resolved=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776481530&Signature=Kuy8RJseffMSdfhOpXFauGLOYbMhR0XAU~eLtcVLvEgjneGwmOJ8jttPxdNaXieH6TMpURbdv4~aEmrKINcjs-NEzqhc31Sd-oUyQj8eqFhQwih3GkYuydZz5GOcqWKrWVpBJWMRZ4khyaT8ECzrKETT7J6zESXFx~sU9JwkC~8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA netloc=music.audiomack.com headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'} [2026-04-18 07:05:31] [0.5.1] [INFO] file.py:645: [proxy:95b3165a] final response status=200 resp_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776481530&Signature=Kuy8RJseffMSdfhOpXFauGLOYbMhR0XAU~eLtcVLvEgjneGwmOJ8jttPxdNaXieH6TMpURbdv4~aEmrKINcjs-NEzqhc31Sd-oUyQj8eqFhQwih3GkYuydZz5GOcqWKrWVpBJWMRZ4khyaT8ECzrKETT7J6zESXFx~sU9JwkC~8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA content_type=audio/mp4 content_length=11005691 [2026-04-18 07:05:31] [0.5.1] [INFO] file.py:672: [proxy:95b3165a] content-type fallback -> ffmpeg content_type=audio/mp4 final_url=https://music.audiomack.com/hq/younghsu/zhou-jie-lun-yi-fu-zhi-mingflac__1665069692.m4a?Expires=1776481530&Signature=Kuy8RJseffMSdfhOpXFauGLOYbMhR0XAU~eLtcVLvEgjneGwmOJ8jttPxdNaXieH6TMpURbdv4~aEmrKINcjs-NEzqhc31Sd-oUyQj8eqFhQwih3GkYuydZz5GOcqWKrWVpBJWMRZ4khyaT8ECzrKETT7J6zESXFx~sU9JwkC~8_&Key-Pair-Id=APKAIKAIRXBA2H7FXITA [2026-04-18 07:05:32] [0.5.1] [INFO] 122.96.50.157:23076 - "GET /proxy/music?token=kwiXuGqAZSg HTTP/1.1" 200 [2026-04-18 07:05:57] [0.5.1] [INFO] 172.17.0.1:35758 - "GET /static/default/merge/index.html HTTP/1.0" 200 [2026-04-18 07:06:00] [0.5.1] [INFO] 172.17.0.1:35766 - "GET /docs HTTP/1.0" 200 [2026-04-18 07:07:01] [0.5.1] [INFO] 172.17.0.1:39860 - "GET /static/tailwind/debug.html HTTP/1.0" 200 [2026-04-18 07:08:00] [0.5.1] [INFO] 172.17.0.1:37510 - "GET /static/tailwind/jquery-3.7.1.min.js?version=1736211336 HTTP/1.0" 200 [2026-04-18 07:08:27] [0.5.1] [INFO] 172.17.0.1:51614 - "GET /static/tailwind/setting.js?version=1736211336 HTTP/1.0" 200