diff --git a/lib/src/reverse_engineering/pages/watch_page.dart b/lib/src/reverse_engineering/pages/watch_page.dart index e5a183d..09e0820 100644 --- a/lib/src/reverse_engineering/pages/watch_page.dart +++ b/lib/src/reverse_engineering/pages/watch_page.dart @@ -54,30 +54,34 @@ class WatchPage extends YoutubePage<_InitialData> { root.querySelector('meta[property="og:url"]') != null; /// - int get videoLikeCount => int.parse(_videoLikeExp - .firstMatch(root.outerHtml) - ?.group(1) - ?.stripNonDigits() - .nullIfWhitespace ?? - root - .querySelector('.like-button-renderer-like-button') - ?.text - .stripNonDigits() - .nullIfWhitespace ?? - '0'); + int get videoLikeCount => + initialData.likesCount ?? + int.parse(_videoLikeExp + .firstMatch(root.outerHtml) + ?.group(1) + ?.stripNonDigits() + .nullIfWhitespace ?? + root + .querySelector('.like-button-renderer-like-button') + ?.text + .stripNonDigits() + .nullIfWhitespace ?? + '0'); /// - int get videoDislikeCount => int.parse(_videoDislikeExp - .firstMatch(root.outerHtml) - ?.group(1) - ?.stripNonDigits() - .nullIfWhitespace ?? - root - .querySelector('.like-button-renderer-dislike-button') - ?.text - .stripNonDigits() - .nullIfWhitespace ?? - '0'); + int get videoDislikeCount => + initialData.disLikesCount ?? + int.parse(_videoDislikeExp + .firstMatch(root.outerHtml) + ?.group(1) + ?.stripNonDigits() + .nullIfWhitespace ?? + root + .querySelector('.like-button-renderer-dislike-button') + ?.text + .stripNonDigits() + .nullIfWhitespace ?? + '0'); String? get commentsContinuation => initialData.commentsContinuation; @@ -159,6 +163,60 @@ class WatchPlayerConfig implements PlayerConfigBase { class _InitialData extends InitialData { _InitialData(JsonMap root) : super(root); + late final int? likesCount = _getLikes(); + late final int? disLikesCount = _getDislikes(); + + int? _getLikes() { + if (root['contents'] != null) { + final likes = root + .get('contents') + ?.get('twoColumnWatchNextResults') + ?.get('results') + ?.get('results') + ?.getList('contents') + ?.firstWhereOrNull((e) => e['videoPrimaryInfoRenderer'] != null) + ?.get('videoPrimaryInfoRenderer') + ?.get('videoActions') + ?.get('menuRenderer') + ?.getList('topLevelButtons') + ?.firstWhereOrNull((e) => e['toggleButtonRenderer'] != null) + ?.get('toggleButtonRenderer') + ?.get('defaultText') + ?.get('accessibility') + ?.get('accessibilityData') + ?.getT('label'); + + return likes.parseInt(); + } + return null; + } + + int? _getDislikes() { + if (root['contents'] != null) { + final likes = root + .get('contents') + ?.get('twoColumnWatchNextResults') + ?.get('results') + ?.get('results') + ?.getList('contents') + ?.firstWhereOrNull((e) => e['videoPrimaryInfoRenderer'] != null) + ?.get('videoPrimaryInfoRenderer') + ?.get('videoActions') + ?.get('menuRenderer') + ?.getList('topLevelButtons') + ?.where((e) => e['toggleButtonRenderer'] != null) + .elementAtSafe(1) + ?.get('toggleButtonRenderer') + ?.get('defaultText') + ?.get('accessibility') + ?.get('accessibilityData') + ?.getT('label'); + + return likes.parseInt(); + } + return null; + } + JsonMap? getContinuationContext() { if (root['contents'] != null) { return root @@ -167,8 +225,8 @@ class _InitialData extends InitialData { ?.get('results') ?.get('results') ?.getList('contents') - ?.firstWhere((e) => e['itemSectionRenderer'] != null) - .get('itemSectionRenderer') + ?.firstWhereOrNull((e) => e['itemSectionRenderer'] != null) + ?.get('itemSectionRenderer') ?.getList('contents') ?.firstOrNull ?.get('continuationItemRenderer') diff --git a/lib/src/reverse_engineering/player/player_response.dart b/lib/src/reverse_engineering/player/player_response.dart index 4a33687..b765a83 100644 --- a/lib/src/reverse_engineering/player/player_response.dart +++ b/lib/src/reverse_engineering/player/player_response.dart @@ -96,8 +96,7 @@ class PlayerResponse { late final List muxedStreams = root .get('streamingData') ?.getList('formats') - ?.where((e) => e['url'] != null) - .map((e) => _StreamInfo(e, StreamSource.muxed)) + ?.map((e) => _StreamInfo(e, StreamSource.muxed)) .cast() .toList() ?? const [];