node-yt-search
Version:
Search in YouTube With NodeJS
53 lines (49 loc) • 1.47 kB
JavaScript
const qs = require('querystring');
let xhr = require('xhr');
if (!xhr.open) xhr = require('request');
const SEARCH = 'https://www.googleapis.com/youtube/v3/search?';
const VIDEO = 'https://www.googleapis.com/youtube/v3/videos?';
const videos = (params, fn) => {
xhr({
url: `${VIDEO}${qs.stringify(params)}`,
methods: 'GET',
}, (err, res, body) => {
if (err) return fn(err);
try {
const data = JSON.parse(body);
if (data.error) return fn(data.error);
return fn(null, data);
} catch (err) {
return fn(err);
}
});
};
module.exports = (term, opts, fn) => {
let params = {
q: term,
pageToken: opts.pageToken || '',
part: opts.part || 'snippet',
};
params = Object.assign(params, opts);
xhr({
url: `${SEARCH}${qs.stringify(params)}`,
method: 'GET',
}, (err, res, body) => {
if (err) return fn(err);
try {
const data = JSON.parse(body);
if (data.error) return fn(data.error);
const pageInfo = {
totalResults: data.pageInfo.totalResults,
resultsPerPage: data.pageInfo.resultsPerPage,
nextPageToken: data.nextPageToken,
prevPageToken: data.prevPageToken,
};
params.part = params.videoPart || 'snippet,contentDetails,statistics';
params.id = data.items.map(item => (item.id.videoId)).toString();
videos(params, (err, results) => fn(err, results, pageInfo));
} catch (err) {
return fn(err);
}
});
};