Merge pull request #610 from TeamNewPipe/bandcamp_related_items

Extract related bandcamp items
This commit is contained in:
Tobi 2021-04-13 21:05:27 +02:00 committed by GitHub
commit c14f6db14a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 3 deletions

View File

@ -14,6 +14,7 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemsCollector;
import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.Description;
import org.schabi.newpipe.extractor.stream.StreamSegment;
@ -165,4 +166,10 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor {
public Privacy getPrivacy() {
return Privacy.PUBLIC;
}
@Override
public PlaylistInfoItemsCollector getRelatedItems() {
// Contrary to other Bandcamp streams, radio streams don't have related items
return null;
}
}

View File

@ -0,0 +1,45 @@
// Created by Fynn Godau 2021, licensed GNU GPL version 3 or later
package org.schabi.newpipe.extractor.services.bandcamp.extractors;
import org.jsoup.nodes.Element;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemExtractor;
import javax.annotation.Nonnull;
/**
* Extracts recommended albums from tracks' website
*/
public class BandcampRelatedPlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
private final Element relatedAlbum;
public BandcampRelatedPlaylistInfoItemExtractor(@Nonnull Element relatedAlbum) {
this.relatedAlbum = relatedAlbum;
}
@Override
public String getName() throws ParsingException {
return relatedAlbum.getElementsByClass("release-title").text();
}
@Override
public String getUrl() throws ParsingException {
return relatedAlbum.getElementsByClass("title-and-artist").attr("abs:href");
}
@Override
public String getThumbnailUrl() throws ParsingException {
return relatedAlbum.getElementsByClass("album-art").attr("src");
}
@Override
public String getUploaderName() throws ParsingException {
return relatedAlbum.getElementsByClass("by-artist").text().replace("by ", "");
}
@Override
public long getStreamCount() throws ParsingException {
return -1;
}
}

View File

@ -16,6 +16,7 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
import org.schabi.newpipe.extractor.localization.DateWrapper;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItemsCollector;
import org.schabi.newpipe.extractor.stream.*;
import org.schabi.newpipe.extractor.utils.JsonUtils;
import org.schabi.newpipe.extractor.utils.Utils;
@ -245,8 +246,17 @@ public class BandcampStreamExtractor extends StreamExtractor {
}
@Override
public StreamInfoItemsCollector getRelatedItems() {
return null;
public PlaylistInfoItemsCollector getRelatedItems() {
PlaylistInfoItemsCollector collector = new PlaylistInfoItemsCollector(getServiceId());
Elements recommendedAlbums = document.getElementsByClass("recommended-album");
for (Element album : recommendedAlbums) {
collector.commit(new BandcampRelatedPlaylistInfoItemExtractor(album));
}
return collector;
}
@Override

View File

@ -126,7 +126,7 @@ public class BandcampStreamExtractorTest extends DefaultStreamExtractorTest {
@Override
public boolean expectedHasRelatedItems() {
return false;
return true;
}
@Override