UNPKG

fetchyt

Version:

Search musics on youtube and return your links

113 lines (80 loc) 2.89 kB
'use strict' const { Cluster } = require("puppeteer-cluster") async function robot(musics, type = "") { const cluster = await Cluster.launch({ concurrency:Cluster.CONCURRENCY_CONTEXT, maxConcurrency:10, puppeteerOptions: { args: ['--no-sandbox'] } }) await cluster.task(fetchMusicsOnYoutube) const JSONLinks = {} await runForAllMusics(musics) return JSONLinks async function runForAllMusics(musics) { for(const music in musics){ const keyName = musics[music].replace(/\s/g, "").toLowerCase() //JSONLinks[keyName] = await fetchMusicsOnYoutube(musics[music]) //JSONLinks[keyName] = await cluster.queue({music:musics[music]}) await cluster.queue({music:musics[music], keyname: keyName }) } await cluster.idle() await cluster.close() } async function fetchMusicsOnYoutube({page, data: {music, keyname}}) { await page.goto(`https://www.youtube.com/results?search_query=${music} ${type}`) const videos = await page.evaluate(async() => { const videoTitle = document.querySelectorAll("yt-formatted-string.ytd-video-renderer") const elements = document.querySelectorAll(".ytd-thumbnail") const thumbnails = document.querySelectorAll(".yt-img-shadow") //document.querySelectorAll(".ytd-video-renderer") //yt-formatted-string.ytd-video-renderer const titlesArray = [...videoTitle] const array = [...elements] const arrayThumb = [...thumbnails] const title = titlesArray.map(({innerText}) => ({ innerText })) const links = array.map(({href}) => ({ href })) const thumbLink = arrayThumb.map(({src}) => ({ src })) return { links, thumbLink, title } }) const links = videos.links.filter((item) => { if(item.href){ return true } return false }) const thumbs = videos.thumbLink.filter((item) => { if(item.src){ return true } return false }) const allTitles = videos.title.filter((item) => { if(item.innerText){ return true } return false }) //console.log({ // href: links[0].href, // thumbnail: thumbs[0].src, // title:allTitles[0].innerText //}) JSONLinks[keyname] = { href: links[0].href, thumbnail: thumbs[0].src, title:allTitles[0].innerText } return } } module.exports = robot