UNPKG

@lzwme/m3u8-dl

Version:

Batch download of m3u8 files and convert to mp4

52 lines (51 loc) 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DouyinParser = void 0; const utils_js_1 = require("../../lib/utils.js"); const base_parser_1 = require("./base-parser"); class DouyinParser extends base_parser_1.BaseParser { static getHeaders() { return { 'user-agent': '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 Edg/122.0.0.0', }; } static async parse(url) { try { const loc = await (0, utils_js_1.getLocation)(url); const idMatch = loc.match(/[0-9]+/); if (!idMatch) return DouyinParser.error(400, '无法解析视频 ID'); const { data: res } = await utils_js_1.request.get(`https://www.iesdouyin.com/share/video/${idMatch[0]}`, null, DouyinParser.getHeaders()); const matches = res.match(/window\._ROUTER_DATA\s*=\s*(.*?)<\/script>/s); if (!matches) return DouyinParser.error(400, '无法解析视频数据'); const data = JSON.parse(matches[1].trim()); const item = data.loaderData['video_(id)/page'].videoInfoRes.item_list[0]; if (!item) return DouyinParser.error(400, '解析视频信息失败'); const videoId = item.video.play_addr.uri; if (!videoId) return DouyinParser.error(201, '未找到视频URL'); const videoUrl = `https://www.iesdouyin.com/aweme/v1/play/?video_id=${videoId}&ratio=1080p&line=0`; return DouyinParser.success({ author: item.author.nickname, uid: item.author.unique_id, avatar: item.author.avatar_medium.url_list[0], like: item.statistics.digg_count, time: item.create_time, title: item.desc, cover: item.video.cover.url_list[0], url: await (0, utils_js_1.getLocation)(videoUrl), referer: url, music: { author: item.music.author, avatar: item.music.cover_large.url_list[0], }, }); } catch (error) { return DouyinParser.error(500, `解析失败: ${error instanceof Error ? error.message : '未知错误'}`); } } } exports.DouyinParser = DouyinParser;