Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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