Mengambil data profile channel YouTube
/**
* 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));
}