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,13 +12,16 @@ 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 =
json.contents.twoColumnWatchNextResults.results.results.contents[1].videoSecondaryInfoRenderer
.metadataRowContainer.metadataRowContainerRenderer;
if (data.rows && data.rows.length > 0) { if (data.rows && data.rows.length > 0) {
const song = data.rows.find( const song = data.rows.find(
(row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Song', (row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Song',
@ -38,6 +41,20 @@ const getTrack = async (id: string) => {
} }
} }
} }
} 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