diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeChannelLinkHandlerFactory.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeChannelLinkHandlerFactory.java index 9770f061be..aff1fbd93b 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeChannelLinkHandlerFactory.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeChannelLinkHandlerFactory.java @@ -71,7 +71,8 @@ public String getUrl(final String id, * @return whether the value conform to short channel URLs */ private boolean isCustomShortChannelUrl(@Nonnull final String[] splitPath) { - return splitPath.length == 1 && !EXCLUDED_SEGMENTS.matcher(splitPath[0]).matches(); + return splitPath.length == 1 && !splitPath[0].isEmpty() + && !EXCLUDED_SEGMENTS.matcher(splitPath[0]).matches(); } /** @@ -99,15 +100,12 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat // Remove leading "/" path = path.substring(1); - String[] splitPath = path.split("/"); + final String[] splitPath = path.split("/"); - if (isHandle(splitPath)) { - // Handle YouTube handle URLs like youtube.com/@yourhandle + if (isHandle(splitPath) || isCustomShortChannelUrl(splitPath)) { + // Handle YouTube handle URLs like youtube.com/@yourhandle and + // custom short channel URLs like youtube.com/yourcustomname return splitPath[0]; - } else if (isCustomShortChannelUrl(splitPath)) { - // Handle custom short channel URLs like youtube.com/yourcustomname - path = "c/" + path; - splitPath = path.split("/"); } if (!path.startsWith("user/") && !path.startsWith("channel/") diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelLinkHandlerFactoryTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelLinkHandlerFactoryTest.java index 62d7881c14..690ecd87c6 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelLinkHandlerFactoryTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelLinkHandlerFactoryTest.java @@ -53,12 +53,18 @@ void acceptUrlTest() throws ParsingException { // do not accept URLs which are not channels assertFalse(linkHandler.acceptUrl("https://www.youtube.com/watch?v=jZViOEv90dI&t=100")); + assertFalse(linkHandler.acceptUrl("https://www.youtube.com/watch")); assertFalse(linkHandler.acceptUrl("http://www.youtube.com/watch_popup?v=uEJuoEs1UxY")); + assertFalse(linkHandler.acceptUrl("http://www.youtube.com/watch_popup")); assertFalse(linkHandler.acceptUrl("http://www.youtube.com/attribution_link?a=JdfC0C9V6ZI&u=%2Fwatch%3Fv%3DEhxJLojIE_o%26feature%3Dshare")); + assertFalse(linkHandler.acceptUrl("http://www.youtube.com/attribution_link")); assertFalse(linkHandler.acceptUrl("https://www.youtube.com/playlist?list=PLW5y1tjAOzI3orQNF1yGGVL5x-pR2K1d")); + assertFalse(linkHandler.acceptUrl("https://www.youtube.com/playlist")); assertFalse(linkHandler.acceptUrl("https://www.youtube.com/embed/jZViOEv90dI")); + assertFalse(linkHandler.acceptUrl("https://www.youtube.com/embed")); assertFalse(linkHandler.acceptUrl("https://www.youtube.com/feed/subscriptions?list=PLz8YL4HVC87WJQDzVoY943URKQCsHS9XV")); - assertFalse(linkHandler.acceptUrl("https://www.youtube.com/?app=desktop&persist_app=1")); + assertFalse(linkHandler.acceptUrl("https://www.youtube.com/feed")); + assertFalse(linkHandler.acceptUrl("https://www.youtube.com")); assertFalse(linkHandler.acceptUrl("https://m.youtube.com/select_site")); } @@ -88,5 +94,8 @@ void getIdFromUrl() throws ParsingException { assertEquals("@Gronkh", linkHandler.fromUrl("https://www.youtube.com/@Gronkh?ucbcb=1").getId()); assertEquals("@YouTubeCreators", linkHandler.fromUrl("https://www.youtube.com/@YouTubeCreators/shorts").getId()); + + assertEquals("PewDiePie", linkHandler.fromUrl("https://www.youtube.com/PewDiePie").getId()); + assertEquals("DreamTraps", linkHandler.fromUrl("https://www.youtube.com/DreamTraps").getId()); } }