UNPKG

fetch-youtube-uploads

Version:

Returns a YouTube channel's latest uploads. Fetching is done with user requests instead of APIs.

6 lines 2.86 kB
/*! *** fetch-youtube-uploads 2.0.0 *** Copyright © 2019, Jaid <jaid.jsx@gmail.com> (https://github.com/Jaid) *** See https://github.com/Jaid/fetch-youtube-uploads#readme !*/ var e,t;e=global,t=function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}([function(e,t){e.exports=require("execall")},function(e,t){e.exports=require("got")},function(e,t){e.exports=require("html-entities")},function(e,t){e.exports=require("p-retry")},function(e,t,r){r.r(t);var n=r(0),o=r.n(n),u=r(1),i=r.n(u),s=r(2),c=r(3),l=r.n(c),a=/href="\/watch\?v=(?<id>[\w-]+)" rel="nofollow">(?<title>[^<]+)<\/a><span class="accessible-description".+?($|class="channels-content-item)/gus;r.d(t,"gotClient",(function(){return d})),r.d(t,"NoResultsError",(function(){return p})),r.d(t,"fetchUploadsFromHtml",(function(){return y})),r.d(t,"fetchUploadsForUser",(function(){return m}));const f=new s.AllHtmlEntities,d=i.a.extend({prefixUrl:"https://youtube.com",headers:{"User-Agent":"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"}});class p extends Error{constructor(...e){super(...e),Error.captureStackTrace(this,p)}}function b(e){return f.decode(e).replace("\n"," ").replace(/\s+/g," ").trim()}function y(e){return o()(a,e).map(e=>{const t=e.match.includes("reminder-set-text=");return{id:e.subMatches[0],title:b(e.subMatches[1]),published:!t}})}const h=async(e,t={})=>{const r=t.retries||3,n=async()=>{let r;return r=t.html?t.html:await async function(e){const{statusCode:t,url:r,body:n,statusMessage:o}=await d(e);if(200!==t)throw new Error(`Requested ${r}, got ${t} ${o}`);return n}(e),y(r)};return r>1?l()(async()=>{const e=await n();if(null==e||!e.length)throw new p;return e},{retries:r}):n()},m=(e,t)=>h(`user/${e}/videos`,t);t.default=(e,t)=>h(`channel/${e}/videos`,t)}])},"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["fetch-youtube-uploads"]=t():e.fetchYoutubeUploads=t();