var request = require('request'); var Promise = require('promise'); var google = require('googleapis'); var apikey = 'AIzaSyBCLnmbmjjHvfScHNj8PBqINjoyLTAXEjg'; var youtube = google.youtube('v3'); var requestPromise = function (url, urlArgs) { var promise = new Promise(function(resolve, reject) { request({ url: url, qs: urlArgs, json: false }, function(error, response, body) { if(!error && response.statusCode == 200) { resolve(JSON.parse(body)); } else { reject(error); } }); }); return promise; }; module.exports = function(config) { 'use strict'; return { getYoutubeVideoById: function(videoId) { var promise = new Promise(function(resolve, reject) { var videosParams = { part: 'snippet,contentDetails,statistics', id: videoId, key: apikey }; youtube.videos.list(videosParams, function(err, resp) { //console.log('respo', resp); if(resp.items.length <= 0) { reject('No results'); return; } var duration = resp.items[0].contentDetails.duration; var formattedTime = duration.replace("PT","").replace("H","t ").replace("M","m ").replace("S","s"); var data = { videoId: videoId, url: 'https://youtu.be/'+videoId, title: resp.items[0].snippet.title, channelTitle: resp.items[0].snippet.channelTitle, statistics: resp.items[0].statistics, duration: formattedTime }; resolve(data); }); }); return promise; }, getYoutubeVideo: function(query) { var params = { part: 'snippet', q: query, type: 'video', order: 'viewCount', key: apikey }; var promise = new Promise(function(resolve, reject) { youtube.search.list(params, function(err, resp) { if (err) { console.log('An error occured', err); reject(err); } //console.log(resp.items[0].snippet.title); //console.log(resp.items[0].snippet.channelTitle); //console.log(resp, videoId); if(resp.items.length <= 0) { reject('No results'); return; } var videoId = resp.items[0].id.videoId; var data = { videoId: videoId, url: 'https://youtu.be/'+videoId, title: resp.items[0].snippet.title, channelTitle: resp.items[0].snippet.channelTitle }; var videosParams = { part: 'snippet,contentDetails,statistics', id: videoId, key: apikey }; youtube.videos.list(videosParams, function(err2, resp2) { //console.log('respo', resp2); if(resp2.items.length <= 0) { reject('No results'); return; } data.statistics = resp2.items[0].statistics; var duration = resp2.items[0].contentDetails.duration; var formattedTime = duration.replace("PT","").replace("H","t ").replace("M","m ").replace("S","s"); data.duration = formattedTime; resolve(data); }); }); }); return promise; } }; };