Skip to content

Commit efe2b96

Browse files
committed
Extract real subscribers of a Peertube account
Apply fix provided in the PR and move all accounts/ strings to a constant, ACCOUNTS.
1 parent 12835bf commit efe2b96

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeAccountExtractor.java

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

3+
import com.grack.nanojson.JsonArray;
34
import com.grack.nanojson.JsonObject;
45
import com.grack.nanojson.JsonParser;
56
import com.grack.nanojson.JsonParserException;
@@ -10,6 +11,7 @@
1011
import org.schabi.newpipe.extractor.downloader.Response;
1112
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
1213
import org.schabi.newpipe.extractor.exceptions.ParsingException;
14+
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
1315
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
1416
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
1517
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
@@ -27,6 +29,7 @@
2729
public class PeertubeAccountExtractor extends ChannelExtractor {
2830
private JsonObject json;
2931
private final String baseUrl;
32+
private static final String ACCOUNTS = "accounts/";
3033

3134
public PeertubeAccountExtractor(final StreamingService service, final ListLinkHandler linkHandler) throws ParsingException {
3235
super(service, linkHandler);
@@ -55,8 +58,29 @@ public String getFeedUrl() throws ParsingException {
5558
}
5659

5760
@Override
58-
public long getSubscriberCount() {
59-
return json.getLong("followersCount");
61+
public long getSubscriberCount() throws ParsingException {
62+
long subscribersCount = json.getLong("followersCount");
63+
String accountVideoChannelUrl = baseUrl + PeertubeChannelLinkHandlerFactory.API_ENDPOINT;
64+
if (getId().contains(ACCOUNTS)) {
65+
accountVideoChannelUrl += getId();
66+
} else {
67+
accountVideoChannelUrl += ACCOUNTS + getId();
68+
}
69+
accountVideoChannelUrl += "/video-channels";
70+
71+
try {
72+
final String responseBody = getDownloader().get(accountVideoChannelUrl).responseBody();
73+
final JsonObject jsonResponse = JsonParser.object().from(responseBody);
74+
final JsonArray videoChannels = jsonResponse.getArray("data");
75+
for (final Object videoChannel : videoChannels) {
76+
final JsonObject videoChannelJsonObject = (JsonObject) videoChannel;
77+
subscribersCount += videoChannelJsonObject.getInt("followersCount");
78+
}
79+
} catch (final IOException | JsonParserException | ReCaptchaException ignored) {
80+
// something went wrong during video channels extraction, only return subscribers of ownerAccount
81+
}
82+
System.out.println(subscribersCount);
83+
return subscribersCount;
6084
}
6185

6286
@Override
@@ -130,10 +154,10 @@ public InfoItemsPage<StreamInfoItem> getPage(final Page page)
130154
public void onFetchPage(@Nonnull final Downloader downloader)
131155
throws IOException, ExtractionException {
132156
String accountUrl = baseUrl + PeertubeChannelLinkHandlerFactory.API_ENDPOINT;
133-
if (getId().contains("accounts/")) {
157+
if (getId().contains(ACCOUNTS)) {
134158
accountUrl += getId();
135159
} else {
136-
accountUrl += "accounts/" + getId();
160+
accountUrl += ACCOUNTS + getId();
137161
}
138162

139163
final Response response = downloader.get(accountUrl);

extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubeAccountExtractorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void testFeedUrl() throws ParsingException {
102102

103103
@Test
104104
public void testSubscriberCount() throws ParsingException {
105-
assertTrue("Wrong subscriber count", extractor.getSubscriberCount() >= 500);
105+
assertTrue("Wrong subscriber count", extractor.getSubscriberCount() >= 425);
106106
}
107107

108108
@Override

0 commit comments

Comments
 (0)