Stalker JavaScript

YouTube Stalk

Mengambil data profile channel YouTube

JA YouTube Stalk.javascript
src > modules > YouTube Stalk.javascript
/**
 * Judul : YouTube Stalker
 * Base URL : https://www.youtube.com
 * Author : Cx99 - t.me/exploit99
 * Deskripsi : Mengambil data profile channel YouTube
 * Channel : https://whatsapp.com/channel/0029VbCSF8sA89MopCVOYW06
 */

const axios = require('axios');
const cheerio = require('cheerio');

async function stalkYT(username) {
    if (!username.startsWith('@')) {
        username = '@' + username;
    }
    const url = `https://www.youtube.com/${username}`;
    
    const headers = {
        "accept-language": "en-US,en;q=0.9",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    };
    
    try {
        const response = await axios.get(url, { headers });
        const html = response.data;
        
        const match = html.match(/var ytInitialData = ({.*?});<\/script>/);
        if (!match) {
            return {
                status: false,
                message: "Gagal menemukan data ytInitialData. Pastikan username YouTube valid."
            };
        }

        const data = JSON.parse(match[1]);
        
        const metadata = data.metadata.channelMetadataRenderer;
        
        const channelId = metadata.externalId;
        const channelUrl = metadata.channelUrl;
        const title = metadata.title;
        const description = metadata.description;
        const avatar = metadata.avatar.thumbnails[metadata.avatar.thumbnails.length - 1].url;
        
        let banner = "";
        
        function findKey(obj, key) {
            let result = null;
            function search(o) {
                if (o && typeof o === 'object') {
                    if (o[key] !== undefined) {
                        result = o[key];
                        return true;
                    }
                    for (let k in o) {
                        if (search(o[k])) return true;
                    }
                }
                return false;
            }
            search(obj);
            return result;
        }

        const bannerImg = findKey(data.header, 'imageBannerViewModel');
        if (bannerImg && bannerImg.image && bannerImg.image.sources) {
            banner = bannerImg.image.sources[bannerImg.image.sources.length - 1].url;
        }
        
        let subscribers = "0";
        let videos = "0";
        
        const strData = JSON.stringify(data.header);
        const subMatch = strData.match(/"content":"([^"]+ subscribers)"/i);
        if (subMatch) {
            subscribers = subMatch[1];
        } else {
            const subMatchID = strData.match(/"content":"([^"]+ subscriber)"/i);
            if (subMatchID) subscribers = subMatchID[1];
        }
        
        const vidMatch = strData.match(/"content":"([^"]+ videos?)"/i);
        if (vidMatch) {
            videos = vidMatch[1];
        }

        return {
            status: true,
            data: {
                id: channelId,
                username: username,
                title: title,
                avatar: avatar,
                banner: banner,
                subscribers: subscribers,
                videos: videos,
                description: description,
                channel_url: channelUrl
            }
        };

    } catch (error) {
        return {
            status: false,
            message: `Gagal memproses data: ${error.message}`
        };
    }
}

module.exports = stalkYT;

if (require.main === module) {
    const args = process.argv.slice(2);
    if (args.length === 0) {
        console.log("? Penggunaan: node stalkyt.js <username>");
        console.log("? Contoh: node stalkyt.js @kingronal21");
        process.exit(1);
    }
    
    const username = args[0];
    
    stalkYT(username)
        .then(res => console.log(JSON.stringify(res, null, 2)))
        .catch(err => console.error(err));
}
Kembali ke Home
Home Search Request Owner Login