Path: blob/master/node_modules/@bochilteam/scraper/lib/cjs/others/lyrics.js
1126 views
"use strict";1var __importDefault = (this && this.__importDefault) || function (mod) {2return (mod && mod.__esModule) ? mod : { "default": mod };3};4Object.defineProperty(exports, "__esModule", { value: true });5exports.lyricsv2 = exports.lyrics = void 0;6const got_1 = __importDefault(require("got"));7const cheerio_1 = __importDefault(require("cheerio"));8const utils_js_1 = require("../utils.js");9async function lyrics(query) {10const data = await (0, got_1.default)(`https://www.musixmatch.com/search/${encodeURIComponent(query)}`).text();11const $ = cheerio_1.default.load(data);12const results = [];13$('#search-all-results > div.main-panel > div:nth-child(2) > div.box-content > div > ul.tracks.list > li.showArtist.showCoverart').each(function () {14var _a;15const el = (_a = $(this).find('meta[itemprop="url"]').attr('content')) === null || _a === void 0 ? void 0 : _a.trim();16if (el) {17results.push({18link: 'https://www.musixmatch.com' + el,19title: $(this).find('.media-card-title > a > span').text().trim(),20author: $(this).find('.artist-field > span > a.artist').text().trim()21});22}23});24if (!results.length)25throw new utils_js_1.ScraperError(`Can't get lyrics!\n${$.html()}`);26const { link, title, author } = results[0];27const html = await (0, got_1.default)(link).text();28const $$ = cheerio_1.default.load(html);29return {30title,31author,32lyrics: $$('p.mxm-lyrics__content > span.lyrics__content__ok').map((_, el) => $$(el).text().trim()).toArray().filter(v => v).join('\n'),33link34};35}36exports.lyrics = lyrics;37async function lyricsv2(query) {38var _a, _b;39const data = await (0, got_1.default)(`https://genius.com/api/search/multi?per_page=5&q=${encodeURIComponent(query)}`, {40headers: {41accept: 'application/json, text/plain, */*',42'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'43}44}).json();45// @ts-ignore46const result = (_b = (_a = data.response.sections.find((section) => {47var _a;48return ['song', 'lyric'].includes(section.type) &&49((_a = section.hits) === null || _a === void 0 ? void 0 : _a.find((hit) => ['song', 'lyric'].includes(hit.type)));50}).hits) === null || _a === void 0 ? void 0 : _a.find((hit) => ['song', 'lyric'].includes(hit.type))) === null || _b === void 0 ? void 0 : _b.result;51if (!result)52throw new utils_js_1.ScraperError(`Can't get json!\n${JSON.stringify(data)}`);53const { artist_names, title, url } = result;54if (!url)55throw new utils_js_1.ScraperError(`Can't get lyrics!\n${JSON.stringify(data, null, 2)}`);56const html = await (0, got_1.default)(url).text();57const $ = cheerio_1.default.load(html);58let results = '';59$('#lyrics-root > div[data-lyrics-container="true"]').each((_, el) => {60const element = $(($(el).html() || '').replace(/<br>/g, '\n')).text().trim();61if (element)62results += element;63});64return {65title,66author: artist_names,67lyrics: results.trim(),68link: url69};70}71exports.lyricsv2 = lyricsv2;72//# sourceMappingURL=lyrics.js.map7374