42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { parseVideoRendererData } from "./util.js";
|
|
|
|
export async function getTrending(bp) {
|
|
var url = `https://www.youtube.com/feed/trending`;
|
|
if (bp) url += `?bp=${bp}`;
|
|
var html = await fetch(url).then(res => res.text());
|
|
var ytInitialData = html.match(/ytInitialData = ({.*});<\/script>/)[1];
|
|
ytInitialData = JSON.parse(ytInitialData);
|
|
|
|
var tabs = ytInitialData.contents.twoColumnBrowseResultsRenderer.tabs.map(t => {
|
|
return {
|
|
name: t.tabRenderer.title,
|
|
//url: `https://www.youtube.com` + t.tabRenderer.endpoint.commandMetadata.webCommandMetadata.url
|
|
bp: t.tabRenderer.endpoint.browseEndpoint.params
|
|
}
|
|
});
|
|
|
|
var videos = ytInitialData
|
|
.contents
|
|
.twoColumnBrowseResultsRenderer
|
|
.tabs
|
|
.find(tab => tab.tabRenderer.selected)
|
|
.tabRenderer
|
|
.content
|
|
.sectionListRenderer
|
|
.contents
|
|
// regular trending in sections with shelfRenderer without title
|
|
.filterMap(x => {
|
|
var shelfRenderer = x.itemSectionRenderer.contents.find(x => x.shelfRenderer)?.shelfRenderer;
|
|
if (shelfRenderer && !shelfRenderer.title) {
|
|
return shelfRenderer
|
|
.content
|
|
.expandedShelfContentsRenderer
|
|
.items
|
|
.map(parseVideoRendererData)
|
|
};
|
|
})
|
|
.flat();
|
|
|
|
|
|
return {tabs, videos};
|
|
} |