Skip to content

Commit e9a992b

Browse files
committed
[youtube] Fix extraction of age restricted videos
1 parent 35c1bdd commit e9a992b

6 files changed

Lines changed: 34 additions & 107 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,8 @@
1616
import org.schabi.newpipe.extractor.NewPipe;
1717
import org.schabi.newpipe.extractor.StreamingService;
1818
import org.schabi.newpipe.extractor.downloader.Downloader;
19-
import org.schabi.newpipe.extractor.exceptions.AgeRestrictedContentException;
20-
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
21-
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
22-
import org.schabi.newpipe.extractor.exceptions.GeographicRestrictionException;
23-
import org.schabi.newpipe.extractor.exceptions.PaidContentException;
24-
import org.schabi.newpipe.extractor.exceptions.ParsingException;
25-
import org.schabi.newpipe.extractor.exceptions.PrivateContentException;
26-
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
27-
import org.schabi.newpipe.extractor.exceptions.YoutubeMusicPremiumContentException;
19+
import org.schabi.newpipe.extractor.downloader.Response;
20+
import org.schabi.newpipe.extractor.exceptions.*;
2821
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
2922
import org.schabi.newpipe.extractor.localization.DateWrapper;
3023
import org.schabi.newpipe.extractor.localization.Localization;
@@ -792,11 +785,9 @@ public void onFetchPage(@Nonnull final Downloader downloader)
792785
}
793786

794787
private void fetchVideoInfoPage() throws ParsingException, ReCaptchaException, IOException {
795-
final String sts = getEmbeddedInfoStsAndStorePlayerJsUrl();
796-
final String videoInfoUrl = getVideoInfoUrl(getId(), sts);
797-
final String infoPageResponse = NewPipe.getDownloader()
798-
.get(videoInfoUrl, getExtractorLocalization()).responseBody();
799-
videoInfoPage.putAll(Parser.compatParseMap(infoPageResponse));
788+
final String videoInfoUrl = getVideoInfoUrl(getId());
789+
final Response videoInfoResponse = NewPipe.getDownloader().get(videoInfoUrl, getExtractorLocalization());
790+
videoInfoPage.putAll(Parser.compatParseMap(videoInfoResponse.responseBody()));
800791

801792
try {
802793
playerResponse = JsonParser.object().from(videoInfoPage.get("player_response"));
@@ -975,11 +966,11 @@ private JsonObject getVideoSecondaryInfoRenderer() throws ParsingException {
975966
}
976967

977968
@Nonnull
978-
private static String getVideoInfoUrl(final String id, final String sts) {
969+
private static String getVideoInfoUrl(final String id) {
979970
// TODO: Try parsing embedded_player_response first
980971
return "https://www.youtube.com/get_video_info?" + "video_id=" + id +
981-
"&html5=1&eurl=https://youtube.googleapis.com/v/" + id +
982-
"&sts=" + sts + "&ps=default&gl=US&hl=en";
972+
"&eurl=https://youtube.googleapis.com/v/" + id +
973+
"&html5=1&c=TVHTML5&cver=6.20180913&gl=US&hl=en";
983974
}
984975

985976
private Map<String, ItagItem> getItags(final String streamingDataKey,
@@ -1121,7 +1112,7 @@ public Privacy getPrivacy() {
11211112
public String getCategory() {
11221113
return playerResponse.getObject("microformat")
11231114
.getObject("playerMicroformatRenderer")
1124-
.getString("category");
1115+
.getString("category", EMPTY_STRING);
11251116
}
11261117

11271118
@Nonnull

extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/stream/YoutubeStreamExtractorAgeRestrictedTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static void setUp() throws Exception {
5757
@Nullable @Override public String expectedErrorMessage() { return "Sign in to confirm your age"; }
5858
@Override public boolean expectedHasSubtitles() { return false; }
5959

60-
@Override public String expectedCategory() {return "Entertainment"; }
60+
@Override public String expectedCategory() { return ""; } // Unavailable on age restricted videos
6161
@Override public String expectedLicence() { return "YouTube licence"; }
6262
@Override
6363
public List<String> expectedTags() {

extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/stream/ageRestricted/generated_mock_0.json

Lines changed: 5 additions & 5 deletions
Large diffs are not rendered by default.

extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/stream/ageRestricted/generated_mock_1.json

Lines changed: 5 additions & 5 deletions
Large diffs are not rendered by default.

extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/stream/ageRestricted/generated_mock_2.json

Lines changed: 14 additions & 19 deletions
Large diffs are not rendered by default.

extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/stream/ageRestricted/generated_mock_3.json

Lines changed: 0 additions & 59 deletions
This file was deleted.

0 commit comments

Comments
 (0)