Skip to content

Commit

Permalink
Merge pull request #959 from FireMasterK/playlist-info-item-uploader
Browse files Browse the repository at this point in the history
Add uploaderUrl and uploaderVerified to PlaylistInfoItem.
  • Loading branch information
TobiGr authored Oct 31, 2022
2 parents a4db106 + b441910 commit eb40bb8
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@

import org.schabi.newpipe.extractor.InfoItem;

import javax.annotation.Nullable;

public class PlaylistInfoItem extends InfoItem {

private String uploaderName;
private String uploaderUrl;
private boolean uploaderVerified;
/**
* How many streams this playlist have
*/
Expand All @@ -23,6 +27,23 @@ public void setUploaderName(final String uploaderName) {
this.uploaderName = uploaderName;
}

@Nullable
public String getUploaderUrl() {
return uploaderUrl;
}

public void setUploaderUrl(@Nullable final String uploaderUrl) {
this.uploaderUrl = uploaderUrl;
}

public boolean isUploaderVerified() {
return uploaderVerified;
}

public void setUploaderVerified(final boolean uploaderVerified) {
this.uploaderVerified = uploaderVerified;
}

public long getStreamCount() {
return streamCount;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,18 @@ public interface PlaylistInfoItemExtractor extends InfoItemExtractor {
*/
String getUploaderName() throws ParsingException;

/**
* Get the uploader url
* @return the uploader url
*/
String getUploaderUrl() throws ParsingException;

/**
* Get whether the uploader is verified
* @return whether the uploader is verified
*/
boolean isUploaderVerified() throws ParsingException;

/**
* Get the number of streams
* @return the number of streams
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ public PlaylistInfoItem extract(final PlaylistInfoItemExtractor extractor)
} catch (final Exception e) {
addError(e);
}
try {
resultItem.setUploaderUrl(extractor.getUploaderUrl());
} catch (final Exception e) {
addError(e);
}
try {
resultItem.setUploaderVerified(extractor.isUploaderVerified());
} catch (final Exception e) {
addError(e);
}
try {
resultItem.setThumbnailUrl(extractor.getThumbnailUrl());
} catch (final Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@ public String getUploaderName() {
.split(" by")[0];
}

@Override
public String getUploaderUrl() {
return null;
}

@Override
public boolean isUploaderVerified() {
return false;
}

@Override
public long getStreamCount() {
final String length = resultInfo.getElementsByClass("length").text();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ public String getUploaderName() {
return featuredStory.getString("band_name");
}

@Override
public String getUploaderUrl() {
return null;
}

@Override
public boolean isUploaderVerified() {
return false;
}

@Override
public long getStreamCount() {
return featuredStory.getInt("num_streamable_tracks");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ public String getUploaderName() throws ParsingException {
return relatedAlbum.getElementsByClass("by-artist").text().replace("by ", "");
}

@Override
public String getUploaderUrl() throws ParsingException {
return null;
}

@Override
public boolean isUploaderVerified() throws ParsingException {
return false;
}

@Override
public long getStreamCount() throws ParsingException {
return -1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,16 @@ public String getUploaderName() throws ParsingException {
}
}

@Override
public String getUploaderUrl() {
return null;
}

@Override
public boolean isUploaderVerified() {
return false;
}

@Override
public long getStreamCount() {
return itemObject.getLong("track_count");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1014,6 +1014,28 @@ public static String getTextFromObject(final JsonObject textObject) throws Parsi
return getTextFromObject(textObject, false);
}

@Nullable
public static String getUrlFromObject(final JsonObject textObject) throws ParsingException {

if (isNullOrEmpty(textObject)) {
return null;
}

if (textObject.getArray("runs").isEmpty()) {
return null;
}

for (final Object textPart : textObject.getArray("runs")) {
final String url = getUrlFromNavigationEndpoint(((JsonObject) textPart)
.getObject("navigationEndpoint"));
if (!isNullOrEmpty(url)) {
return url;
}
}

return null;
}

@Nullable
public static String getTextAtKey(@Nonnull final JsonObject jsonObject, final String theKey)
throws ParsingException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,22 @@ public String getThumbnailUrl() throws ParsingException {

@Override
public String getUploaderName() throws ParsingException {
// this will be "YouTube" for mixes
// this will be a list of uploaders for mixes
return YoutubeParsingHelper.getTextFromObject(mixInfoItem.getObject("longBylineText"));
}

@Override
public String getUploaderUrl() throws ParsingException {
// They're auto-generated, so there's no uploader
return null;
}

@Override
public boolean isUploaderVerified() throws ParsingException {
// They're auto-generated, so there's no uploader
return false;
}

@Override
public long getStreamCount() throws ParsingException {
final String countString = YoutubeParsingHelper.getTextFromObject(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package org.schabi.newpipe.extractor.services.youtube.extractors;

import com.grack.nanojson.JsonObject;

import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubePlaylistLinkHandlerFactory;
import org.schabi.newpipe.extractor.utils.Utils;

import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.fixThumbnailUrl;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromObject;


public class YoutubePlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
private final JsonObject playlistInfoItem;
Expand Down Expand Up @@ -57,6 +59,24 @@ public String getUploaderName() throws ParsingException {
}
}

@Override
public String getUploaderUrl() throws ParsingException {
try {
return getUrlFromObject(playlistInfoItem.getObject("longBylineText"));
} catch (final Exception e) {
throw new ParsingException("Could not get uploader url", e);
}
}

@Override
public boolean isUploaderVerified() throws ParsingException {
try {
return YoutubeParsingHelper.isVerified(playlistInfoItem.getArray("ownerBadges"));
} catch (final Exception e) {
throw new ParsingException("Could not get uploader verification info", e);
}
}

@Override
public long getStreamCount() throws ParsingException {
try {
Expand Down

0 comments on commit eb40bb8

Please sign in to comment.