UNPKG

@kelvdra/scraper

Version:

A simple scraper by kelvdra.

55 lines (49 loc) 2.58 kB
import axios from "axios" import * as cheerio from "cheerio" export async function ytStalk(username) { try { const { data } = await axios.get(`https://youtube.com/@${username}`); const $ = cheerio.load(data); const script = $('script').filter((i, el) => $(el).html().includes('var ytInitialData =')).html(); const jsonData = script.match(/var ytInitialData = (.*?);/); if (!jsonData || !jsonData[1]) return { status: false, message: "Data tidak ditemukan" }; const parsed = JSON.parse(jsonData[1]); const tabs = parsed.contents.twoColumnBrowseResultsRenderer.tabs; const videos = []; tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents?.forEach(item => { item.itemSectionRenderer?.contents?.forEach(content => { const items = content?.shelfRenderer?.content?.horizontalListRenderer?.items || []; items.forEach(v => { const vid = v.gridVideoRenderer; if (vid) { videos.push({ title: vid.title.simpleText, published: vid.publishedTimeText?.simpleText, views: vid.viewCountText?.simpleText, duration: vid.thumbnailOverlays?.find(o => o.thumbnailOverlayTimeStatusRenderer)?.thumbnailOverlayTimeStatusRenderer?.text?.simpleText, url: `https://youtube.com/watch?v=${vid.videoId}`, thumbnail: vid.thumbnail.thumbnails[0].url }); } }); }); }); const header = parsed.header?.pageHeaderRenderer; const meta = parsed.metadata?.channelMetadataRenderer; return { status: true, creator: "@kelvdra/scraper", username: header?.content?.pageHeaderViewModel?.metadata?.contentMetadataViewModel?.metadataRows?.[0]?.metadataParts?.[0]?.text?.content, subscribers: header?.content?.pageHeaderViewModel?.metadata?.contentMetadataViewModel?.metadataRows?.[1]?.metadataParts?.[0]?.text?.content, videos: videos.slice(0, 5), avatar: header?.content?.pageHeaderViewModel?.image?.decoratedAvatarViewModel?.avatar?.avatarViewModel?.image?.sources?.[0]?.url, description: meta?.description, channelUrl: meta?.channelUrl }; } catch (e) { return { status: false, message: e.message }; } }