Skip to content

Commit 6dc5ab4

Browse files
committed
find playerUrl in another place when assetsPattern regex fails
1 parent db0ef83 commit 6dc5ab4

1 file changed

Lines changed: 26 additions & 3 deletions

File tree

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

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import com.grack.nanojson.JsonArray;
44
import com.grack.nanojson.JsonObject;
55
import com.grack.nanojson.JsonParser;
6+
import org.jsoup.Jsoup;
7+
import org.jsoup.nodes.Document;
8+
import org.jsoup.nodes.Element;
9+
import org.jsoup.select.Elements;
610
import org.mozilla.javascript.Context;
711
import org.mozilla.javascript.Function;
812
import org.mozilla.javascript.ScriptableObject;
@@ -740,11 +744,30 @@ private EmbeddedInfo getEmbeddedInfo() throws ParsingException, ReCaptchaExcepti
740744
final String embedPageContent = downloader.get(embedUrl, getExtractorLocalization()).responseBody();
741745

742746
// Get player url
743-
final String assetsPattern = "\"assets\":.+?\"js\":\\s*(\"[^\"]+\")";
744-
String playerUrl = Parser.matchGroup1(assetsPattern, embedPageContent)
745-
.replace("\\", "").replace("\"", "");
747+
String playerUrl = null;
748+
try {
749+
final String assetsPattern = "\"assets\":.+?\"js\":\\s*(\"[^\"]+\")";
750+
playerUrl = Parser.matchGroup1(assetsPattern, embedPageContent)
751+
.replace("\\", "").replace("\"", "");
752+
} catch (Parser.RegexException ex) {
753+
// playerUrl is still available in the file, just somewhere else
754+
final Document doc = Jsoup.parse(embedPageContent);
755+
final Elements elems = doc.select("script").attr("name", "player_ias/base");
756+
for (Element elem : elems) {
757+
if (elem.attr("src").contains("base.js")) {
758+
playerUrl = elem.attr("src");
759+
}
760+
}
761+
762+
if (playerUrl == null) {
763+
throw new ParsingException("Could not get playerUrl");
764+
}
765+
}
766+
746767
if (playerUrl.startsWith("//")) {
747768
playerUrl = HTTPS + playerUrl;
769+
} else if (playerUrl.startsWith("/")) {
770+
playerUrl = HTTPS + "//youtube.com" + playerUrl;
748771
}
749772

750773
try {

0 commit comments

Comments
 (0)