Skip to content

Commit 3dd05ed

Browse files
added extractor components for ReturnYouTubeDislike
1 parent 832dfda commit 3dd05ed

File tree

4 files changed

+110
-5
lines changed

4 files changed

+110
-5
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.schabi.newpipe.extractor.returnyoutubedislike;
2+
3+
public class ReturnYouTubeDislikeApiSettings {
4+
public String apiUrl;
5+
6+
// TODO: add more if needed
7+
//
8+
//
9+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.schabi.newpipe.extractor.returnyoutubedislike;
2+
3+
import com.grack.nanojson.JsonObject;
4+
import com.grack.nanojson.JsonParser;
5+
import com.grack.nanojson.JsonParserException;
6+
7+
import org.schabi.newpipe.extractor.NewPipe;
8+
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
9+
import org.schabi.newpipe.extractor.stream.StreamInfo;
10+
11+
import java.io.IOException;
12+
13+
public final class ReturnYouTubeDislikeExtractorHelper {
14+
15+
private ReturnYouTubeDislikeExtractorHelper() {
16+
}
17+
18+
@SuppressWarnings("CheckStyle")
19+
public static ReturnYouTubeDislikeInfo getInfo(
20+
final StreamInfo streamInfo,
21+
final ReturnYouTubeDislikeApiSettings apiSettings) {
22+
if (!streamInfo.getUrl().startsWith("https://www.youtube.com")
23+
|| apiSettings.apiUrl == null
24+
|| apiSettings.apiUrl.isEmpty()) {
25+
return null;
26+
}
27+
28+
final String url = apiSettings.apiUrl + "votes?videoId=" + streamInfo.getId();
29+
30+
JsonObject response = null;
31+
32+
try {
33+
final String responseBody =
34+
NewPipe.getDownloader().get(url).responseBody();
35+
36+
response = JsonParser.object().from(responseBody);
37+
} catch (ReCaptchaException | IOException | JsonParserException e) {
38+
// ignored
39+
}
40+
41+
if (response == null) {
42+
return null;
43+
}
44+
45+
final int likes = response.getInt("likes", 0);
46+
final int dislikes = response.getInt("dislikes", 0);
47+
final double rating = response.getDouble("rating", 0);
48+
final int viewCount = response.getInt("viewCount", 0);
49+
final boolean deleted = response.getBoolean("deleted", false);
50+
51+
return new ReturnYouTubeDislikeInfo(likes, dislikes, rating, viewCount, deleted);
52+
}
53+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.schabi.newpipe.extractor.returnyoutubedislike;
2+
3+
import java.io.Serializable;
4+
5+
public class ReturnYouTubeDislikeInfo implements Serializable {
6+
public long likes;
7+
public long dislikes;
8+
public double rating;
9+
public long viewCount;
10+
public boolean deleted;
11+
12+
public ReturnYouTubeDislikeInfo(final long likes, final long dislikes, final double rating,
13+
final long viewCount, final boolean deleted) {
14+
this.likes = likes;
15+
this.dislikes = dislikes;
16+
this.rating = rating;
17+
this.viewCount = viewCount;
18+
this.deleted = deleted;
19+
}
20+
}

extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfo.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
import org.schabi.newpipe.extractor.sponsorblock.SponsorBlockApiSettings;
3434
import org.schabi.newpipe.extractor.sponsorblock.SponsorBlockExtractorHelper;
3535
import org.schabi.newpipe.extractor.sponsorblock.SponsorBlockSegment;
36+
import org.schabi.newpipe.extractor.returnyoutubedislike.ReturnYouTubeDislikeApiSettings;
37+
import org.schabi.newpipe.extractor.returnyoutubedislike.ReturnYouTubeDislikeExtractorHelper;
38+
import org.schabi.newpipe.extractor.returnyoutubedislike.ReturnYouTubeDislikeInfo;
3639
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
3740

3841
import java.io.IOException;
@@ -71,22 +74,25 @@ public StreamInfo(final int serviceId,
7174

7275
public static StreamInfo getInfo(
7376
final String url,
74-
@Nullable final SponsorBlockApiSettings sponsorBlockApiSettings)
77+
@Nullable final SponsorBlockApiSettings sponsorBlockApiSettings,
78+
@Nullable final ReturnYouTubeDislikeApiSettings returnYouTubeDislikeApiSettings)
7579
throws IOException, ExtractionException {
76-
return getInfo(NewPipe.getServiceByUrl(url), url, sponsorBlockApiSettings);
80+
return getInfo(NewPipe.getServiceByUrl(url), url, sponsorBlockApiSettings, returnYouTubeDislikeApiSettings);
7781
}
7882

7983
public static StreamInfo getInfo(
8084
@Nonnull final StreamingService service,
8185
final String url,
82-
@Nullable final SponsorBlockApiSettings sponsorBlockApiSettings)
86+
@Nullable final SponsorBlockApiSettings sponsorBlockApiSettings,
87+
@Nullable final ReturnYouTubeDislikeApiSettings returnYouTubeDislikeApiSettings)
8388
throws IOException, ExtractionException {
84-
return getInfo(service.getStreamExtractor(url), sponsorBlockApiSettings);
89+
return getInfo(service.getStreamExtractor(url), sponsorBlockApiSettings, returnYouTubeDislikeApiSettings);
8590
}
8691

8792
public static StreamInfo getInfo(
8893
@Nonnull final StreamExtractor extractor,
89-
@Nullable final SponsorBlockApiSettings sponsorBlockApiSettings)
94+
@Nullable final SponsorBlockApiSettings sponsorBlockApiSettings,
95+
@Nullable final ReturnYouTubeDislikeApiSettings returnYouTubeDislikeApiSettings)
9096
throws ExtractionException, IOException {
9197
extractor.fetchPage();
9298
final StreamInfo streamInfo;
@@ -101,6 +107,13 @@ public static StreamInfo getInfo(
101107
streamInfo.setSponsorBlockSegments(sponsorBlockSegments);
102108
}
103109

110+
if (returnYouTubeDislikeApiSettings != null) {
111+
final ReturnYouTubeDislikeInfo rydInfo =
112+
ReturnYouTubeDislikeExtractorHelper.getInfo(
113+
streamInfo, returnYouTubeDislikeApiSettings);
114+
streamInfo.setReturnYouTubeDislikeInfo(rydInfo);
115+
}
116+
104117
return streamInfo;
105118

106119
} catch (final ExtractionException e) {
@@ -403,6 +416,7 @@ private static void extractOptionalData(final StreamInfo streamInfo,
403416
private List<MetaInfo> metaInfo = List.of();
404417
private boolean shortFormContent = false;
405418
private List<SponsorBlockSegment> sponsorBlockSegments = new ArrayList<>();
419+
@Nullable private ReturnYouTubeDislikeInfo rydInfo;
406420

407421
/**
408422
* Preview frames, e.g. for the storyboard / seekbar thumbnail preview
@@ -780,4 +794,13 @@ public void removeSponsorBlockSegment(final String uuid) {
780794
removeSponsorBlockSegment(target);
781795
}
782796
}
797+
798+
@Nullable
799+
public ReturnYouTubeDislikeInfo getRydInfo() {
800+
return rydInfo;
801+
}
802+
803+
public void setReturnYouTubeDislikeInfo(final @Nullable ReturnYouTubeDislikeInfo rydInfo) {
804+
this.rydInfo = rydInfo;
805+
}
783806
}

0 commit comments

Comments
 (0)