Merge pull request #394 from kirisakow/dev
Fix TeamNewPipe/NewPipe#4213: [YouTube] Ignore leading characters in video id
This commit is contained in:
commit
df26f61cfc
2 changed files with 25 additions and 8 deletions
|
@ -12,6 +12,8 @@ import java.net.MalformedURLException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.BASE_YOUTUBE_INTENT_URL;
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.BASE_YOUTUBE_INTENT_URL;
|
||||||
|
|
||||||
|
@ -37,6 +39,7 @@ import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper
|
||||||
|
|
||||||
public class YoutubeStreamLinkHandlerFactory extends LinkHandlerFactory {
|
public class YoutubeStreamLinkHandlerFactory extends LinkHandlerFactory {
|
||||||
|
|
||||||
|
private static final Pattern YOUTUBE_VIDEO_ID_REGEX_PATTERN = Pattern.compile("([a-zA-Z0-9_-]{11})");
|
||||||
private static final YoutubeStreamLinkHandlerFactory instance = new YoutubeStreamLinkHandlerFactory();
|
private static final YoutubeStreamLinkHandlerFactory instance = new YoutubeStreamLinkHandlerFactory();
|
||||||
|
|
||||||
private YoutubeStreamLinkHandlerFactory() {
|
private YoutubeStreamLinkHandlerFactory() {
|
||||||
|
@ -46,13 +49,19 @@ public class YoutubeStreamLinkHandlerFactory extends LinkHandlerFactory {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isId(@Nullable String id) {
|
@Nullable
|
||||||
return id != null && id.matches("[a-zA-Z0-9_-]{11}");
|
private static String extractId(@Nullable final String id) {
|
||||||
|
if (id != null) {
|
||||||
|
final Matcher m = YOUTUBE_VIDEO_ID_REGEX_PATTERN.matcher(id);
|
||||||
|
return m.find() ? m.group(1) : null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String assertIsId(@Nullable String id) throws ParsingException {
|
private static String assertIsId(@Nullable final String id) throws ParsingException {
|
||||||
if (isId(id)) {
|
final String extractedId = extractId(id);
|
||||||
return id;
|
if (extractedId != null) {
|
||||||
|
return extractedId;
|
||||||
} else {
|
} else {
|
||||||
throw new ParsingException("The given string is not a Youtube-Video-ID");
|
throw new ParsingException("The given string is not a Youtube-Video-ID");
|
||||||
}
|
}
|
||||||
|
@ -81,9 +90,9 @@ public class YoutubeStreamLinkHandlerFactory extends LinkHandlerFactory {
|
||||||
if (scheme != null && (scheme.equals("vnd.youtube") || scheme.equals("vnd.youtube.launch"))) {
|
if (scheme != null && (scheme.equals("vnd.youtube") || scheme.equals("vnd.youtube.launch"))) {
|
||||||
String schemeSpecificPart = uri.getSchemeSpecificPart();
|
String schemeSpecificPart = uri.getSchemeSpecificPart();
|
||||||
if (schemeSpecificPart.startsWith("//")) {
|
if (schemeSpecificPart.startsWith("//")) {
|
||||||
final String possiblyId = schemeSpecificPart.substring(2);
|
final String extractedId = extractId(schemeSpecificPart.substring(2));
|
||||||
if (isId(possiblyId)) {
|
if (extractedId != null) {
|
||||||
return possiblyId;
|
return extractedId;
|
||||||
}
|
}
|
||||||
|
|
||||||
urlString = "https:" + schemeSpecificPart;
|
urlString = "https:" + schemeSpecificPart;
|
||||||
|
|
|
@ -81,6 +81,14 @@ public class YoutubeStreamLinkHandlerFactoryTest {
|
||||||
assertEquals("jZViOEv90dI", linkHandler.fromUrl("vnd.youtube:jZViOEv90dI").getId());
|
assertEquals("jZViOEv90dI", linkHandler.fromUrl("vnd.youtube:jZViOEv90dI").getId());
|
||||||
assertEquals("n8X9_MgEdCg", linkHandler.fromUrl("vnd.youtube://n8X9_MgEdCg").getId());
|
assertEquals("n8X9_MgEdCg", linkHandler.fromUrl("vnd.youtube://n8X9_MgEdCg").getId());
|
||||||
assertEquals("O0EDx9WAelc", linkHandler.fromUrl("https://music.youtube.com/watch?v=O0EDx9WAelc").getId());
|
assertEquals("O0EDx9WAelc", linkHandler.fromUrl("https://music.youtube.com/watch?v=O0EDx9WAelc").getId());
|
||||||
|
assertEquals("-cdveCh1kQk", linkHandler.fromUrl("https://m.youtube.com/watch?v=-cdveCh1kQk)").getId());
|
||||||
|
assertEquals("-cdveCh1kQk", linkHandler.fromUrl("https://www.youtube.com/watch?v=-cdveCh1kQk-").getId());
|
||||||
|
assertEquals("-cdveCh1kQk", linkHandler.fromUrl("https://WWW.YouTube.com/watch?v=-cdveCh1kQkwhatever").getId());
|
||||||
|
assertEquals("O0EDx9WAelc", linkHandler.fromUrl("HTTPS://www.youtube.com/watch?v=O0EDx9WAelc]").getId());
|
||||||
|
assertEquals("-cdveCh1kQk", linkHandler.fromUrl("https://youtu.be/-cdveCh1kQk)hello").getId());
|
||||||
|
assertEquals("OGS7c0-CmRs", linkHandler.fromUrl("https://YouTu.be/OGS7c0-CmRswhatever)").getId());
|
||||||
|
assertEquals("-cdveCh1kQk", linkHandler.fromUrl("HTTPS://youtu.be/-cdveCh1kQk)").getId());
|
||||||
|
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("https://www.youtube.com/shorts/IOS2fqxwYbAhi").getId());
|
||||||
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("http://www.youtube.com/shorts/IOS2fqxwYbA").getId());
|
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("http://www.youtube.com/shorts/IOS2fqxwYbA").getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue