Skip to content

Commit 993d3a5

Browse files
committed
Fix tests and url resolution
1 parent b602755 commit 993d3a5

File tree

9 files changed

+114
-106
lines changed

9 files changed

+114
-106
lines changed

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/shared/YoutubeUrlHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ public static boolean isInvidioURL(@Nonnull final URL url) {
6262
"invidio.xamh.de",
6363
"y.com.cm"
6464
));
65-
final String host = Utils.removeMAndWWWFromUrl(url.getHost()).toLowerCase();
65+
final String host = Utils.removeMAndWWWFromHost(url.getHost()).toLowerCase();
6666
return invInstances.contains(host);
6767
}
6868

6969
public static boolean isY2ubeURL(@Nonnull final URL url) {
70-
return Utils.removeMAndWWWFromUrl(url.getHost()).equalsIgnoreCase("y2u.be");
70+
return Utils.removeMAndWWWFromHost(url.getHost()).equalsIgnoreCase("y2u.be");
7171
}
7272

7373
/**

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,19 @@ public String getId(final String theUrlString)
118118
final String viewQueryValue = Utils.getQueryValue(decodedURL, "v");
119119
return assertIsId(viewQueryValue);
120120

121-
} else if ((isInvidioURL(url) || isHooktubeURL(url))
122-
&& path.equalsIgnoreCase("watch")) {
123-
final String viewQueryValue = Utils.getQueryValue(url, "v");
124-
if (viewQueryValue != null) {
125-
return assertIsId(viewQueryValue);
121+
} else if (isInvidioURL(url) || isHooktubeURL(url)) {
122+
// /watch?v=<ID>
123+
if ("watch".equalsIgnoreCase(path)) {
124+
final String viewQueryValue = Utils.getQueryValue(url, "v");
125+
if (viewQueryValue != null) {
126+
return assertIsId(viewQueryValue);
127+
}
128+
}
129+
130+
// /<ID>
131+
final String maybeId = extractId(path);
132+
if (maybeId != null) {
133+
return maybeId;
126134
}
127135
}
128136

extractor/src/main/java/org/schabi/newpipe/extractor/utils/Utils.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import org.schabi.newpipe.extractor.exceptions.ParsingException;
44

5-
import javax.annotation.Nonnull;
6-
import javax.annotation.Nullable;
75
import java.io.UnsupportedEncodingException;
86
import java.net.MalformedURLException;
97
import java.net.URL;
@@ -18,6 +16,9 @@
1816
import java.util.Objects;
1917
import java.util.regex.Pattern;
2018

19+
import javax.annotation.Nonnull;
20+
import javax.annotation.Nullable;
21+
2122
public final class Utils {
2223

2324
public static final String HTTP = "http://";
@@ -196,11 +197,11 @@ public static boolean isHTTP(@Nonnull final URL url) {
196197
}
197198

198199
public static String removeMAndWWWFromHost(final String host) {
199-
if (host.startsWith("m.")) {
200-
return host.replace("m.", "");
200+
if (host.toLowerCase().startsWith("m.")) {
201+
return host.length() > 2 ? host.substring(2) : "";
201202
}
202-
if (host.startsWith("www.")) {
203-
return host.replace("www.", "");
203+
if (host.toLowerCase().startsWith("www.")) {
204+
return host.length() > 4 ? host.substring(4) : "";
204205
}
205206
return host;
206207
}

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException;
2525
import org.schabi.newpipe.extractor.exceptions.ParsingException;
2626
import org.schabi.newpipe.extractor.services.BaseChannelExtractorTest;
27-
import org.schabi.newpipe.extractor.services.youtube.youtube.YoutubeParsingHelper;
2827
import org.schabi.newpipe.extractor.services.youtube.youtube.extractors.YoutubeChannelExtractor;
2928

3029
import java.io.IOException;
31-
import java.util.Random;
3230

3331
/**
3432
* Test for {@link ChannelExtractor}
@@ -45,23 +43,23 @@ public static void setUp() throws IOException {
4543
}
4644

4745
@Test
48-
public void deletedFetch() throws Exception {
46+
void deletedFetch() throws Exception {
4947
final ChannelExtractor extractor =
5048
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCAUc4iz6edWerIjlnL8OSSw");
5149

5250
assertThrows(ContentNotAvailableException.class, extractor::fetchPage);
5351
}
5452

5553
@Test
56-
public void nonExistentFetch() throws Exception {
54+
void nonExistentFetch() throws Exception {
5755
final ChannelExtractor extractor =
5856
YouTube.getChannelExtractor("https://www.youtube.com/channel/DOESNT-EXIST");
5957

6058
assertThrows(ContentNotAvailableException.class, extractor::fetchPage);
6159
}
6260

6361
@Test
64-
public void accountTerminatedTOSFetch() throws Exception {
62+
void accountTerminatedTOSFetch() throws Exception {
6563
// "This account has been terminated for a violation of YouTube's Terms of Service."
6664
final ChannelExtractor extractor =
6765
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCTGjY2I-ZUGnwVoWAGRd7XQ");
@@ -72,7 +70,7 @@ public void accountTerminatedTOSFetch() throws Exception {
7270
}
7371

7472
@Test
75-
public void accountTerminatedCommunityFetch() throws Exception {
73+
void accountTerminatedCommunityFetch() throws Exception {
7674
// "This account has been terminated for violating YouTube's Community Guidelines."
7775
final ChannelExtractor extractor =
7876
YouTube.getChannelExtractor("https://www.youtube.com/channel/UC0AuOxCr9TZ0TtEgL1zpIgA");
@@ -83,7 +81,7 @@ public void accountTerminatedCommunityFetch() throws Exception {
8381
}
8482

8583
@Test
86-
public void accountTerminatedHateFetch() throws Exception {
84+
void accountTerminatedHateFetch() throws Exception {
8785
// "This account has been terminated due to multiple or severe violations
8886
// of YouTube's policy prohibiting hate speech."
8987
final ChannelExtractor extractor =
@@ -95,7 +93,7 @@ public void accountTerminatedHateFetch() throws Exception {
9593
}
9694

9795
@Test
98-
public void accountTerminatedBullyFetch() throws Exception {
96+
void accountTerminatedBullyFetch() throws Exception {
9997
// "This account has been terminated due to multiple or severe violations
10098
// of YouTube's policy prohibiting content designed to harass, bully or threaten."
10199
final ChannelExtractor extractor =
@@ -107,7 +105,7 @@ public void accountTerminatedBullyFetch() throws Exception {
107105
}
108106

109107
@Test
110-
public void accountTerminatedSpamFetch() throws Exception {
108+
void accountTerminatedSpamFetch() throws Exception {
111109
// "This account has been terminated due to multiple or severe violations
112110
// of YouTube's policy against spam, deceptive practices and misleading content
113111
// or other Terms of Service violations."
@@ -120,7 +118,7 @@ public void accountTerminatedSpamFetch() throws Exception {
120118
}
121119

122120
@Test
123-
public void accountTerminatedCopyrightFetch() throws Exception {
121+
void accountTerminatedCopyrightFetch() throws Exception {
124122
// "This account has been terminated because we received multiple third-party claims
125123
// of copyright infringement regarding material that the user posted."
126124
final ChannelExtractor extractor =
@@ -142,7 +140,8 @@ public static void setUp() throws IOException {
142140

143141
@Test
144142
void noVideoTab() throws Exception {
145-
final ChannelExtractor extractor = YouTube.getChannelExtractor("https://invidio.us/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ");
143+
final ChannelExtractor extractor =
144+
YouTube.getChannelExtractor("https://invidious.fdn.fr/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ");
146145

147146
extractor.fetchPage();
148147
assertThrows(ContentNotSupportedException.class, extractor::getInitialPage);
@@ -489,7 +488,7 @@ public static void setUp() throws Exception {
489488
}
490489

491490
@Test
492-
public void testGetPageInNewExtractor() throws Exception {
491+
void testGetPageInNewExtractor() throws Exception {
493492
final ChannelExtractor newExtractor = YouTube.getChannelExtractor(extractor.getUrl());
494493
defaultTestGetPageInNewExtractor(extractor, newExtractor);
495494
}

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static void setUp() {
2626
}
2727

2828
@Test
29-
public void acceptUrlTest() throws ParsingException {
29+
void acceptUrlTest() throws ParsingException {
3030
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/user/Gronkh"));
3131
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/user/Netzkino/videos"));
3232

@@ -43,11 +43,11 @@ public void acceptUrlTest() throws ParsingException {
4343
assertTrue(linkHandler.acceptUrl("https://hooktube.com/channel/UClq42foiSgl7sSpLupnugGA"));
4444
assertTrue(linkHandler.acceptUrl("https://hooktube.com/channel/UClq42foiSgl7sSpLupnugGA/videos?disable_polymer=1"));
4545

46-
assertTrue(linkHandler.acceptUrl("https://invidio.us/user/Gronkh"));
47-
assertTrue(linkHandler.acceptUrl("https://invidio.us/user/Netzkino/videos"));
46+
assertTrue(linkHandler.acceptUrl("https://invidious.fdn.fr/user/Gronkh"));
47+
assertTrue(linkHandler.acceptUrl("https://invidious.fdn.fr/user/Netzkino/videos"));
4848

49-
assertTrue(linkHandler.acceptUrl("https://invidio.us/channel/UClq42foiSgl7sSpLupnugGA"));
50-
assertTrue(linkHandler.acceptUrl("https://invidio.us/channel/UClq42foiSgl7sSpLupnugGA/videos?disable_polymer=1"));
49+
assertTrue(linkHandler.acceptUrl("https://invidious.fdn.fr/channel/UClq42foiSgl7sSpLupnugGA"));
50+
assertTrue(linkHandler.acceptUrl("https://invidious.fdn.fr/channel/UClq42foiSgl7sSpLupnugGA/videos?disable_polymer=1"));
5151
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/watchismo"));
5252

5353

@@ -63,7 +63,7 @@ public void acceptUrlTest() throws ParsingException {
6363
}
6464

6565
@Test
66-
public void getIdFromUrl() throws ParsingException {
66+
void getIdFromUrl() throws ParsingException {
6767
assertEquals("user/Gronkh", linkHandler.fromUrl("https://www.youtube.com/user/Gronkh").getId());
6868
assertEquals("user/Netzkino", linkHandler.fromUrl("https://www.youtube.com/user/Netzkino/videos").getId());
6969

@@ -77,11 +77,11 @@ public void getIdFromUrl() throws ParsingException {
7777
assertEquals("channel/UClq42foiSgl7sSpLupnugGA", linkHandler.fromUrl("https://hooktube.com/channel/UClq42foiSgl7sSpLupnugGA").getId());
7878
assertEquals("channel/UClq42foiSgl7sSpLupnugGA", linkHandler.fromUrl("https://hooktube.com/channel/UClq42foiSgl7sSpLupnugGA/videos?disable_polymer=1").getId());
7979

80-
assertEquals("user/Gronkh", linkHandler.fromUrl("https://invidio.us/user/Gronkh").getId());
81-
assertEquals("user/Netzkino", linkHandler.fromUrl("https://invidio.us/user/Netzkino/videos").getId());
80+
assertEquals("user/Gronkh", linkHandler.fromUrl("https://invidious.fdn.fr/user/Gronkh").getId());
81+
assertEquals("user/Netzkino", linkHandler.fromUrl("https://invidious.fdn.fr/user/Netzkino/videos").getId());
8282

83-
assertEquals("channel/UClq42foiSgl7sSpLupnugGA", linkHandler.fromUrl("https://invidio.us/channel/UClq42foiSgl7sSpLupnugGA").getId());
84-
assertEquals("channel/UClq42foiSgl7sSpLupnugGA", linkHandler.fromUrl("https://invidio.us/channel/UClq42foiSgl7sSpLupnugGA/videos?disable_polymer=1").getId());
83+
assertEquals("channel/UClq42foiSgl7sSpLupnugGA", linkHandler.fromUrl("https://invidious.fdn.fr/channel/UClq42foiSgl7sSpLupnugGA").getId());
84+
assertEquals("channel/UClq42foiSgl7sSpLupnugGA", linkHandler.fromUrl("https://invidious.fdn.fr/channel/UClq42foiSgl7sSpLupnugGA/videos?disable_polymer=1").getId());
8585

8686
assertEquals("c/creatoracademy", linkHandler.fromUrl("https://www.youtube.com/c/creatoracademy").getId());
8787
assertEquals("c/YouTubeCreators", linkHandler.fromUrl("https://www.youtube.com/c/YouTubeCreators").getId());

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ public static void setUp() {
2323
}
2424

2525
@Test
26-
public void getIdWithNullAsUrl() {
26+
void getIdWithNullAsUrl() {
2727
assertThrows(IllegalArgumentException.class, () -> linkHandler.fromId(null));
2828
}
2929

3030
@Test
31-
public void getIdFromYt() throws ParsingException {
31+
void getIdFromYt() throws ParsingException {
3232
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://www.youtube.com/watch?v=VM_6n762j6M").getId());
3333
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://m.youtube.com/watch?v=VM_6n762j6M").getId());
3434
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://youtube.com/watch?v=VM_6n762j6M").getId());
@@ -38,32 +38,32 @@ public void getIdFromYt() throws ParsingException {
3838
}
3939

4040
@Test
41-
public void testAcceptUrl() throws ParsingException {
41+
void testAcceptUrl() throws ParsingException {
4242
assertTrue(linkHandler.acceptUrl("https://www.youtube.com/watch?v=VM_6n762j6M&t=20"));
4343
assertTrue(linkHandler.acceptUrl("https://WWW.youtube.com/watch?v=VM_6n762j6M&t=20"));
4444
assertTrue(linkHandler.acceptUrl("https://youtube.com/watch?v=VM_6n762j6M&t=20"));
4545
assertTrue(linkHandler.acceptUrl("https://youtu.be/VM_6n762j6M&t=20"));
4646
}
4747

4848
@Test
49-
public void testDeniesUrl() throws ParsingException {
49+
void testDeniesUrl() throws ParsingException {
5050
assertFalse(linkHandler.acceptUrl("https://www.you com/watch?v=VM_6n762j6M"));
5151
assertFalse(linkHandler.acceptUrl("https://com/watch?v=VM_6n762j6M"));
5252
assertFalse(linkHandler.acceptUrl("htt ://com/watch?v=VM_6n762j6M"));
5353
assertFalse(linkHandler.acceptUrl("ftp://www.youtube.com/watch?v=VM_6n762j6M"));
5454
}
5555

5656
@Test
57-
public void getIdFromInvidious() throws ParsingException {
58-
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://www.invidio.us/watch?v=VM_6n762j6M").getId());
59-
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://invidio.us/watch?v=VM_6n762j6M").getId());
60-
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://INVIDIO.US/watch?v=VM_6n762j6M").getId());
61-
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://invidio.us/VM_6n762j6M").getId());
62-
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://invidio.us/VM_6n762j6M&t=20").getId());
57+
void getIdFromInvidious() throws ParsingException {
58+
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://www.invidious.fdn.fr/watch?v=VM_6n762j6M").getId());
59+
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://invidious.fdn.fr/watch?v=VM_6n762j6M").getId());
60+
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://INVIDIOUS.FDN.FR/watch?v=VM_6n762j6M").getId());
61+
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://invidious.fdn.fr/VM_6n762j6M").getId());
62+
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://invidious.fdn.fr/VM_6n762j6M&t=20").getId());
6363
}
6464

6565
@Test
66-
public void getIdFromY2ube() throws ParsingException {
66+
void getIdFromY2ube() throws ParsingException {
6767
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://y2u.be/VM_6n762j6M").getId());
6868
assertEquals("VM_6n762j6M", linkHandler.fromUrl("https://Y2U.Be/VM_6n762j6M").getId());
6969
}

0 commit comments

Comments
 (0)