Skip to content

Commit f15c0fc

Browse files
committed
support /watch/ and /v/ folders
1 parent 8d7b629 commit f15c0fc

2 files changed

Lines changed: 28 additions & 26 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeStreamLinkHandlerFactory.java

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.net.URI;
1212
import java.net.URISyntaxException;
1313
import java.net.URL;
14+
import java.util.Arrays;
15+
import java.util.List;
1416
import java.util.regex.Matcher;
1517
import java.util.regex.Pattern;
1618

@@ -38,6 +40,7 @@ public class YoutubeStreamLinkHandlerFactory extends LinkHandlerFactory {
3840

3941
private static final Pattern YOUTUBE_VIDEO_ID_REGEX_PATTERN = Pattern.compile("^([a-zA-Z0-9_-]{11})");
4042
private static final YoutubeStreamLinkHandlerFactory instance = new YoutubeStreamLinkHandlerFactory();
43+
private static final List<String> folders = Arrays.asList("embed/", "shorts/", "watch/", "v/");
4144

4245
private YoutubeStreamLinkHandlerFactory() {
4346
}
@@ -150,11 +153,8 @@ public String getId(String urlString) throws ParsingException, IllegalArgumentEx
150153
return assertIsId(viewQueryValue);
151154
}
152155

153-
if (path.startsWith("embed/") || path.startsWith("shorts/")) {
154-
String id = path.split("/")[1];
155-
156-
return assertIsId(id);
157-
}
156+
String maybeId = getIdFromFoldersInPath(path);
157+
if (maybeId != null) return maybeId;
158158

159159
String viewQueryValue = Utils.getQueryValue(url, "v");
160160
return assertIsId(viewQueryValue);
@@ -169,20 +169,7 @@ public String getId(String urlString) throws ParsingException, IllegalArgumentEx
169169
return assertIsId(path);
170170
}
171171

172-
case "HOOKTUBE.COM": {
173-
if (path.startsWith("v/")) {
174-
String id = path.substring("v/".length());
175-
176-
return assertIsId(id);
177-
}
178-
if (path.startsWith("watch/")) {
179-
String id = path.substring("watch/".length());
180-
181-
return assertIsId(id);
182-
}
183-
// there is no break-statement here on purpose so the next code-block gets also run for hooktube
184-
}
185-
172+
case "HOOKTUBE.COM":
186173
case "INVIDIO.US":
187174
case "DEV.INVIDIO.US":
188175
case "WWW.INVIDIO.US":
@@ -208,11 +195,8 @@ public String getId(String urlString) throws ParsingException, IllegalArgumentEx
208195
return assertIsId(viewQueryValue);
209196
}
210197
}
211-
if (path.startsWith("embed/")) {
212-
String id = path.substring("embed/".length());
213-
214-
return assertIsId(id);
215-
}
198+
String maybeId = getIdFromFoldersInPath(path);
199+
if (maybeId != null) return maybeId;
216200

217201
String viewQueryValue = Utils.getQueryValue(url, "v");
218202
if (viewQueryValue != null) {
@@ -237,4 +221,14 @@ public boolean onAcceptUrl(final String url) throws FoundAdException {
237221
return false;
238222
}
239223
}
224+
225+
private String getIdFromFoldersInPath(String path) throws ParsingException {
226+
for (final String folder : folders) {
227+
if (path.startsWith(folder)) {
228+
String id = path.split("/")[1];
229+
return assertIsId(id);
230+
}
231+
}
232+
return null;
233+
}
240234
}

extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamLinkHandlerFactoryTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ public void getIdfromYt() throws Exception {
9292
assertEquals("-cdveCh1kQk", linkHandler.fromUrl("HTTPS://youtu.be/-cdveCh1kQk)").getId());
9393
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("https://www.youtube.com/shorts/IOS2fqxwYbAhi").getId());
9494
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("http://www.youtube.com/shorts/IOS2fqxwYbA").getId());
95+
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("http://www.youtube.com/v/IOS2fqxwYbA").getId());
96+
assertEquals("IOS2fqxwYbA", linkHandler.fromUrl("http://www.youtube.com/watch/IOS2fqxwYbA").getId());
9597
}
9698

9799
@Test
@@ -113,6 +115,8 @@ public void testAcceptYtUrl() throws ParsingException {
113115
assertTrue(linkHandler.acceptUrl("vnd.youtube.launch:jZViOEv90dI"));
114116
assertTrue(linkHandler.acceptUrl("https://music.youtube.com/watch?v=O0EDx9WAelc"));
115117
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/shorts/IOS2fqxwYbA"));
118+
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/v/IOS2fqxwYbA"));
119+
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/watch/IOS2fqxwYbA"));
116120
}
117121

118122
@Test
@@ -138,22 +142,26 @@ public void testGetHookIdfromUrl() throws ParsingException {
138142
}
139143

140144
@Test
141-
public void testAcceptInvidioUrl() throws ParsingException {
145+
public void testAcceptInvidiousUrl() throws ParsingException {
142146
assertTrue(linkHandler.acceptUrl("https://invidio.us/watch?v=TglNG-yjabU"));
143147
assertTrue(linkHandler.acceptUrl("http://www.invidio.us/watch?v=TglNG-yjabU"));
144148
assertTrue(linkHandler.acceptUrl("http://invidio.us/watch?v=TglNG-yjabU"));
145149
assertTrue(linkHandler.acceptUrl("invidio.us/watch?v=3msbfr6pBNE"));
146150
assertTrue(linkHandler.acceptUrl("https://invidio.us/watch?v=ocH3oSnZG3c&test=PLS2VU1j4vzuZwooPjV26XM9UEBY2CPNn2"));
147151
assertTrue(linkHandler.acceptUrl("invidio.us/embed/3msbfr6pBNE"));
152+
assertTrue(linkHandler.acceptUrl("invidio.us/watch/3msbfr6pBNE"));
153+
assertTrue(linkHandler.acceptUrl("invidio.us/v/3msbfr6pBNE"));
148154
}
149155

150156
@Test
151-
public void testGetInvidioIdfromUrl() throws ParsingException {
157+
public void testGetInvidiousIdfromUrl() throws ParsingException {
152158
assertEquals("TglNG-yjabU", linkHandler.fromUrl("https://invidio.us/watch?v=TglNG-yjabU").getId());
153159
assertEquals("TglNG-yjabU", linkHandler.fromUrl("http://www.invidio.us/watch?v=TglNG-yjabU").getId());
154160
assertEquals("TglNG-yjabU", linkHandler.fromUrl("http://invidio.us/watch?v=TglNG-yjabU").getId());
155161
assertEquals("3msbfr6pBNE", linkHandler.fromUrl("invidio.us/watch?v=3msbfr6pBNE").getId());
156162
assertEquals("ocH3oSnZG3c", linkHandler.fromUrl("https://invidio.us/watch?v=ocH3oSnZG3c&test=PLS2VU1j4vzuZwooPjV26XM9UEBY2CPNn2").getId());
157163
assertEquals("3msbfr6pBNE", linkHandler.fromUrl("invidio.us/embed/3msbfr6pBNE").getId());
164+
assertEquals("3msbfr6pBNE", linkHandler.fromUrl("invidio.us/v/3msbfr6pBNE").getId());
165+
assertEquals("3msbfr6pBNE", linkHandler.fromUrl("invidio.us/watch/3msbfr6pBNE").getId());
158166
}
159167
}

0 commit comments

Comments
 (0)