Skip to content

Commit ae8107b

Browse files
authored
Merge branch 'master' into master
2 parents a077cb9 + 96b4c97 commit ae8107b

29 files changed

Lines changed: 647 additions & 354 deletions

extractor/src/main/java/org/schabi/newpipe/extractor/StreamingService.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ public String toString() {
6767
////////////////////////////////////////////
6868
// Url Id handler
6969
////////////////////////////////////////////
70-
public abstract LinkHandlerFactory getStreamUIHFactory();
71-
public abstract ListLinkHandlerFactory getChannelUIHFactory();
72-
public abstract ListLinkHandlerFactory getPlaylistUIHFactory();
73-
public abstract SearchQueryHandlerFactory getSearchQIHFactory();
70+
public abstract LinkHandlerFactory getStreamLHFactory();
71+
public abstract ListLinkHandlerFactory getChannelLHFactory();
72+
public abstract ListLinkHandlerFactory getPlaylistLHFactory();
73+
public abstract SearchQueryHandlerFactory getSearchQHFactory();
7474

7575

7676
////////////////////////////////////////////
@@ -86,31 +86,31 @@ public String toString() {
8686
public abstract StreamExtractor getStreamExtractor(LinkHandler UIHFactory) throws ExtractionException;
8787

8888
public SearchExtractor getSearchExtractor(String query, List<String> contentFilter, String sortFilter, String contentCountry) throws ExtractionException {
89-
return getSearchExtractor(getSearchQIHFactory().fromQuery(query, contentFilter, sortFilter), contentCountry);
89+
return getSearchExtractor(getSearchQHFactory().fromQuery(query, contentFilter, sortFilter), contentCountry);
9090
}
9191

9292
public ChannelExtractor getChannelExtractor(String id, List<String> contentFilter, String sortFilter) throws ExtractionException {
93-
return getChannelExtractor(getChannelUIHFactory().fromQuery(id, contentFilter, sortFilter));
93+
return getChannelExtractor(getChannelLHFactory().fromQuery(id, contentFilter, sortFilter));
9494
}
9595

9696
public PlaylistExtractor getPlaylistExtractor(String id, List<String> contentFilter, String sortFilter) throws ExtractionException {
97-
return getPlaylistExtractor(getPlaylistUIHFactory().fromQuery(id, contentFilter, sortFilter));
97+
return getPlaylistExtractor(getPlaylistLHFactory().fromQuery(id, contentFilter, sortFilter));
9898
}
9999

100100
public SearchExtractor getSearchExtractor(String query, String contentCountry) throws ExtractionException {
101-
return getSearchExtractor(getSearchQIHFactory().fromQuery(query), contentCountry);
101+
return getSearchExtractor(getSearchQHFactory().fromQuery(query), contentCountry);
102102
}
103103

104104
public ChannelExtractor getChannelExtractor(String url) throws ExtractionException {
105-
return getChannelExtractor(getChannelUIHFactory().fromUrl(url));
105+
return getChannelExtractor(getChannelLHFactory().fromUrl(url));
106106
}
107107

108108
public PlaylistExtractor getPlaylistExtractor(String url) throws ExtractionException {
109-
return getPlaylistExtractor(getPlaylistUIHFactory().fromUrl(url));
109+
return getPlaylistExtractor(getPlaylistLHFactory().fromUrl(url));
110110
}
111111

112112
public StreamExtractor getStreamExtractor(String url) throws ExtractionException {
113-
return getStreamExtractor(getStreamUIHFactory().fromUrl(url));
113+
return getStreamExtractor(getStreamLHFactory().fromUrl(url));
114114
}
115115

116116

@@ -119,9 +119,9 @@ public StreamExtractor getStreamExtractor(String url) throws ExtractionException
119119
* figure out where the link is pointing to (a channel, video, playlist, etc.)
120120
*/
121121
public final LinkType getLinkTypeByUrl(String url) throws ParsingException {
122-
LinkHandlerFactory sH = getStreamUIHFactory();
123-
LinkHandlerFactory cH = getChannelUIHFactory();
124-
LinkHandlerFactory pH = getPlaylistUIHFactory();
122+
LinkHandlerFactory sH = getStreamLHFactory();
123+
LinkHandlerFactory cH = getChannelLHFactory();
124+
LinkHandlerFactory pH = getPlaylistLHFactory();
125125

126126
if (sH.acceptUrl(url)) {
127127
return LinkType.STREAM;

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChartsExtractor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ private void computNextPageAndStreams() throws IOException, ExtractionException
5757
apiUrl += "&kind=trending";
5858
}
5959

60-
List<String> supportedCountries = Arrays.asList("AU", "CA", "FR", "DE", "IE", "NL", "NZ", "GB", "US");
60+
/*List<String> supportedCountries = Arrays.asList("AU", "CA", "FR", "DE", "IE", "NL", "NZ", "GB", "US");
6161
String contentCountry = getContentCountry();
6262
if (supportedCountries.contains(contentCountry)) {
6363
apiUrl += "&region=soundcloud:regions:" + contentCountry;
64-
}
64+
}*/
6565

6666
nextPageUrl = SoundcloudParsingHelper.getStreamsFromApi(collector, apiUrl, true);
6767
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,22 @@ public SearchExtractor getSearchExtractor(SearchQueryHandler queryHandler, Strin
2626
}
2727

2828
@Override
29-
public SearchQueryHandlerFactory getSearchQIHFactory() {
29+
public SearchQueryHandlerFactory getSearchQHFactory() {
3030
return new SoundcloudSearchQueryHandlerFactory();
3131
}
3232

3333
@Override
34-
public LinkHandlerFactory getStreamUIHFactory() {
34+
public LinkHandlerFactory getStreamLHFactory() {
3535
return SoundcloudStreamLinkHandlerFactory.getInstance();
3636
}
3737

3838
@Override
39-
public ListLinkHandlerFactory getChannelUIHFactory() {
39+
public ListLinkHandlerFactory getChannelLHFactory() {
4040
return SoundcloudChannelLinkHandlerFactory.getInstance();
4141
}
4242

4343
@Override
44-
public ListLinkHandlerFactory getPlaylistUIHFactory() {
44+
public ListLinkHandlerFactory getPlaylistLHFactory() {
4545
return SoundcloudPlaylistLinkHandlerFactory.getInstance();
4646
}
4747

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudSubscriptionExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public List<SubscriptionItem> fromChannelUrl(String channelUrl) throws IOExcepti
3131

3232
String id;
3333
try {
34-
id = service.getChannelUIHFactory().fromUrl(getUrlFrom(channelUrl)).getId();
34+
id = service.getChannelLHFactory().fromUrl(getUrlFrom(channelUrl)).getId();
3535
} catch (ExtractionException e) {
3636
throw new InvalidSourceException(e);
3737
}

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,14 @@ public class ItagItem {
3434
////////////////////////////////////////////////////////////////////
3535
// AUDIO ID ItagType Format Bitrate ///
3636
//////////////////////////////////////////////////////////////////
37-
// Disable Opus codec as it's not well supported in older devices
38-
// new ItagItem(249, AUDIO, WEBMA, 50),
39-
// new ItagItem(250, AUDIO, WEBMA, 70),
40-
// new ItagItem(251, AUDIO, WEBMA, 160),
4137
new ItagItem(171, AUDIO, WEBMA, 128),
4238
new ItagItem(172, AUDIO, WEBMA, 256),
4339
new ItagItem(139, AUDIO, M4A, 48),
4440
new ItagItem(140, AUDIO, M4A, 128),
4541
new ItagItem(141, AUDIO, M4A, 256),
4642
new ItagItem(249, AUDIO, OPUS, 50),
4743
new ItagItem(250, AUDIO, OPUS, 70),
48-
new ItagItem(160, AUDIO, OPUS, 160),
44+
new ItagItem(251, AUDIO, OPUS, 160),
4945

5046
/// VIDEO ONLY ////////////////////////////////////////////
5147
// ID Type Format Resolution FPS ///

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,22 @@ public SearchExtractor getSearchExtractor(SearchQueryHandler query, String conte
4949
}
5050

5151
@Override
52-
public LinkHandlerFactory getStreamUIHFactory() {
52+
public LinkHandlerFactory getStreamLHFactory() {
5353
return YoutubeStreamLinkHandlerFactory.getInstance();
5454
}
5555

5656
@Override
57-
public ListLinkHandlerFactory getChannelUIHFactory() {
57+
public ListLinkHandlerFactory getChannelLHFactory() {
5858
return YoutubeChannelLinkHandlerFactory.getInstance();
5959
}
6060

6161
@Override
62-
public ListLinkHandlerFactory getPlaylistUIHFactory() {
62+
public ListLinkHandlerFactory getPlaylistLHFactory() {
6363
return YoutubePlaylistLinkHandlerFactory.getInstance();
6464
}
6565

6666
@Override
67-
public SearchQueryHandlerFactory getSearchQIHFactory() {
67+
public SearchQueryHandlerFactory getSearchQHFactory() {
6868
return YoutubeSearchQueryHandlerFactory.getInstance();
6969
}
7070

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
import org.jsoup.Jsoup;
88
import org.jsoup.nodes.Document;
99
import org.jsoup.nodes.Element;
10-
import org.schabi.newpipe.extractor.*;
10+
import org.schabi.newpipe.extractor.Downloader;
11+
import org.schabi.newpipe.extractor.NewPipe;
12+
import org.schabi.newpipe.extractor.StreamingService;
1113
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
1214
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
1315
import org.schabi.newpipe.extractor.exceptions.ParsingException;
16+
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
1417
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
1518
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
16-
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
1719
import org.schabi.newpipe.extractor.utils.DonationLinkHelper;
1820
import org.schabi.newpipe.extractor.utils.Parser;
1921
import org.schabi.newpipe.extractor.utils.Utils;
@@ -131,11 +133,16 @@ public String getFeedUrl() throws ParsingException {
131133

132134
@Override
133135
public long getSubscriberCount() throws ParsingException {
134-
Element el = doc.select("span[class*=\"yt-subscription-button-subscriber-count\"]").first();
136+
final Element el = doc.select("span[class*=\"yt-subscription-button-subscriber-count\"]").first();
135137
if (el != null) {
136-
return Long.parseLong(Utils.removeNonDigitCharacters(el.text()));
138+
try {
139+
return Long.parseLong(Utils.removeNonDigitCharacters(el.text()));
140+
} catch (NumberFormatException e) {
141+
throw new ParsingException("Could not get subscriber count", e);
142+
}
137143
} else {
138-
throw new ParsingException("Could not get subscriber count");
144+
// If the element is null, the channel have the subscriber count disabled
145+
return -1;
139146
}
140147
}
141148

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelInfoItemExtractor.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,16 @@ public String getUrl() throws ParsingException {
5959

6060
@Override
6161
public long getSubscriberCount() throws ParsingException {
62-
Element subsEl = el.select("span[class*=\"yt-subscriber-count\"]").first();
63-
if (subsEl == null) {
64-
return 0;
62+
final Element subsEl = el.select("span[class*=\"yt-subscriber-count\"]").first();
63+
if (subsEl != null) {
64+
try {
65+
return Long.parseLong(Utils.removeNonDigitCharacters(subsEl.text()));
66+
} catch (NumberFormatException e) {
67+
throw new ParsingException("Could not get subscriber count", e);
68+
}
6569
} else {
66-
return Long.parseLong(Utils.removeNonDigitCharacters(subsEl.text()));
70+
// If the element is null, the channel have the subscriber count disabled
71+
return -1;
6772
}
6873
}
6974

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
import org.jsoup.Jsoup;
77
import org.jsoup.nodes.Document;
88
import org.jsoup.nodes.Element;
9-
import org.schabi.newpipe.extractor.*;
9+
import org.schabi.newpipe.extractor.Downloader;
10+
import org.schabi.newpipe.extractor.StreamingService;
1011
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
1112
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1213
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
@@ -19,6 +20,7 @@
1920
import org.schabi.newpipe.extractor.utils.Utils;
2021

2122
import javax.annotation.Nonnull;
23+
import javax.annotation.Nullable;
2224
import java.io.IOException;
2325

2426
@SuppressWarnings("WeakerAccess")
@@ -118,7 +120,7 @@ public long getStreamCount() throws ParsingException {
118120

119121
@Nonnull
120122
@Override
121-
public InfoItemsPage<StreamInfoItem> getInitialPage() throws IOException, ExtractionException {
123+
public InfoItemsPage<StreamInfoItem> getInitialPage() throws ExtractionException {
122124
StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
123125
Element tbody = doc.select("tbody[id=\"pl-load-more-destination\"]").first();
124126
collectStreamsFrom(collector, tbody);
@@ -172,10 +174,14 @@ private String getNextPageUrlFrom(Document d) throws ParsingException {
172174
}
173175
}
174176

175-
private void collectStreamsFrom(StreamInfoItemsCollector collector, Element element) {
177+
private void collectStreamsFrom(@Nonnull StreamInfoItemsCollector collector, @Nullable Element element) {
176178
collector.reset();
177179

178-
final LinkHandlerFactory streamLinkHandlerFactory = getService().getStreamUIHFactory();
180+
if (element == null) {
181+
return;
182+
}
183+
184+
final LinkHandlerFactory streamLinkHandlerFactory = getService().getStreamLHFactory();
179185
for (final Element li : element.children()) {
180186
if(isDeletedItem(li)) {
181187
continue;

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistInfoItemExtractor.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,22 @@ public String getName() throws ParsingException {
4848

4949
@Override
5050
public String getUrl() throws ParsingException {
51-
String url;
52-
5351
try {
54-
final Element href = el.select("div[class=\"yt-lockup-meta\"]").first()
55-
.select("a").first();
52+
final Element div = el.select("div[class=\"yt-lockup-meta\"]").first();
53+
54+
if(div != null) {
55+
final Element a = div.select("a").first();
56+
return a.attr("abs:href");
57+
}
58+
59+
// this is for yt premium playlists
60+
return el.select("h3[class=\"yt-lockup-title\"").first()
61+
.select("a").first()
62+
.attr("abs:href");
5663

57-
url = href.attr("abs:href");
5864
} catch (Exception e) {
5965
throw new ParsingException("Failed to extract playlist url", e);
6066
}
61-
62-
return url;
6367
}
6468

6569
@Override

0 commit comments

Comments
 (0)