Skip to content

Commit 1be2707

Browse files
Merge pull request #893 from Isira-Seneviratne/Static_sets
Use immutable sets in YoutubeParsingHelper.
2 parents eb07d70 + 316d857 commit 1be2707

File tree

7 files changed

+33
-53
lines changed

7 files changed

+33
-53
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ jobs:
1919
steps:
2020
- uses: actions/checkout@v3
2121

22-
- name: set up JDK 8
22+
- name: set up JDK 11
2323
uses: actions/setup-java@v3
2424
with:
25-
java-version: '8'
25+
java-version: '11'
2626
distribution: 'temurin'
2727

2828
- name: Cache Gradle dependencies

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ allprojects {
55
compileJava.options.encoding = 'UTF-8'
66
compileTestJava.options.encoding = 'UTF-8'
77

8-
sourceCompatibility = 1.8
9-
targetCompatibility = 1.8
8+
sourceCompatibility = JavaVersion.VERSION_11
9+
targetCompatibility = JavaVersion.VERSION_11
1010

1111
version 'v0.22.1'
1212
group 'com.github.TeamNewPipe'

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@
6666
import java.util.Collections;
6767
import java.util.HashMap;
6868
import java.util.List;
69+
import java.util.Locale;
6970
import java.util.Map;
7071
import java.util.Objects;
7172
import java.util.Optional;
7273
import java.util.Random;
74+
import java.util.Set;
7375
import java.util.regex.Pattern;
7476
import java.util.stream.Stream;
7577

@@ -241,6 +243,18 @@ private YoutubeParsingHelper() {
241243
private static final Pattern C_ANDROID_PATTERN = Pattern.compile("&c=ANDROID");
242244
private static final Pattern C_IOS_PATTERN = Pattern.compile("&c=IOS");
243245

246+
private static final Set<String> GOOGLE_URLS = Set.of("google.", "m.google.", "www.google.");
247+
private static final Set<String> INVIDIOUS_URLS = Set.of("invidio.us", "dev.invidio.us",
248+
"www.invidio.us", "redirect.invidious.io", "invidious.snopyta.org", "yewtu.be",
249+
"tube.connect.cafe", "tubus.eduvid.org", "invidious.kavin.rocks", "invidious.site",
250+
"invidious-us.kavin.rocks", "piped.kavin.rocks", "vid.mint.lgbt", "invidiou.site",
251+
"invidious.fdn.fr", "invidious.048596.xyz", "invidious.zee.li", "vid.puffyan.us",
252+
"ytprivate.com", "invidious.namazso.eu", "invidious.silkky.cloud", "ytb.trom.tf",
253+
"invidious.exonip.de", "inv.riverside.rocks", "invidious.blamefran.net", "y.com.cm",
254+
"invidious.moomoo.me", "yt.cyberhost.uk");
255+
private static final Set<String> YOUTUBE_URLS = Set.of("youtube.com", "www.youtube.com",
256+
"m.youtube.com", "music.youtube.com");
257+
244258
/**
245259
* Determines how the consent cookie (that is required for YouTube) will be generated.
246260
*
@@ -262,21 +276,14 @@ private static boolean isGoogleURL(final String url) {
262276
final String cachedUrl = extractCachedUrlIfNeeded(url);
263277
try {
264278
final URL u = new URL(cachedUrl);
265-
final String host = u.getHost();
266-
return host.startsWith("google.")
267-
|| host.startsWith("m.google.")
268-
|| host.startsWith("www.google.");
279+
return GOOGLE_URLS.stream().anyMatch(item -> u.getHost().startsWith(item));
269280
} catch (final MalformedURLException e) {
270281
return false;
271282
}
272283
}
273284

274285
public static boolean isYoutubeURL(@Nonnull final URL url) {
275-
final String host = url.getHost();
276-
return host.equalsIgnoreCase("youtube.com")
277-
|| host.equalsIgnoreCase("www.youtube.com")
278-
|| host.equalsIgnoreCase("m.youtube.com")
279-
|| host.equalsIgnoreCase("music.youtube.com");
286+
return YOUTUBE_URLS.contains(url.getHost().toLowerCase(Locale.ROOT));
280287
}
281288

282289
public static boolean isYoutubeServiceURL(@Nonnull final URL url) {
@@ -290,36 +297,8 @@ public static boolean isHooktubeURL(@Nonnull final URL url) {
290297
return host.equalsIgnoreCase("hooktube.com");
291298
}
292299

293-
public static boolean isInvidioURL(@Nonnull final URL url) {
294-
final String host = url.getHost();
295-
return host.equalsIgnoreCase("invidio.us")
296-
|| host.equalsIgnoreCase("dev.invidio.us")
297-
|| host.equalsIgnoreCase("www.invidio.us")
298-
|| host.equalsIgnoreCase("redirect.invidious.io")
299-
|| host.equalsIgnoreCase("invidious.snopyta.org")
300-
|| host.equalsIgnoreCase("yewtu.be")
301-
|| host.equalsIgnoreCase("tube.connect.cafe")
302-
|| host.equalsIgnoreCase("tubus.eduvid.org")
303-
|| host.equalsIgnoreCase("invidious.kavin.rocks")
304-
|| host.equalsIgnoreCase("invidious-us.kavin.rocks")
305-
|| host.equalsIgnoreCase("piped.kavin.rocks")
306-
|| host.equalsIgnoreCase("invidious.site")
307-
|| host.equalsIgnoreCase("vid.mint.lgbt")
308-
|| host.equalsIgnoreCase("invidiou.site")
309-
|| host.equalsIgnoreCase("invidious.fdn.fr")
310-
|| host.equalsIgnoreCase("invidious.048596.xyz")
311-
|| host.equalsIgnoreCase("invidious.zee.li")
312-
|| host.equalsIgnoreCase("vid.puffyan.us")
313-
|| host.equalsIgnoreCase("ytprivate.com")
314-
|| host.equalsIgnoreCase("invidious.namazso.eu")
315-
|| host.equalsIgnoreCase("invidious.silkky.cloud")
316-
|| host.equalsIgnoreCase("invidious.exonip.de")
317-
|| host.equalsIgnoreCase("inv.riverside.rocks")
318-
|| host.equalsIgnoreCase("invidious.blamefran.net")
319-
|| host.equalsIgnoreCase("invidious.moomoo.me")
320-
|| host.equalsIgnoreCase("ytb.trom.tf")
321-
|| host.equalsIgnoreCase("yt.cyberhost.uk")
322-
|| host.equalsIgnoreCase("y.com.cm");
300+
public static boolean isInvidiousURL(@Nonnull final URL url) {
301+
return INVIDIOUS_URLS.contains(url.getHost().toLowerCase(Locale.ROOT));
323302
}
324303

325304
public static boolean isY2ubeURL(@Nonnull final URL url) {

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

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

2121
package org.schabi.newpipe.extractor.services.youtube.linkHandler;
2222

23-
import java.util.regex.Pattern;
2423
import org.schabi.newpipe.extractor.exceptions.ParsingException;
2524
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
2625
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
@@ -29,6 +28,7 @@
2928
import javax.annotation.Nonnull;
3029
import java.net.URL;
3130
import java.util.List;
31+
import java.util.regex.Pattern;
3232

3333
import static org.schabi.newpipe.extractor.utils.Utils.isBlank;
3434

@@ -90,7 +90,7 @@ public String getId(final String url) throws ParsingException {
9090
String path = urlObj.getPath();
9191

9292
if (!Utils.isHTTP(urlObj) || !(YoutubeParsingHelper.isYoutubeURL(urlObj)
93-
|| YoutubeParsingHelper.isInvidioURL(urlObj)
93+
|| YoutubeParsingHelper.isInvidiousURL(urlObj)
9494
|| YoutubeParsingHelper.isHooktubeURL(urlObj))) {
9595
throw new ParsingException("The URL given is not a YouTube URL");
9696
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.schabi.newpipe.extractor.services.youtube.linkHandler;
22

3-
import java.net.MalformedURLException;
4-
import java.net.URL;
5-
import java.util.List;
63
import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException;
74
import org.schabi.newpipe.extractor.exceptions.ParsingException;
85
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
@@ -11,6 +8,10 @@
118
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
129
import org.schabi.newpipe.extractor.utils.Utils;
1310

11+
import java.net.MalformedURLException;
12+
import java.net.URL;
13+
import java.util.List;
14+
1415
public final class YoutubePlaylistLinkHandlerFactory extends ListLinkHandlerFactory {
1516

1617
private static final YoutubePlaylistLinkHandlerFactory INSTANCE =
@@ -35,7 +36,7 @@ public String getId(final String url) throws ParsingException {
3536
final URL urlObj = Utils.stringToURL(url);
3637

3738
if (!Utils.isHTTP(urlObj) || !(YoutubeParsingHelper.isYoutubeURL(urlObj)
38-
|| YoutubeParsingHelper.isInvidioURL(urlObj))) {
39+
|| YoutubeParsingHelper.isInvidiousURL(urlObj))) {
3940
throw new ParsingException("the url given is not a YouTube-URL");
4041
}
4142

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.schabi.newpipe.extractor.services.youtube.linkHandler;
22

33
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isHooktubeURL;
4-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidioURL;
4+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidiousURL;
55
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isY2ubeURL;
66
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isYoutubeServiceURL;
77
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isYoutubeURL;
@@ -122,7 +122,7 @@ public String getId(final String theUrlString)
122122
}
123123

124124
if (!Utils.isHTTP(url) || !(isYoutubeURL(url) || isYoutubeServiceURL(url)
125-
|| isHooktubeURL(url) || isInvidioURL(url) || isY2ubeURL(url))) {
125+
|| isHooktubeURL(url) || isInvidiousURL(url) || isY2ubeURL(url))) {
126126
if (host.equalsIgnoreCase("googleads.g.doubleclick.net")) {
127127
throw new FoundAdException("Error found ad: " + urlString);
128128
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
2121
*/
2222

23-
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidioURL;
23+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidiousURL;
2424
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isYoutubeURL;
2525

2626
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
@@ -53,7 +53,7 @@ public boolean onAcceptUrl(final String url) {
5353
}
5454

5555
final String urlPath = urlObj.getPath();
56-
return Utils.isHTTP(urlObj) && (isYoutubeURL(urlObj) || isInvidioURL(urlObj))
56+
return Utils.isHTTP(urlObj) && (isYoutubeURL(urlObj) || isInvidiousURL(urlObj))
5757
&& urlPath.equals("/feed/trending");
5858
}
5959
}

0 commit comments

Comments
 (0)