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 {parse} from 'node-html-parser';
|
||||
import {searchAlternative} from '../api';
|
||||
import {searchAlternative, searchMusic} from '../api';
|
||||
|
||||
const getTrack = async (id: string) => {
|
||||
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('= ');
|
||||
info.shift();
|
||||
if (info) {
|
||||
let json = info.join('= ').trim();
|
||||
if (json.endsWith(';')) {
|
||||
json = json.slice(0, -1);
|
||||
let jsonData = info.join('= ').trim();
|
||||
if (jsonData.endsWith(';')) {
|
||||
jsonData = jsonData.slice(0, -1);
|
||||
}
|
||||
const json = JSON.parse(jsonData);
|
||||
|
||||
const data = JSON.parse(json).contents.twoColumnWatchNextResults.results.results.contents[1]
|
||||
.videoSecondaryInfoRenderer.metadataRowContainer.metadataRowContainerRenderer;
|
||||
if (data.rows && data.rows.length > 0) {
|
||||
const song = data.rows.find(
|
||||
(row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Song',
|
||||
);
|
||||
const artist = data.rows.find(
|
||||
(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,
|
||||
try {
|
||||
const data =
|
||||
json.contents.twoColumnWatchNextResults.results.results.contents[1].videoSecondaryInfoRenderer
|
||||
.metadataRowContainer.metadataRowContainerRenderer;
|
||||
if (data.rows && data.rows.length > 0) {
|
||||
const song = data.rows.find(
|
||||
(row: any) => row.metadataRowRenderer && row.metadataRowRenderer.title.simpleText === 'Song',
|
||||
);
|
||||
if (TRACK.data[0]) {
|
||||
return TRACK.data[0];
|
||||
const artist = data.rows.find(
|
||||
(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