89 lines
3.2 KiB
Java
89 lines
3.2 KiB
Java
package org.schabi.newpipe.extractor.services.youtube.extractors;
|
|
|
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.extractPlaylistTypeFromPlaylistUrl;
|
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
|
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getThumbnailUrlFromInfoItem;
|
|
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
|
|
|
import com.grack.nanojson.JsonObject;
|
|
|
|
import org.schabi.newpipe.extractor.ListExtractor;
|
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
|
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
|
|
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
|
|
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
|
|
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class YoutubeMixOrPlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
|
|
private final JsonObject mixInfoItem;
|
|
|
|
public YoutubeMixOrPlaylistInfoItemExtractor(final JsonObject mixInfoItem) {
|
|
this.mixInfoItem = mixInfoItem;
|
|
}
|
|
|
|
@Override
|
|
public String getName() throws ParsingException {
|
|
final String name = getTextFromObject(mixInfoItem.getObject("title"));
|
|
if (isNullOrEmpty(name)) {
|
|
throw new ParsingException("Could not get name");
|
|
}
|
|
return name;
|
|
}
|
|
|
|
@Override
|
|
public String getUrl() throws ParsingException {
|
|
final String url = mixInfoItem.getString("shareUrl");
|
|
if (isNullOrEmpty(url)) {
|
|
throw new ParsingException("Could not get url");
|
|
}
|
|
return url;
|
|
}
|
|
|
|
@Override
|
|
public String getThumbnailUrl() throws ParsingException {
|
|
return getThumbnailUrlFromInfoItem(mixInfoItem);
|
|
}
|
|
|
|
@Override
|
|
public String getUploaderName() throws ParsingException {
|
|
// 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(
|
|
mixInfoItem.getObject("videoCountShortText"));
|
|
if (countString == null) {
|
|
throw new ParsingException("Could not extract item count for playlist/mix info item");
|
|
}
|
|
|
|
try {
|
|
return Integer.parseInt(countString);
|
|
} catch (final NumberFormatException ignored) {
|
|
// un-parsable integer: this is a mix with infinite items and "50+" as count string
|
|
// (though youtube music mixes do not necessarily have an infinite count of songs)
|
|
return ListExtractor.ITEM_COUNT_INFINITE;
|
|
}
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public PlaylistInfo.PlaylistType getPlaylistType() throws ParsingException {
|
|
return extractPlaylistTypeFromPlaylistUrl(getUrl());
|
|
}
|
|
}
|