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
|
@ -12,6 +12,8 @@ import java.net.MalformedURLException;
|
|||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
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;
|
||||
|
||||
|
@ -37,6 +39,7 @@ import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper
|
|||
|
||||
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 YoutubeStreamLinkHandlerFactory() {
|
||||
|
@ -46,13 +49,19 @@ public class YoutubeStreamLinkHandlerFactory extends LinkHandlerFactory {
|
|||
return instance;
|
||||
}
|
||||
|
||||
private static boolean isId(@Nullable String id) {
|
||||
return id != null && id.matches("[a-zA-Z0-9_-]{11}");
|
||||
@Nullable
|
||||
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 {
|
||||
if (isId(id)) {
|
||||
return id;
|
||||
private static String assertIsId(@Nullable final String id) throws ParsingException {
|
||||
final String extractedId = extractId(id);
|
||||
if (extractedId != null) {
|
||||
return extractedId;
|
||||
} else {
|
||||
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"))) {
|
||||
String schemeSpecificPart = uri.getSchemeSpecificPart();
|
||||
if (schemeSpecificPart.startsWith("//")) {
|
||||
final String possiblyId = schemeSpecificPart.substring(2);
|
||||
if (isId(possiblyId)) {
|
||||
return possiblyId;
|
||||
final String extractedId = extractId(schemeSpecificPart.substring(2));
|
||||
if (extractedId != null) {
|
||||
return extractedId;
|
||||
}
|
||||
|
||||
urlString = "https:" + schemeSpecificPart;
|
||||
|
|
|
@ -81,6 +81,14 @@ public class YoutubeStreamLinkHandlerFactoryTest {
|
|||
assertEquals("jZViOEv90dI", linkHandler.fromUrl("vnd.youtube:jZViOEv90dI").getId());
|
||||
assertEquals("n8X9_MgEdCg", linkHandler.fromUrl("vnd.youtube://n8X9_MgEdCg").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());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue