mirror of
https://github.com/d-fi/d-fi-core.git
synced 2025-07-27 15:44:26 +02:00
improve youtube search
This commit is contained in:
parent
f702c317a6
commit
58771877ea
@ -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];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user