[Bandcamp] Apply changes in InfoItemExtractors

This commit is contained in:
AudricV 2022-07-30 17:09:09 +02:00
parent 4b80d737a4
commit 7e01eaac33
No known key found for this signature in database
GPG Key ID: DA92EC7905614198
10 changed files with 96 additions and 66 deletions

View File

@ -1,10 +1,16 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.ListExtractor; import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
import java.util.List;
import javax.annotation.Nonnull;
public class BandcampAlbumInfoItemExtractor implements PlaylistInfoItemExtractor { public class BandcampAlbumInfoItemExtractor implements PlaylistInfoItemExtractor {
private final JsonObject albumInfoItem; private final JsonObject albumInfoItem;
private final String uploaderUrl; private final String uploaderUrl;
@ -28,9 +34,10 @@ public class BandcampAlbumInfoItemExtractor implements PlaylistInfoItemExtractor
albumInfoItem.getString("item_type")); albumInfoItem.getString("item_type"));
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
return BandcampExtractorHelper.getImageUrl(albumInfoItem.getLong("art_id"), true); return BandcampExtractorHelper.getImagesFromImageId(albumInfoItem.getLong("art_id"), true);
} }
@Override @Override

View File

@ -3,9 +3,15 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.channel.ChannelInfoItemExtractor; import org.schabi.newpipe.extractor.channel.ChannelInfoItemExtractor;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import javax.annotation.Nonnull;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromSearchResult;
public class BandcampChannelInfoItemExtractor implements ChannelInfoItemExtractor { public class BandcampChannelInfoItemExtractor implements ChannelInfoItemExtractor {
private final Element resultInfo; private final Element resultInfo;
@ -26,9 +32,10 @@ public class BandcampChannelInfoItemExtractor implements ChannelInfoItemExtracto
return resultInfo.getElementsByClass("itemurl").text(); return resultInfo.getElementsByClass("itemurl").text();
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
return BandcampExtractorHelper.getThumbnailUrlFromSearchResult(searchResult); return getImagesFromSearchResult(searchResult);
} }
@Override @Override

View File

@ -1,13 +1,17 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImageUrl; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromImageId;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor; import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.stream.Description; import org.schabi.newpipe.extractor.stream.Description;
import javax.annotation.Nonnull;
import java.util.List;
public class BandcampCommentsInfoItemExtractor implements CommentsInfoItemExtractor { public class BandcampCommentsInfoItemExtractor implements CommentsInfoItemExtractor {
private final JsonObject review; private final JsonObject review;
@ -28,9 +32,10 @@ public class BandcampCommentsInfoItemExtractor implements CommentsInfoItemExtrac
return url; return url;
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
return getUploaderAvatarUrl(); return getUploaderAvatars();
} }
@Override @Override
@ -43,8 +48,9 @@ public class BandcampCommentsInfoItemExtractor implements CommentsInfoItemExtrac
return review.getString("name"); return review.getString("name");
} }
@Nonnull
@Override @Override
public String getUploaderAvatarUrl() { public List<Image> getUploaderAvatars() {
return getImageUrl(review.getLong("image_id"), false); return getImagesFromImageId(review.getLong("image_id"), false);
} }
} }

View File

@ -1,9 +1,13 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromSearchResult;
public class BandcampPlaylistInfoItemExtractor implements PlaylistInfoItemExtractor { public class BandcampPlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
private final Element searchResult; private final Element searchResult;
@ -46,8 +50,9 @@ public class BandcampPlaylistInfoItemExtractor implements PlaylistInfoItemExtrac
return resultInfo.getElementsByClass("itemurl").text(); return resultInfo.getElementsByClass("itemurl").text();
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() { public List<Image> getThumbnails() {
return BandcampExtractorHelper.getThumbnailUrlFromSearchResult(searchResult); return getImagesFromSearchResult(searchResult);
} }
} }

View File

@ -1,9 +1,14 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
import org.schabi.newpipe.extractor.utils.Utils;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImageUrl; import javax.annotation.Nonnull;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromImageId;
public class BandcampPlaylistInfoItemFeaturedExtractor implements PlaylistInfoItemExtractor { public class BandcampPlaylistInfoItemFeaturedExtractor implements PlaylistInfoItemExtractor {
@ -40,12 +45,14 @@ public class BandcampPlaylistInfoItemFeaturedExtractor implements PlaylistInfoIt
@Override @Override
public String getUrl() { public String getUrl() {
return featuredStory.getString("item_url").replaceAll("http://", "https://"); return Utils.replaceHttpWithHttps(featuredStory.getString("item_url"));
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() { public List<Image> getThumbnails() {
return featuredStory.has("art_id") ? getImageUrl(featuredStory.getLong("art_id"), true) return featuredStory.has("art_id")
: getImageUrl(featuredStory.getLong("item_art_id"), true); ? getImagesFromImageId(featuredStory.getLong("art_id"), true)
: getImagesFromImageId(featuredStory.getLong("item_art_id"), true);
} }
} }

View File

@ -3,15 +3,20 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.localization.DateWrapper; import org.schabi.newpipe.extractor.localization.DateWrapper;
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor; import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
import org.schabi.newpipe.extractor.stream.StreamType; import org.schabi.newpipe.extractor.stream.StreamType;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.BASE_URL; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.BASE_URL;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImageUrl; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromImageId;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.parseDate;
public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor { public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor {
@ -39,7 +44,7 @@ public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor {
@Nullable @Nullable
@Override @Override
public DateWrapper getUploadDate() throws ParsingException { public DateWrapper getUploadDate() throws ParsingException {
return BandcampExtractorHelper.parseDate(getTextualUploadDate()); return parseDate(getTextualUploadDate());
} }
@Override @Override
@ -52,9 +57,10 @@ public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor {
return BASE_URL + "/?show=" + show.getInt("id"); return BASE_URL + "/?show=" + show.getInt("id");
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() { public List<Image> getThumbnails() {
return getImageUrl(show.getLong("image_id"), false); return getImagesFromImageId(show.getLong("image_id"), false);
} }
@Override @Override
@ -78,12 +84,6 @@ public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor {
return ""; return "";
} }
@Nullable
@Override
public String getUploaderAvatarUrl() {
return null;
}
@Override @Override
public boolean isUploaderVerified() throws ParsingException { public boolean isUploaderVerified() throws ParsingException {
return false; return false;

View File

@ -3,10 +3,14 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors; package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromImageUrl;
/** /**
* Extracts recommended albums from tracks' website * Extracts recommended albums from tracks' website
@ -28,9 +32,10 @@ public class BandcampRelatedPlaylistInfoItemExtractor implements PlaylistInfoIte
return relatedAlbum.getElementsByClass("album-link").attr("abs:href"); return relatedAlbum.getElementsByClass("album-link").attr("abs:href");
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
return relatedAlbum.getElementsByClass("album-art").attr("src"); return getImagesFromImageUrl(relatedAlbum.getElementsByClass("album-art").attr("src"));
} }
@Override @Override

View File

@ -1,10 +1,14 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem; package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper; import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
import javax.annotation.Nullable; import javax.annotation.Nonnull;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromImageId;
public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor { public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor {
@ -20,12 +24,6 @@ public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInf
return discograph.getString("band_name"); return discograph.getString("band_name");
} }
@Nullable
@Override
public String getUploaderAvatarUrl() {
return null;
}
@Override @Override
public String getName() { public String getName() {
return discograph.getString("title"); return discograph.getString("title");
@ -40,11 +38,10 @@ public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInf
); );
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
return BandcampExtractorHelper.getImageUrl( return getImagesFromImageId(discograph.getLong("art_id"), true);
discograph.getLong("art_id"), true
);
} }
@Override @Override

View File

@ -3,19 +3,21 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem; package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem;
import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonObject;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.stream.StreamExtractor; import org.schabi.newpipe.extractor.stream.StreamExtractor;
import javax.annotation.Nullable; import javax.annotation.Nonnull;
import java.io.IOException; import java.io.IOException;
import java.util.Collections;
import java.util.List;
public class BandcampPlaylistStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor { public class BandcampPlaylistStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor {
private final JsonObject track; private final JsonObject track;
private String substituteCoverUrl; private List<Image> substituteCovers;
private final StreamingService service; private final StreamingService service;
public BandcampPlaylistStreamInfoItemExtractor(final JsonObject track, public BandcampPlaylistStreamInfoItemExtractor(final JsonObject track,
@ -24,13 +26,14 @@ public class BandcampPlaylistStreamInfoItemExtractor extends BandcampStreamInfoI
super(uploaderUrl); super(uploaderUrl);
this.track = track; this.track = track;
this.service = service; this.service = service;
substituteCovers = Collections.emptyList();
} }
public BandcampPlaylistStreamInfoItemExtractor(final JsonObject track, public BandcampPlaylistStreamInfoItemExtractor(final JsonObject track,
final String uploaderUrl, final String uploaderUrl,
final String substituteCoverUrl) { final List<Image> substituteCovers) {
this(track, uploaderUrl, (StreamingService) null); this(track, uploaderUrl, (StreamingService) null);
this.substituteCoverUrl = substituteCoverUrl; this.substituteCovers = substituteCovers;
} }
@Override @Override
@ -56,28 +59,23 @@ public class BandcampPlaylistStreamInfoItemExtractor extends BandcampStreamInfoI
return ""; return "";
} }
@Nullable
@Override
public String getUploaderAvatarUrl() {
return null;
}
/** /**
* Each track can have its own cover art. Therefore, unless a substitute is provided, * Each track can have its own cover art. Therefore, unless a substitute is provided,
* the thumbnail is extracted using a stream extractor. * the thumbnail is extracted using a stream extractor.
*/ */
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
if (substituteCoverUrl != null) { if (substituteCovers.isEmpty()) {
return substituteCoverUrl;
} else {
try { try {
final StreamExtractor extractor = service.getStreamExtractor(getUrl()); final StreamExtractor extractor = service.getStreamExtractor(getUrl());
extractor.fetchPage(); extractor.fetchPage();
return extractor.getThumbnailUrl(); return extractor.getThumbnails();
} catch (final ExtractionException | IOException e) { } catch (final ExtractionException | IOException e) {
throw new ParsingException("could not download cover art location", e); throw new ParsingException("Could not download cover art location", e);
} }
} }
return substituteCovers;
} }
} }

View File

@ -1,10 +1,13 @@
package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem; package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.schabi.newpipe.extractor.Image;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
import javax.annotation.Nullable; import javax.annotation.Nonnull;
import java.util.List;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImagesFromSearchResult;
public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor { public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor {
@ -29,12 +32,6 @@ public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoIte
} }
} }
@Nullable
@Override
public String getUploaderAvatarUrl() {
return null;
}
@Override @Override
public String getName() throws ParsingException { public String getName() throws ParsingException {
return resultInfo.getElementsByClass("heading").text(); return resultInfo.getElementsByClass("heading").text();
@ -45,9 +42,10 @@ public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoIte
return resultInfo.getElementsByClass("itemurl").text(); return resultInfo.getElementsByClass("itemurl").text();
} }
@Nonnull
@Override @Override
public String getThumbnailUrl() throws ParsingException { public List<Image> getThumbnails() throws ParsingException {
return BandcampExtractorHelper.getThumbnailUrlFromSearchResult(searchResult); return getImagesFromSearchResult(searchResult);
} }
@Override @Override