}, function(notFound, pleerData) { if (notFound) { ytSearch(notFound.songTitle, config.youtube, function(err, results) { if (err || results.length === 0) { console.log('Song not found on YouTube either:'.yellow, err); } else if (results.length > 0) { dl.getMP3({ videoId: results[0].id, name: notFound.filename }, function(err, res) { if (err) { throw err; } else { console.log('YouTube: ' + results[0].title + ' was downloaded: ' + res.file); updatePlaylistDataAfterDownload(notFound.spotifyId); } }); } }); } else { downloadFromPleer(pleerData, function(err, pleerData) { if (err) { console.log('Error on downloading from Pleer', err); } console.log('Downloaded from Pleer:'.magenta, pleerData.filename); updatePlaylistDataAfterDownload(pleerData.spotifyId); }); } });
'url:youtube.com': function (bot, url, nick, to) { var query = url.query if (typeof query === 'string') { // docs say it could already be an object var params = url.query.split('&') query = {} // this is dumb: for (var i = 0; i < params.length; i++) { var curr = params[i].split('=') curr.push(null) // to prevent ?foo breaking things query[curr[0]] = curr[1] } } if (query.v) { // TODO: remove this code duplication var opts = bot.config.get('youtube') || {} opts.maxResults = 1 opts.type = 'video,channel' // this is particularly dumb: yt(query.v, opts, function (err, results) { if (err) { console.log('YouTube error', err, err.stack) return } if (results.length !== 0) { console.log(results[0]) bot.say(to, results[0].title) } }) } }
sources.youtube = function (terms, done) { youtube(terms.artist + ' ' + terms.title, { maxResults: 1, startIndex: 1 }, function (err, video) { if (err) { return done(err); } try { video = video[0].url; } catch (e) { return done(new Error('No song found.')); } video = ytdl(video, { filter: function (format) { return format.container === 'mp4'; } }); video = ffmpeg(video).format('mp3').pipe(); done(null, video); }); };
router.get('/search', function(req, res) { var query = req.query.q; yt(query + " review", {maxResults:10,startIndex:1}, function(err, results){ if(err){ res.send("Couldn't execute query:" + err).end(); } res.json(results); }); });
router.post('/search', function(req, res) { var search = require('youtube-search'); var opts = { maxResults: 10, startIndex: 1 }; search(req.body.query, opts, function(err, results) { if(err) return res.status(500).json({message:'Unable to fetch results from YouTube.'}); res.json({"search-results":results}); }); });
app.post('/searchVideoId', jsonParser, function(req, res) { var opts = { maxResults: 1, textFormat: 'plainText', key: key }; search(req.body.dataId, opts, function(err, results) { if(err) res.send(err); res.send(results); }); });
app.post('/search', jsonParser, function(req, res) { var opts = { maxResults: 12, regionID: 'US', type: 'video', textFormat: 'plainText', key: key, }; search(req.body.term, opts, function(err, results) { if(err) res.send(err); res.send(results); }); });
command: function (bot, msg) { var opts = bot.config.get('youtube') || {} opts.maxResults = 1 opts.type = 'video,channel' yt(msg.body, opts, function (err, results) { if (err) { bot.say(msg.to, msg.nick + ': ' + err) } else if (results.length < 1) { bot.say(msg.to, msg.nick + ': no results found') } else { var result = results[0] bot.say(msg.to, msg.nick + ': ' + result.link + ' ' + result.title) } }) }
var search = function(val) { ytSearch(val, { maxResults: 10 }, function(err, results) { if(err) return console.error(err); list.clear(); results.forEach(function(result) { list.addItem({ text: result.title, url: result.url, thumbnail: result.thumbnails.shift().url }); }); }); }
router.post("/videos/search", (req, res, next) => { let searchTerm = req.body.searchTerm; if (searchTerm.startsWith("/yt")) { searchTerm = searchTerm.replace("/yt", ""); youtubeSearch(searchTerm, youtubeSearchOpts, function(err, results) { if (err) return console.log(err); db.getVideosWhereTitleLikeFromDB(searchTerm, function(localData) { var finalResults = []; //console.log(localData); _.forEach(results, function(r) { let found = _.find(localData, { "ytid": r.id }); finalResults.push({ title: r.title, ytid: r.id, group: r.group, isArchived: (found !== undefined) ? true : false }); }); res.json(finalResults); }); }); } else if (searchTerm.startsWith("/g")) { searchTerm = searchTerm.replace("/g", "").trim(); if (searchTerm === "all") { db.getAllVideosFromDB(function(data) { res.json(data); }); } else { db.getAllVideosForGroupFromDB(searchTerm, function(data) { res.json(data); }); } } else { db.getVideosWhereTitleLikeFromDB(searchTerm, function(data) { res.json(data); }); } });
Youtubedl.search = function(req, res, query, cb) { switch (query.target) { case "youtube": var search = require('youtube-search'); search(query.text, { maxResults: 10, startIndex: 1 }, function(err, results) { if(err) return cb(err); var result = []; for (var i in results) { result.push({ title: results[i].title, url: results[i].url }); } cb(null, result); }); break; default: // enforce var whereArray = []; if (query.text) { whereArray.push({slug: {like: '.*'+query.text.toLowerCase()+'.*'}}); } if (query.persist) { for (var i=0; i<query.persist.length; i++) { whereArray.push({youtubedl_id: query.persist[i].youtubedl_id}); } } Youtubedl.find({where: (_.isEmpty(whereArray)?{}:{or: whereArray}), limit: 10, order: "time DESC"}, function(err, objects) { if (err) { return cb(err); } var result = []; for (var i=0; i<objects.length; i++) { result.push({ title: objects[i].title, state: objects[i].state, youtubedl_id: objects[i].youtubedl_id, url: objects[i].url }); } cb(null, result); }); } };
youtubeBestVideo.findBestMusicVideo = function(title, opts, cb) { var duration = opts.duration || null apiKey = opts.apiKey if (!apiKey) { throw new Error('no api key specified') } var filters = [_videoTitleFilter, _whitelistWordsFilter, _blacklistWordsFilter]; if (duration) { filters.push(_videoDurationFilter); } youtubeSearch(title, { key: apiKey }, function(err, results) { if(err) cb(err); var bestOne = null; var bestRating = 0; // If there are results if (results !== undefined && results.length>0) { results.forEach(function(result, index) { var rating = 0; for(var i = 0; i < filters.length; i++) { rating += filters[i].call(this, result, title, duration); } if(rating > bestRating) { bestOne = result; bestRating = rating; } if(index === results.length - 1) { cb(null, bestOne); } }); } // If there are no results else { cb("error no results found"); } }); };
router.get('/video/:name', apicache('1 day'), function(req, res){ req.apicacheGroup = req.params.name; let name = req.params.name; let opt = { maxResults: 5, key: youtubeKey }; youtubeSearch(name, opt, (err, results) => { if(err){ console.error(err); res.status(400).send('Ooops something went wrong'); return; } res.send(results); }); });
}, function(d) { if(d.err) return say(d, 2); var title = []; if(d.artist !== '') { info.last_artist = d.artist; title.push(d.artist); } if(d.name !== '') title.push(d.name); yt_search(title.join(' '), yt_opts, function(err, results) { if(err) { CHAN.log.error(err.stack) say({err: 'an error has occured'}, 2); b.users.owner(false, function(owner_nicks) { if(owner_nick !== null) { owner_nicks.forEach(function(owner_nick) { say({err: err.stack}, 3, {skip_verify: true, to: owner_nick}); }); } }); return; } if(!results || results.length === 0){ say({err: 'no youtube video found for last played song'}, 2) return; } var str = CHAN.t.highlight(x.no_highlight(args.irc_nick)) + ' '; str += d.now_playing ? 'is now playing: ' + CHAN.t.success(results[0].title || '') : 'last played: ' + CHAN.t.null(results[0].title || ''); str += ' ' + results[0].link; say(str, 1, {skip_verify: true}); }); });
return new Promise((resolve, reject) => { youTubeSearch(`${term} acoustic cover`, youtubeOpts, (err, results) => { let validResults = results.filter((result) => { let title = result.title let predicate = ( title.match(/cover/i) && title.match(/acoustic/i) && !title.match(/live/i) && !title.match(/lyrics/i) ) return predicate }) if (err) { reject(err) } else if (validResults.length < 2) { reject('noJams') } else { resolve(validResults.splice(0, 5).map((result) => result.id)) } }) })
var search = function (message, cb) { var messageSplit = message.content.split(' '); var messageClean = ""; if (typeof(messageSplit[1]) !== 'undefined' && messageSplit[1]) { for (var i = 1; i < messageSplit.length; i++) { messageClean = messageClean + " " + messageSplit[i]; } youtubesearch(messageClean, opts, function (err, results) { if (err) { winston.info(err); return cb(':x: '); } if (results.length > 0) { cb(null, results[0]); } else { cb(':x: '); } }); } else { cb(t('qa.empty-search', {lngs: message.lang})); } };
module.exports = function(track, callback) { var opts = { maxResults: 1, key: 'AIzaSyCbJ0IAbAa_lBZkwGlIIvO6N8v4WwKxI8I', type: 'video' } search(toString(track), opts, function(err, results) { if (err) { callback(err, null) }else { callback(null, results[0]) } }) function toString(track) { return track.artists.join(" ") + " - " + track.name } }
youtube: function(args, callback) { // This command requires arguments. if (!args) { return callback(); } if (!process.env.GOOGLE_API_KEY) { console.warn('GOOGLE_API_KEY environment variable is not set'); return callback(); } youtubeSearch(args, { key: process.env.GOOGLE_API_KEY, type: 'video' }, function(err, results) { if (err) { return callback(); } if (!results || !results.length) { return callback(); } callback(null, `/youtube ${args}\n${results[0].link}`); }); }