Skip to content

Commit eb40bb8

Browse files
authored
Merge pull request #959 from FireMasterK/playlist-info-item-uploader
Add uploaderUrl and uploaderVerified to PlaylistInfoItem.
2 parents a4db106 + b441910 commit eb40bb8

10 files changed

Lines changed: 139 additions & 2 deletions

extractor/src/main/java/org/schabi/newpipe/extractor/playlist/PlaylistInfoItem.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
import org.schabi.newpipe.extractor.InfoItem;
44

5+
import javax.annotation.Nullable;
6+
57
public class PlaylistInfoItem extends InfoItem {
68

79
private String uploaderName;
10+
private String uploaderUrl;
11+
private boolean uploaderVerified;
812
/**
913
* How many streams this playlist have
1014
*/
@@ -23,6 +27,23 @@ public void setUploaderName(final String uploaderName) {
2327
this.uploaderName = uploaderName;
2428
}
2529

30+
@Nullable
31+
public String getUploaderUrl() {
32+
return uploaderUrl;
33+
}
34+
35+
public void setUploaderUrl(@Nullable final String uploaderUrl) {
36+
this.uploaderUrl = uploaderUrl;
37+
}
38+
39+
public boolean isUploaderVerified() {
40+
return uploaderVerified;
41+
}
42+
43+
public void setUploaderVerified(final boolean uploaderVerified) {
44+
this.uploaderVerified = uploaderVerified;
45+
}
46+
2647
public long getStreamCount() {
2748
return streamCount;
2849
}

extractor/src/main/java/org/schabi/newpipe/extractor/playlist/PlaylistInfoItemExtractor.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@ public interface PlaylistInfoItemExtractor extends InfoItemExtractor {
1313
*/
1414
String getUploaderName() throws ParsingException;
1515

16+
/**
17+
* Get the uploader url
18+
* @return the uploader url
19+
*/
20+
String getUploaderUrl() throws ParsingException;
21+
22+
/**
23+
* Get whether the uploader is verified
24+
* @return whether the uploader is verified
25+
*/
26+
boolean isUploaderVerified() throws ParsingException;
27+
1628
/**
1729
* Get the number of streams
1830
* @return the number of streams

extractor/src/main/java/org/schabi/newpipe/extractor/playlist/PlaylistInfoItemsCollector.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ public PlaylistInfoItem extract(final PlaylistInfoItemExtractor extractor)
2121
} catch (final Exception e) {
2222
addError(e);
2323
}
24+
try {
25+
resultItem.setUploaderUrl(extractor.getUploaderUrl());
26+
} catch (final Exception e) {
27+
addError(e);
28+
}
29+
try {
30+
resultItem.setUploaderVerified(extractor.isUploaderVerified());
31+
} catch (final Exception e) {
32+
addError(e);
33+
}
2434
try {
2535
resultItem.setThumbnailUrl(extractor.getThumbnailUrl());
2636
} catch (final Exception e) {

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistInfoItemExtractor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ public String getUploaderName() {
2020
.split(" by")[0];
2121
}
2222

23+
@Override
24+
public String getUploaderUrl() {
25+
return null;
26+
}
27+
28+
@Override
29+
public boolean isUploaderVerified() {
30+
return false;
31+
}
32+
2333
@Override
2434
public long getStreamCount() {
2535
final String length = resultInfo.getElementsByClass("length").text();

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistInfoItemFeaturedExtractor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ public String getUploaderName() {
1818
return featuredStory.getString("band_name");
1919
}
2020

21+
@Override
22+
public String getUploaderUrl() {
23+
return null;
24+
}
25+
26+
@Override
27+
public boolean isUploaderVerified() {
28+
return false;
29+
}
30+
2131
@Override
2232
public long getStreamCount() {
2333
return featuredStory.getInt("num_streamable_tracks");

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRelatedPlaylistInfoItemExtractor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ public String getUploaderName() throws ParsingException {
3838
return relatedAlbum.getElementsByClass("by-artist").text().replace("by ", "");
3939
}
4040

41+
@Override
42+
public String getUploaderUrl() throws ParsingException {
43+
return null;
44+
}
45+
46+
@Override
47+
public boolean isUploaderVerified() throws ParsingException {
48+
return false;
49+
}
50+
4151
@Override
4252
public long getStreamCount() throws ParsingException {
4353
return -1;

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudPlaylistInfoItemExtractor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,16 @@ public String getUploaderName() throws ParsingException {
8181
}
8282
}
8383

84+
@Override
85+
public String getUploaderUrl() {
86+
return null;
87+
}
88+
89+
@Override
90+
public boolean isUploaderVerified() {
91+
return false;
92+
}
93+
8494
@Override
8595
public long getStreamCount() {
8696
return itemObject.getLong("track_count");

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,28 @@ public static String getTextFromObject(final JsonObject textObject) throws Parsi
10141014
return getTextFromObject(textObject, false);
10151015
}
10161016

1017+
@Nullable
1018+
public static String getUrlFromObject(final JsonObject textObject) throws ParsingException {
1019+
1020+
if (isNullOrEmpty(textObject)) {
1021+
return null;
1022+
}
1023+
1024+
if (textObject.getArray("runs").isEmpty()) {
1025+
return null;
1026+
}
1027+
1028+
for (final Object textPart : textObject.getArray("runs")) {
1029+
final String url = getUrlFromNavigationEndpoint(((JsonObject) textPart)
1030+
.getObject("navigationEndpoint"));
1031+
if (!isNullOrEmpty(url)) {
1032+
return url;
1033+
}
1034+
}
1035+
1036+
return null;
1037+
}
1038+
10171039
@Nullable
10181040
public static String getTextAtKey(@Nonnull final JsonObject jsonObject, final String theKey)
10191041
throws ParsingException {

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,22 @@ public String getThumbnailUrl() throws ParsingException {
4747

4848
@Override
4949
public String getUploaderName() throws ParsingException {
50-
// this will be "YouTube" for mixes
50+
// this will be a list of uploaders for mixes
5151
return YoutubeParsingHelper.getTextFromObject(mixInfoItem.getObject("longBylineText"));
5252
}
5353

54+
@Override
55+
public String getUploaderUrl() throws ParsingException {
56+
// They're auto-generated, so there's no uploader
57+
return null;
58+
}
59+
60+
@Override
61+
public boolean isUploaderVerified() throws ParsingException {
62+
// They're auto-generated, so there's no uploader
63+
return false;
64+
}
65+
5466
@Override
5567
public long getStreamCount() throws ParsingException {
5668
final String countString = YoutubeParsingHelper.getTextFromObject(

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package org.schabi.newpipe.extractor.services.youtube.extractors;
22

33
import com.grack.nanojson.JsonObject;
4-
54
import org.schabi.newpipe.extractor.exceptions.ParsingException;
65
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
6+
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
77
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubePlaylistLinkHandlerFactory;
88
import org.schabi.newpipe.extractor.utils.Utils;
99

1010
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
1111
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
12+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromObject;
13+
1214

1315
public class YoutubePlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
1416
private final JsonObject playlistInfoItem;
@@ -57,6 +59,24 @@ public String getUploaderName() throws ParsingException {
5759
}
5860
}
5961

62+
@Override
63+
public String getUploaderUrl() throws ParsingException {
64+
try {
65+
return getUrlFromObject(playlistInfoItem.getObject("longBylineText"));
66+
} catch (final Exception e) {
67+
throw new ParsingException("Could not get uploader url", e);
68+
}
69+
}
70+
71+
@Override
72+
public boolean isUploaderVerified() throws ParsingException {
73+
try {
74+
return YoutubeParsingHelper.isVerified(playlistInfoItem.getArray("ownerBadges"));
75+
} catch (final Exception e) {
76+
throw new ParsingException("Could not get uploader verification info", e);
77+
}
78+
}
79+
6080
@Override
6181
public long getStreamCount() throws ParsingException {
6282
try {

0 commit comments

Comments
 (0)