#node.js #youtube #discord.js
#node.js #YouTube #discord.js
Вопрос:
Хорошо, итак, мне нужно обработать ссылку на плейлист YouTube, потому что мне нужен идентификатор видео для каждого из видео. Но, как всегда, что-то идет не так, встроенная функция getPlaylist пытается преобразовать детали плейлиста в JSON, но ее код фильтрации не таков, и он пытается проанализировать это
Мне нужен только объект JSON, окрашенный в синий цвет, а не тарабарщина в красный. Как я могу это сделать?
static getPlaylist(html, limit = 100) {
if (!limit || typeof limit !== "number") limit = 100;
if (limit <= 0) limit = 100;
const videos = [];
let parsed;
let playlistDetails;
try {
const rawJSON = `${html.split("{"playlistVideoListRenderer":{"contents":")[1].split("}],"playlistId"")[0]}}]`;
parsed = JSON.parse(rawJSON);
let log = html.split("{"playlistSidebarRenderer":")[1].split("n")[0].slice(0, -3)
console.log(log);
// This is the part where it crashes because it tries to convert the JSON and the gibberish
playlistDetails = JSON.parse(html.split("{"playlistSidebarRenderer":")[1].split("n")[0].slice(0, -3)).items;
} catch (e) {
return null;
}
Это несколько строк кода, которые мне нужны для работы, как я могу отфильтровать тарабарщину?
Комментарии:
1. Просто выделите первые несколько символов тарабарщины красным цветом и поместите эти символы в a
split()
. Поскольку вам нужен контент, который предшествует тарабарщине, вы бы сделалиsplit("first several chars of gibberish here")[0]
. Итак, что-то вроде:html.split("{"playlistSidebarRenderer":")[1].split("n")[0].slice(0, -3).split("}};</script><link rel")[0]
. Конечно, для этого вам нужно будет разветвитьyoutube-sr
и отредактировать этот код, и символы, которые я выбрал в этом примере, могут работать неправильно, поэтому вам нужно выбрать то, что подходит именно вам.
Ответ №1:
У меня получилось благодаря @Cannicide.
Я только что добавил разделение с начальными данными тарабарщины
playlistDetails = JSON.parse(html.split("{"playlistSidebarRenderer":")[1].split("n")[0].slice(0, -3).split("}};</script><link rel="alternate" media="handheld" href="https://m.youtube.com/playlist?list=")[0]).items;