mirror of
https://github.com/TeamNewPipe/NewPipeExtractor.git
synced 2025-04-28 16:00:33 +05:30
[SoundCloud] Apply changes in InfoItemExtractors and return track user avatars as uploader avatars in SoundcloudStreamInfoItemExtractor
This commit is contained in:
parent
7f818217d2
commit
a3a74cd566
@ -1,11 +1,15 @@
|
||||
package org.schabi.newpipe.extractor.services.soundcloud.extractors;
|
||||
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
||||
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
||||
import org.schabi.newpipe.extractor.Image;
|
||||
import org.schabi.newpipe.extractor.channel.ChannelInfoItemExtractor;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.getAllImagesFromArtworkOrAvatarUrl;
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
||||
|
||||
public class SoundcloudChannelInfoItemExtractor implements ChannelInfoItemExtractor {
|
||||
private final JsonObject itemObject;
|
||||
|
||||
@ -23,10 +27,10 @@ public class SoundcloudChannelInfoItemExtractor implements ChannelInfoItemExtrac
|
||||
return replaceHttpWithHttps(itemObject.getString("permalink_url"));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getThumbnailUrl() {
|
||||
// An avatar URL with a better resolution
|
||||
return itemObject.getString("avatar_url", "").replace("large.jpg", "crop.jpg");
|
||||
public List<Image> getThumbnails() {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(itemObject.getString("avatar_url"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,15 +1,20 @@
|
||||
package org.schabi.newpipe.extractor.services.soundcloud.extractors;
|
||||
|
||||
import com.grack.nanojson.JsonObject;
|
||||
import org.schabi.newpipe.extractor.Image;
|
||||
import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor;
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
||||
import org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper;
|
||||
import org.schabi.newpipe.extractor.stream.Description;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.getAllImagesFromArtworkOrAvatarUrl;
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.parseDateFrom;
|
||||
|
||||
public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtractor {
|
||||
private final JsonObject json;
|
||||
private final String url;
|
||||
@ -34,9 +39,10 @@ public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtr
|
||||
return json.getObject("user").getString("username");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderAvatarUrl() {
|
||||
return json.getObject("user").getString("avatar_url");
|
||||
public List<Image> getUploaderAvatars() {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(json.getObject("user").getString("avatar_url"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -45,7 +51,7 @@ public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtr
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStreamPosition() throws ParsingException {
|
||||
public int getStreamPosition() {
|
||||
return json.getInt("timestamp") / 1000; // convert milliseconds to seconds
|
||||
}
|
||||
|
||||
@ -62,7 +68,7 @@ public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtr
|
||||
@Nullable
|
||||
@Override
|
||||
public DateWrapper getUploadDate() throws ParsingException {
|
||||
return new DateWrapper(SoundcloudParsingHelper.parseDateFrom(getTextualUploadDate()));
|
||||
return new DateWrapper(parseDateFrom(getTextualUploadDate()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -75,8 +81,9 @@ public class SoundcloudCommentsInfoItemExtractor implements CommentsInfoItemExtr
|
||||
return url;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getThumbnailUrl() {
|
||||
return json.getObject("user").getString("avatar_url");
|
||||
public List<Image> getThumbnails() {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(json.getObject("user").getString("avatar_url"));
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,17 @@
|
||||
package org.schabi.newpipe.extractor.services.soundcloud.extractors;
|
||||
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
||||
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
||||
import org.schabi.newpipe.extractor.Image;
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.getAllImagesFromArtworkOrAvatarUrl;
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
||||
|
||||
public class SoundcloudPlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
|
||||
private static final String USER_KEY = "user";
|
||||
private static final String AVATAR_URL_KEY = "avatar_url";
|
||||
@ -28,36 +33,35 @@ public class SoundcloudPlaylistInfoItemExtractor implements PlaylistInfoItemExtr
|
||||
return replaceHttpWithHttps(itemObject.getString("permalink_url"));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getThumbnailUrl() throws ParsingException {
|
||||
public List<Image> getThumbnails() throws ParsingException {
|
||||
// Over-engineering at its finest
|
||||
if (itemObject.isString(ARTWORK_URL_KEY)) {
|
||||
final String artworkUrl = itemObject.getString(ARTWORK_URL_KEY, "");
|
||||
if (!artworkUrl.isEmpty()) {
|
||||
// An artwork URL with a better resolution
|
||||
return artworkUrl.replace("large.jpg", "crop.jpg");
|
||||
final String artworkUrl = itemObject.getString(ARTWORK_URL_KEY);
|
||||
if (!isNullOrEmpty(artworkUrl)) {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(artworkUrl);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
// Look for artwork url inside the track list
|
||||
// Look for artwork URL inside the track list
|
||||
for (final Object track : itemObject.getArray("tracks")) {
|
||||
final JsonObject trackObject = (JsonObject) track;
|
||||
|
||||
// First look for track artwork url
|
||||
// First look for track artwork URL
|
||||
if (trackObject.isString(ARTWORK_URL_KEY)) {
|
||||
final String artworkUrl = trackObject.getString(ARTWORK_URL_KEY, "");
|
||||
if (!artworkUrl.isEmpty()) {
|
||||
// An artwork URL with a better resolution
|
||||
return artworkUrl.replace("large.jpg", "crop.jpg");
|
||||
final String artworkUrl = trackObject.getString(ARTWORK_URL_KEY);
|
||||
if (!isNullOrEmpty(artworkUrl)) {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(artworkUrl);
|
||||
}
|
||||
}
|
||||
|
||||
// Then look for track creator avatar url
|
||||
// Then look for track creator avatar URL
|
||||
final JsonObject creator = trackObject.getObject(USER_KEY);
|
||||
final String creatorAvatar = creator.getString(AVATAR_URL_KEY, "");
|
||||
if (!creatorAvatar.isEmpty()) {
|
||||
return creatorAvatar;
|
||||
final String creatorAvatar = creator.getString(AVATAR_URL_KEY);
|
||||
if (!isNullOrEmpty(creatorAvatar)) {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(creatorAvatar);
|
||||
}
|
||||
}
|
||||
} catch (final Exception ignored) {
|
||||
@ -65,10 +69,11 @@ public class SoundcloudPlaylistInfoItemExtractor implements PlaylistInfoItemExtr
|
||||
}
|
||||
|
||||
try {
|
||||
// Last resort, use user avatar url. If still not found, then throw exception.
|
||||
return itemObject.getObject(USER_KEY).getString(AVATAR_URL_KEY, "");
|
||||
// Last resort, use user avatar URL. If still not found, then throw an exception.
|
||||
return getAllImagesFromArtworkOrAvatarUrl(
|
||||
itemObject.getObject(USER_KEY).getString(AVATAR_URL_KEY));
|
||||
} catch (final Exception e) {
|
||||
throw new ParsingException("Failed to extract playlist thumbnail url", e);
|
||||
throw new ParsingException("Failed to extract playlist thumbnails", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,20 +1,24 @@
|
||||
package org.schabi.newpipe.extractor.services.soundcloud.extractors;
|
||||
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
||||
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
||||
import org.schabi.newpipe.extractor.Image;
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
||||
import org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper;
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
|
||||
import org.schabi.newpipe.extractor.stream.StreamType;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.getAllImagesFromArtworkOrAvatarUrl;
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.getAllImagesFromTrackObject;
|
||||
import static org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper.parseDateFrom;
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
|
||||
|
||||
public class SoundcloudStreamInfoItemExtractor implements StreamInfoItemExtractor {
|
||||
|
||||
protected final JsonObject itemObject;
|
||||
private final JsonObject itemObject;
|
||||
|
||||
public SoundcloudStreamInfoItemExtractor(final JsonObject itemObject) {
|
||||
this.itemObject = itemObject;
|
||||
@ -45,10 +49,11 @@ public class SoundcloudStreamInfoItemExtractor implements StreamInfoItemExtracto
|
||||
return replaceHttpWithHttps(itemObject.getObject("user").getString("permalink_url"));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderAvatarUrl() {
|
||||
return null;
|
||||
public List<Image> getUploaderAvatars() {
|
||||
return getAllImagesFromArtworkOrAvatarUrl(
|
||||
itemObject.getObject("user").getString("avatar_url"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -63,7 +68,7 @@ public class SoundcloudStreamInfoItemExtractor implements StreamInfoItemExtracto
|
||||
|
||||
@Override
|
||||
public DateWrapper getUploadDate() throws ParsingException {
|
||||
return new DateWrapper(SoundcloudParsingHelper.parseDateFrom(getTextualUploadDate()));
|
||||
return new DateWrapper(parseDateFrom(getTextualUploadDate()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -71,13 +76,10 @@ public class SoundcloudStreamInfoItemExtractor implements StreamInfoItemExtracto
|
||||
return itemObject.getLong("playback_count");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getThumbnailUrl() {
|
||||
String artworkUrl = itemObject.getString("artwork_url", "");
|
||||
if (artworkUrl.isEmpty()) {
|
||||
artworkUrl = itemObject.getObject("user").getString("avatar_url");
|
||||
}
|
||||
return artworkUrl.replace("large.jpg", "crop.jpg");
|
||||
public List<Image> getThumbnails() throws ParsingException {
|
||||
return getAllImagesFromTrackObject(itemObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user