UNPKG

article-parser

Version:

Extract clean article data from given URL.

81 lines (68 loc) 2.05 kB
// parsers/extensions -> YouTube var {extract} = require('oembed-parser'); var { YouTubeKey } = require('../../config'); var loadJSON = require('../../utils/loadJSON'); var getYtid = require('../../utils/getYtid'); var toSecond = require('../../utils/toSecond'); const URL = `https://www.googleapis.com/youtube/v3/videos?part=contentDetails&key=${YouTubeKey}`; var getDuration = (vid) => { return new Promise((resolve, reject) => { let url = `${URL}&id=${vid}`; return loadJSON(url).then((ob) => { if (ob && ob.items) { let items = ob.items; if (items.length > 0) { let item = items[0].contentDetails || false; if (item && item.duration) { let duration = toSecond(item.duration); return resolve(duration); } } } return reject(new Error('Invalid format')); }).catch((e) => { return reject(e); }); }); }; var parser = { schemes: [ '*youtube.com/*', '*youtu.be/*' ], extract: (url) => { return new Promise((resolve, reject) => { let vid = getYtid(url); if (!vid) { throw new Error('No video ID found'); } url = `https://www.youtube.com/watch?v=${vid}`; return extract(url).then((data) => { return { vid, title: data.title, canonicals: [ url, `https://youtu.be/${vid}`, `https://www.youtube.com/v/${vid}`, `https://www.youtube.com/embed/${vid}` ], content: `<iframe src="https://www.youtube.com/embed/${vid}?feature=oembed" frameborder="0" allowfullscreen></iframe>`, author: data.author_name, source: data.provider_name, image: data.thumbnail_url }; }).then((art) => { return getDuration(art.vid).then((duration) => { art.duration = duration; return resolve(art); }); }).catch((err) => { return reject(err); }); }); } }; module.exports = parser;