diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..315c1b9 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: hexah +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/CHANGELOG.md b/CHANGELOG.md index 9012d7e..381656a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,16 +3,23 @@ - Only throw custom exceptions from the library. - `getUploadsFromPage` no longer throws. -## 1.15.2 -- Fix extraction for same videos (#76) - -## 1.5.1 +## 1.6.0 - BREAKING CHANGE: Renamed `getVideosAsync` to `getVideos`. - Implemented `getVideosFromPage` which supersedes `queryFromPage`. - Implemented JSON Classes for reverse engineer. - Added `forceWatchPage` to the video client to assure the fetching of the video page. (ATM useful only if using the comments api) -- Remove adaptive streams. These are not used anymore. - +- Remove adaptive streams. These are not used anymore. +- Implement `channelClient.getAboutPage` and `getAboutPageByUsername` to fetch data from a channel's about page. + +## 1.15.2 +- Fix extraction for same videos (#76) + +## 1.5.2 +- Fix extraction for same videos (#76) + +## 1.5.1 +- Fix Video Search: https://github.com/Tyrrrz/YoutubeExplode/issues/438 + ## 1.5.0 - BREAKING CHANGE: Renamed `Container` class to `StreamContainer` to avoid conflicting with Flutter `Container`. See #66 diff --git a/lib/src/reverse_engineering/responses/playlist_response.dart b/lib/src/reverse_engineering/responses/playlist_response.dart index 0e4d75f..1c8479e 100644 --- a/lib/src/reverse_engineering/responses/playlist_response.dart +++ b/lib/src/reverse_engineering/responses/playlist_response.dart @@ -67,7 +67,12 @@ class PlaylistResponse { var url = 'https://youtube.com/search_ajax?style=json&search_query=' '${Uri.encodeQueryComponent(query)}&page=$page&hl=en'; return retry(() async { - var raw = await httpClient.getString(url, validate: false); + var raw = await httpClient.getString(url, + validate: false, + headers: const { + 'x-youtube-client-name': '56', + 'x-youtube-client-version': '20200911' + }); return PlaylistResponse.parse(raw); }); } diff --git a/test/closed_caption_test.dart b/test/closed_caption_test.dart index 3085d4d..1d6e148 100644 --- a/test/closed_caption_test.dart +++ b/test/closed_caption_test.dart @@ -29,9 +29,9 @@ void main() { var trackInfo = manifest.getByLanguage('en'); var track = await yt.videos.closedCaptions.get(trackInfo); var caption = - track.getByTime(const Duration(hours: 0, minutes: 10, seconds: 41)); + track.getByTime(const Duration(hours: 0, minutes: 13, seconds: 22)); var captionPart = - caption.getPartByTime(const Duration(milliseconds: 650)); + caption.getPartByTime(const Duration(milliseconds: 200)); expect(caption, isNotNull); expect(captionPart, isNotNull);