improve youtube search

This commit is contained in:
Sayem Chowdhury 2021-04-07 17:27:51 +06:00
parent f702c317a6
commit 58771877ea
2 changed files with 2249 additions and 21 deletions

View File

@ -1,6 +1,6 @@
import axios from 'axios'; import axios from 'axios';
import {parse} from 'node-html-parser'; import {parse} from 'node-html-parser';
import {searchAlternative} from '../api'; import {searchAlternative, searchMusic} from '../api';
const getTrack = async (id: string) => { const getTrack = async (id: string) => {
const response = await axios.get(`https://www.youtube.com/watch?v=${id}&hl=en`); const response = await axios.get(`https://www.youtube.com/watch?v=${id}&hl=en`);
@ -12,31 +12,48 @@ const getTrack = async (id: string) => {
const info = script.text.split('= '); const info = script.text.split('= ');
info.shift(); info.shift();
if (info) { if (info) {
let json = info.join('= ').trim(); let jsonData = info.join('= ').trim();
if (json.endsWith(';')) { if (jsonData.endsWith(';')) {
json = json.slice(0, -1); jsonData = jsonData.slice(0, -1);
} }
const json = JSON.parse(jsonData);
const data = JSON.parse(json).contents.twoColumnWatchNextResults.results.results.contents[1] try {
.videoSecondaryInfoRenderer.metadataRowContainer.metadataRowContainerRenderer; const data =
if (data.rows && data.rows.length > 0) { json.contents.twoColumnWatchNextResults.results.results.contents[1].videoSecondaryInfoRenderer
const song = data.rows.find( .metadataRowContainer.metadataRowContainerRenderer;
(row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Song', if (data.rows && data.rows.length > 0) {
); const song = data.rows.find(
const artist = data.rows.find( (row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Song',
(row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Artist',
);
if (song && artist) {
const {TRACK} = await searchAlternative(
artist.metadataRowRenderer.contents[0].runs[0].text,
song.metadataRowRenderer.contents[0].simpleText,
1,
); );
if (TRACK.data[0]) { const artist = data.rows.find(
return TRACK.data[0]; (row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Artist',
);
if (song && artist) {
const {TRACK} = await searchAlternative(
artist.metadataRowRenderer.contents[0].runs[0].text,
song.metadataRowRenderer.contents[0].simpleText,
1,
);
if (TRACK.data[0]) {
return TRACK.data[0];
}
} }
} }
} catch (err) {
const title = (json.videoDetails.title as string)
.toLowerCase()
.replace(/\(Off.*\)/i, '')
.replace(/ft.*/i, '')
.replace(/[,-\.]/g, '')
.replace(/ +/g, ' ')
.trim();
const {TRACK} = await searchMusic(title, ['TRACK'], 20);
const data = TRACK.data.filter((track) => title.includes(track.ART_NAME.toLowerCase()));
if (data[0]) {
return TRACK.data[0];
}
} }
} }
} }

2211
yt.json Normal file

File diff suppressed because one or more lines are too long