From 0186ad3d7a3ee94df0214cafeca323bd9b67d31c Mon Sep 17 00:00:00 2001 From: Mattia Date: Thu, 1 Oct 2020 18:04:56 +0200 Subject: [PATCH] New version 1.15.2 Fix extraction for same videos. This closes #76 --- CHANGELOG.md | 3 +++ lib/src/reverse_engineering/responses/embed_page.dart | 2 +- lib/src/reverse_engineering/responses/player_source.dart | 2 +- lib/src/reverse_engineering/responses/watch_page.dart | 8 +++++--- lib/src/videos/streams/streams_client.dart | 1 + pubspec.yaml | 2 +- test/streams_test.dart | 2 +- test/video_test.dart | 2 +- 8 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 655121c..465bc74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ - Only throw custom exceptions from the library. - `getUploadsFromPage` no longer throws. +## 1.15.2 +- Fix extraction for same videos (#76) + ## 1.5.1 - Fix Video Search: https://github.com/Tyrrrz/YoutubeExplode/issues/438 diff --git a/lib/src/reverse_engineering/responses/embed_page.dart b/lib/src/reverse_engineering/responses/embed_page.dart index f404247..e4e79d7 100644 --- a/lib/src/reverse_engineering/responses/embed_page.dart +++ b/lib/src/reverse_engineering/responses/embed_page.dart @@ -10,7 +10,7 @@ import '../youtube_http_client.dart'; /// class EmbedPage { static final _playerConfigExp = - RegExp(r"yt\.setConfig\({'PLAYER_CONFIG':(.*)}\);"); + RegExp(r"'PLAYER_CONFIG':\s*(\{.*\})\}"); final Document _root; _PlayerConfig _playerConfig; diff --git a/lib/src/reverse_engineering/responses/player_source.dart b/lib/src/reverse_engineering/responses/player_source.dart index 68ee871..81df2f2 100644 --- a/lib/src/reverse_engineering/responses/player_source.dart +++ b/lib/src/reverse_engineering/responses/player_source.dart @@ -30,7 +30,7 @@ class PlayerSource { var val = RegExp(r'(?<=invalid namespace.*?;[\w\s]+=)\d+') .stringMatch(_root) ?.nullIfWhitespace ?? - RegExp(r'(?<=this\.signatureTimestamp=)\d+"') + RegExp(r'(?<=this\.signatureTimestamp=)\d+') .stringMatch(_root) ?.nullIfWhitespace; if (val == null) { diff --git a/lib/src/reverse_engineering/responses/watch_page.dart b/lib/src/reverse_engineering/responses/watch_page.dart index ea8f56a..7d53aa7 100644 --- a/lib/src/reverse_engineering/responses/watch_page.dart +++ b/lib/src/reverse_engineering/responses/watch_page.dart @@ -86,11 +86,13 @@ class WatchPage { ?.nullIfWhitespace ?? '0'); + static final _playerConfigExp = RegExp(r'ytplayer\.config\s*=\s*(\{.*\}\});'); + /// _PlayerConfig get playerConfig => - _playerConfig ??= _PlayerConfig(json.decode(_matchJson(_extractJson( - _root.getElementsByTagName('html').first.text, - 'ytplayer.config = ')))); + _playerConfig ??= _PlayerConfig(json.decode(_playerConfigExp + .firstMatch(_root.getElementsByTagName('html').first.text) + ?.group(1))); String _extractJson(String html, String separator) { return _matchJson( diff --git a/lib/src/videos/streams/streams_client.dart b/lib/src/videos/streams/streams_client.dart index aae8935..d55df7c 100644 --- a/lib/src/videos/streams/streams_client.dart +++ b/lib/src/videos/streams/streams_client.dart @@ -218,6 +218,7 @@ class StreamsClient { // We can try to extract the manifest from two sources: // get_video_info and the video watch page. // In some cases one works, in some cases another does. + try { var context = await _getStreamContextFromVideoInfo(videoId); return _getManifest(context); diff --git a/pubspec.yaml b/pubspec.yaml index 6fcb695..64e3610 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: youtube_explode_dart description: A port in dart of the youtube explode library. Supports several API functions without the need of Youtube API Key. -version: 1.5.1 +version: 1.5.2 homepage: https://github.com/Hexer10/youtube_explode_dart environment: diff --git a/test/streams_test.dart b/test/streams_test.dart index f3f4944..0dda6b6 100644 --- a/test/streams_test.dart +++ b/test/streams_test.dart @@ -14,7 +14,7 @@ void main() { var data = { '9bZkp7q19f0', -// 'SkRSXFQerZs', age restricted videos are not supported anymore. + 'SkRSXFQerZs', 'hySoCSoH-g8', '_kmeFXjjGfk', 'MeJVWBSsPAY', diff --git a/test/video_test.dart b/test/video_test.dart index f238677..46e3786 100644 --- a/test/video_test.dart +++ b/test/video_test.dart @@ -25,7 +25,7 @@ void main() { expect(video.uploadDate.millisecondsSinceEpoch, inInclusiveRange(rangeMs - 86400000, rangeMs + 86400000)); expect(video.description, contains('246pp')); - expect(video.duration, const Duration(minutes: 1, seconds: 49)); + expect(video.duration, const Duration(minutes: 1, seconds: 48)); expect(video.thumbnails.lowResUrl, isNotEmpty); expect(video.thumbnails.mediumResUrl, isNotEmpty); expect(video.thumbnails.highResUrl, isNotEmpty);