SuspiciousLookingOwl / youtubei

Get Youtube data such as videos, playlists, channels, video information & comments, related videos, up next video, and more!
https://suspiciouslookingowl.github.io/youtubei
MIT License
241 stars 50 forks source link

Failing to fetch videos #67

Closed gregz07 closed 2 years ago

gregz07 commented 2 years ago

Hello first of all kudos for this library and thanks for all your work, allow me to ask some questions...

I had the following code working about a week ago, no it fails to fetch videos..

await youtube.findOne(channel, { type: 'channel' });

Gives the following object

//////////////////////////////////////////////////////// BaseChannel { client: Client { http: HTTP { cookie: 'CONSENT=PENDING+423; expires=Sun, 27-Oct-2024 19:56:32 GMT; path=/; domain=.youtube.com; Secure', defaultHeaders: [Object], defaultFetchOptions: {}, defaultClientOptions: [Object] } }, videos: ChannelVideos { client: Client { http: [HTTP] }, items: [], strictContinuationCheck: true, continuation: null, channel: [Circular 1] }, playlists: ChannelPlaylists { client: Client { http: [HTTP] }, items: [], strictContinuationCheck: true, continuation: null, channel: [Circular 1] }, id: 'UCItHdUEqlpfvDlcCeyZwH6w', name: 'Men of the West', thumbnails: Thumbnails(2) [ { url: '//yt3.ggpht.com/dDiX7N6tEMWmKHBWTKkdQmKXdUupGPt9jgpbpR7ODMe7mnfdKP4StAUE-5DzEt6s4dulieQp=s88-c-k-c0x00ffffff-no-rj-mo', width: 88, height: 88 }, { url: '//yt3.ggpht.com/dDiX7N6tEMWmKHBWTKkdQmKXdUupGPt9jgpbpR7ODMe7mnfdKP4StAUE-5DzEt6s4dulieQp=s176-c-k-c0x00ffffff-no-rj-mo', width: 176, height: 176 } ], videoCount: 336, subscriberCount: '371K subscribers' } ////////////////////////////////////////////////////////

When then trying to fetch all videos..

await channelInfo.videos.next(0);

Throws the following error

TypeError: Cannot read properties of undefined (reading '0') at Function.parseTabData (C:\Code\Discord bot\yadb\node_modules\youtubei\dist\cjs\classes\BaseChannel\BaseChannelParser.js:24:118) at ChannelVideos. (C:\Code\Discord bot\yadb\node_modules\youtubei\dist\cjs\classes\BaseChannel\ChannelVideos.js:47:65) at Generator.next () at fulfilled (C:\Code\Discord bot\yadb\node_modules\youtubei\dist\cjs\classes\BaseChannel\ChannelVideos.js:5:58) at processTicksAndRejections (node:internal/process/task_queues:96:5)

Is this a cookie issue ? Am I maxed out on requests ? That's why videos are coming up as null ?? Any idea ?

SuspiciousLookingOwl commented 2 years ago

I can't consistently reproduce this, sometimes it throws an error when I do channel.videos.next(0), and sometimes it doesn't, I will investigate further

const channel = await client.findOne("...", { type: "channel" });
await channel?.videos.next();

I suspect this is caused by the recent YouTube update which separates "Shorts" and "Lives" videos into its own tabs on channel page (instead of putting them together on "Videos" tab), and since YouTube doesn't push this update to all users at once, it's hard to adjust the parser for the new update.

ovnro commented 2 years ago

Same problem here! Is there a fix for this?

gregz07 commented 2 years ago

@SuspiciousLookingOwl Thanks for the info. Do you recommend any fixes then ? Any workarounds ?

SuspiciousLookingOwl commented 2 years ago

This commit should solve this issue, can you guys give it a try and let me know if it's working well?

You can install the latest dev branch by running npm i git://github.com/suspiciouslookingowl/youtubei.git#dist (you might need to npm uninstall youtubei first)

ovnro commented 2 years ago

Hello,

I can confirm that the fix works. Thank you very much!

markcellus commented 2 years ago

Thanks @SuspiciousLookingOwl. Does YT randomly just change the "rendererer" data? :laughing:

SuspiciousLookingOwl commented 2 years ago

Not really "randomly", it's usually when they updated something on the UI

SuspiciousLookingOwl commented 2 years ago

Available on v1.0.0-rc.6

gregz07 commented 2 years ago

Thanks @SuspiciousLookingOwl , I also note it has been fixed on my side.