From 3380b2a72c42a189facfc5444ab6caf4a5e29fd7 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Sat, 27 Nov 2021 14:32:43 +0100 Subject: [PATCH] Extract YouTube video ratings --- play-dl/YouTube/classes/Video.ts | 4 ++-- play-dl/YouTube/utils/extractor.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/play-dl/YouTube/classes/Video.ts b/play-dl/YouTube/classes/Video.ts index b61bf3f..6451af1 100644 --- a/play-dl/YouTube/classes/Video.ts +++ b/play-dl/YouTube/classes/Video.ts @@ -154,8 +154,8 @@ export class YouTubeVideo { this.views = parseInt(data.views) || 0; this.thumbnail = data.thumbnail || {}; this.channel = new YouTubeChannel(data.channel) || {}; - this.likes = (data.ratings?.likes as number) || 0; - this.dislikes = data.ratings?.dislikes || 0; + this.likes = data.likes || 0; + this.dislikes = data.dislikes || 0; this.live = !!data.live; this.private = !!data.private; this.tags = data.tags || []; diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index b2bb8a3..951723d 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -162,6 +162,10 @@ export async function video_basic_info(url: string, options: InfoOptions = {}): const format = []; const vid = player_response.videoDetails; const microformat = player_response.microformat.playerMicroformatRenderer; + const ratingButtons = + initial_response.contents.twoColumnWatchNextResults.results.results.contents.find( + (content: any) => content.videoPrimaryInfoRenderer + )?.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons ?? []; const video_details = new YouTubeVideo({ id: vid.videoId, url: `https://www.youtube.com/watch?v=${vid.videoId}`, @@ -182,6 +186,16 @@ export async function video_basic_info(url: string, options: InfoOptions = {}): views: vid.viewCount, tags: vid.keywords, averageRating: vid.averageRating, + likes: parseInt( + ratingButtons + .find((button: any) => button.toggleButtonRenderer.defaultIcon.iconType === 'LIKE') + ?.toggleButtonRenderer.defaultText.accessibility?.accessibilityData.label.replace(/\D+/g, '') ?? 0 + ), + dislikes: parseInt( + ratingButtons + .find((button: any) => button.toggleButtonRenderer.defaultIcon.iconType === 'DISLIKE') + ?.toggleButtonRenderer.defaultText.accessibility?.accessibilityData.label.replace(/\D+/g, '') ?? 0 + ), live: vid.isLiveContent, private: vid.isPrivate });