UNPKG

notmebotz-tools

Version:

Sebuah Tools yang berfungsi untuk mendownload Video atau Foto dari media sosial, serta sebagai tools yang berguna untuk aplikasi kamu seperti untuk BOT

132 lines (115 loc) 6.65 kB
/** * * [ *SCRAPE YOUTUBE STALK* ] * Created By Hann * * Channel: https://whatsapp.com/channel/0029Vaf07jKCBtxAsekFFk3i * **/ //📃: Gabut skrep langsung dari web nya aja 🗿 const axios = require('axios'); const cheerio = require('cheerio'); async function youtubeStalk(username) { try { const { data } = await axios.get(`https://youtube.com/@${username}?si=ECterZh_kG0zdihm`); const $ = cheerio.load(data); const ytInitialDataScript = $('script').filter((i, el) => { return $(el).html().includes('var ytInitialData ='); }).html(); const jsonData = ytInitialDataScript.match(/var ytInitialData = (.*?);/); if (jsonData && jsonData[1]) { const parsedData = JSON.parse(jsonData[1]); const channelMetadata = { username: null, subscriberCount: null, videoCount: null, avatarUrl: null, channelUrl: null, externalId: null, description: null, rssUrl: null, isFamilySafe: null }; if (parsedData.header && parsedData.header.pageHeaderRenderer) { const header = parsedData.header.pageHeaderRenderer; channelMetadata.username = header.content.pageHeaderViewModel.metadata.contentMetadataViewModel.metadataRows[0].metadataParts[0].text.content; if (header.content.pageHeaderViewModel.image.decoratedAvatarViewModel.avatar.avatarViewModel.image.sources.length > 0) { channelMetadata.avatarUrl = header.content.pageHeaderViewModel.image.decoratedAvatarViewModel.avatar.avatarViewModel.image.sources[0].url; } } if (parsedData.metadata && parsedData.metadata.channelMetadataRenderer) { const channelMeta = parsedData.metadata.channelMetadataRenderer; channelMetadata.description = channelMeta.description; channelMetadata.externalId = channelMeta.externalId; channelMetadata.rssUrl = channelMeta.rssUrl; channelMetadata.channelUrl = channelMeta.channelUrl; channelMetadata.isFamilySafe = channelMeta.isFamilySafe; const metadataRows = parsedData.header.pageHeaderRenderer.content.pageHeaderViewModel.metadata.contentMetadataViewModel.metadataRows; if (metadataRows.length > 1) { const subscriberRow = metadataRows[1]; subscriberRow.metadataParts.forEach(part => { if (part.text && part.text.content) { if (part.text.content.includes("subscribers")) { channelMetadata.subscriberCount = part.text.content; } else if (part.text.content.includes("videos")) { channelMetadata.videoCount = part.text.content; } } }); } } const videoDataList = []; const tabs = parsedData.contents.twoColumnBrowseResultsRenderer.tabs; if (tabs && tabs.length > 0) { const videosTab = tabs[0].tabRenderer.content.sectionListRenderer.contents; videosTab.forEach(item => { if (item.itemSectionRenderer) { item.itemSectionRenderer.contents.forEach(content => { if (content.shelfRenderer && content.shelfRenderer.content && content.shelfRenderer.content.horizontalListRenderer) { const items = content.shelfRenderer.content.horizontalListRenderer.items; items.forEach(video => { if (video.gridVideoRenderer) { const videoData = { videoId: video.gridVideoRenderer.videoId, title: video.gridVideoRenderer.title.simpleText, thumbnail: video.gridVideoRenderer.thumbnail.thumbnails[0].url, publishedTime: video.gridVideoRenderer.publishedTimeText.simpleText, viewCount: video.gridVideoRenderer.viewCountText.simpleText, navigationUrl: null, commonConfigUrl: null, duration: null }; if (video.gridVideoRenderer.navigationEndpoint.commandMetadata) { videoData.navigationUrl = video.gridVideoRenderer.navigationEndpoint.commandMetadata.webCommandMetadata.url; } if (video.gridVideoRenderer.navigationEndpoint.watchEndpoint && video.gridVideoRenderer.navigationEndpoint.watchEndpoint.watchEndpointSupportedOnesieConfig) { videoData.commonConfigUrl = video.gridVideoRenderer.navigationEndpoint.watchEndpoint.watchEndpointSupportedOnesieConfig.html5PlaybackOnesieConfig.commonConfig.url; } if (video.gridVideoRenderer.thumbnailOverlays) { video.gridVideoRenderer.thumbnailOverlays.forEach(overlay => { if (overlay.thumbnailOverlayTimeStatusRenderer) { videoData.duration = overlay.thumbnailOverlayTimeStatusRenderer.text.simpleText; } }); } videoDataList.push(videoData); } }); } }); } }); } return JSON.stringify({ author: "Herza", status: 200, data: channelMetadata, videoDataList }, null, 2); } else { return{ author: "Herza", status: 404, msg: "Data Tidak ada" }; } } catch (error) { return error.message; } } module.exports = { youtubeStalk}