Skip to content
This repository has been archived by the owner on May 5, 2023. It is now read-only.

Collection of functions that leverage YouTube's ytInitialData and ytInitialPlayerResponse to extract information.

Notifications You must be signed in to change notification settings

Mampfinator/yt-scraping-utilities

Repository files navigation

yt-scraping-utilities

Assorted scraping utilities for YouTube because some things (like Community Posts) just can't be done with their official API.

npm install yt-scraping-utilities

Usage

Important to note: this package does not do any requests on its own. You will have to fetch the data yourself. Keep in mind that YouTube ratelimits are somewhat strict, so keep your requests/minute in moderation; you'll likely be 403'd otherwise.

YouTube doesn't offer an API for community posts, but you can still scrape them fairly easily:

import { extractCommunityPosts } from "yt-scraping-utilities";
import axios from "axios";


(async () => {
    // Extract posts from an entire community tab
    const {data: communityPage} = await axios.get("https://www.youtube.com/channel/UCV1xUwfM2v2oBtT3JNvic3w/community", {});
    const posts = extractCommunityPosts(communityPage);

    // or a single post page directly
    const {data: postPage} = await axios.get("https://www.youtube.com/post/Ugkxw-otENY0Su_1-C2HbZ1qeANvU3-Wtyg_", {});
    const [singlePost] = extractCommunityPosts(postPage);
})();

You can also check if a YouTube video is membership locked (you can't, however, find out which tier it's locked behind (yet)):

import { extractPlayerInfo } from "yt-scraping-utilities";
async function isMembershipVideo(videoId: string): Promise<boolean> {
    const { data } = await axios.get(`https://youtu.be/${videoId}`);
    const playerInfo = extractPlayerInfo(data);

    return playerInfo.membersOnly;
}

You can also use some of the internally used functions for yourself, if you know what to look for and just need a parser:

import { parseRawData, findActiveTab } from "yt-scraping-utilities";

(async () => {
    const {data: source} = await axios.get("https://youtube.com");

    const { ytInitialData } = parseRawData({
        source,
        ytInitialData: true
    });

    // contains all the videos on YouTube home in subrenderers.
    const homePageVideos = findActiveTab(ytInitialData).tabRenderer.content.richGridRenderer;
})();

About

Collection of functions that leverage YouTube's ytInitialData and ytInitialPlayerResponse to extract information.

Resources

Stars

Watchers

Forks

Packages

No packages published