UNPKG

video-url-link

Version:

Get Video Download URL, Catch Video From Any Site.

90 lines (87 loc) 2.91 kB
const util = require('../util'); const Util = require('util'); const request = require('request').defaults({ jar: true }); var _ = require('lodash'); const AUTHORIZATION = 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA'; const API_GUEST = 'https://api.twitter.com/1.1/guest/activate.json'; const API_TIMELINE = 'https://api.twitter.com/2/timeline/conversation/%s.json?tweet_mode=extended' /** * Get twitter ID * * @param {string} url * @return {string} */ exports.getID = (url) => { var regex = /twitter\.com\/[^/]+\/status\/(\d+)/; var matches = regex.exec(url); return matches && matches[1]; }; /** * Get twitter Info * * @param {string} url * @param {Object} options * @param {Function(Error, Object)} callback */ exports.getInfo = (url, options, callback) => { if (typeof options === 'function') callback = options, options = {}; const id = exports.getID(url); if (id) { req({ url: API_GUEST, method: 'POST', }, options, (error, body) => { if (error) { callback(error); } else { let guest_token; try { guest_token = JSON.parse(body).guest_token; } catch (err) { return callback(new Error(errInfo)); } req({ url: Util.format(API_TIMELINE, id), method: 'GET', headers: { 'x-guest-token': guest_token } }, options, (error, body) => { if (error) { callback(error); } else { try { const info = JSON.parse(body); callback(null, { full_text: info['globalObjects']['tweets'][id]['full_text'], variants: info['globalObjects']['tweets'][id]['extended_entities']['media'][0]['video_info']['variants'] }); } catch (err) { return callback(new Error(errInfo)); } } }); } }); } else { callback(new Error('Not a twitter URL')); } } function req(opt, options, callback) { opt = _.defaultsDeep({ headers: { 'authorization': AUTHORIZATION } }, opt, options); request(opt, (error, response, body) => { if (error) { callback(error); } else { if (response.statusCode == 200 && body) { callback(null, body); } else { callback(new Error('twitter API error')); } } }); }