Update Bandcamp service to latest interface changes

This commit is contained in:
Fynn Godau 2020-03-17 20:40:25 +01:00
parent b78f788017
commit a1523eb293
3 changed files with 122 additions and 8 deletions

View file

@ -11,6 +11,7 @@ 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.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.Description;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@ -91,8 +92,8 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor {
@Nonnull
@Override
public String getDescription() {
return showInfo.getString("desc");
public Description getDescription() {
return new Description(showInfo.getString("desc"), Description.PLAIN_TEXT);
}
@Override
@ -120,4 +121,22 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor {
return list;
}
@Nonnull
@Override
public String getLicence() {
return "";
}
@Nonnull
@Override
public String getCategory() {
return "";
}
@Nonnull
@Override
public List<String> getTags() {
return new ArrayList<>();
}
}

View file

@ -6,6 +6,8 @@ import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.downloader.Downloader;
@ -20,6 +22,7 @@ import javax.annotation.Nullable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampChannelExtractor.getImageUrl;
@ -121,14 +124,15 @@ public class BandcampStreamExtractor extends StreamExtractor {
@Nonnull
@Override
public String getDescription() {
return BandcampExtractorHelper.smartConcatenate(
public Description getDescription() {
String s = BandcampExtractorHelper.smartConcatenate(
new String[]{
getStringOrNull(current, "about"),
getStringOrNull(current, "lyrics"),
getStringOrNull(current, "credits")
}, "\n\n"
);
return new Description(s, Description.PLAIN_TEXT);
}
/**
@ -176,7 +180,7 @@ public class BandcampStreamExtractor extends StreamExtractor {
@Nonnull
@Override
public String getDashMpdUrl() throws ParsingException {
return null;
return "";
}
@Nonnull
@ -210,13 +214,13 @@ public class BandcampStreamExtractor extends StreamExtractor {
@Nonnull
@Override
public List<SubtitlesStream> getSubtitlesDefault() {
return null;
return new ArrayList<>();
}
@Nonnull
@Override
public List<SubtitlesStream> getSubtitles(MediaFormat format) {
return null;
return new ArrayList<>();
}
@Override
@ -238,4 +242,77 @@ public class BandcampStreamExtractor extends StreamExtractor {
public String getErrorMessage() {
return null;
}
@Nonnull
@Override
public String getHost() {
return "";
}
@Nonnull
@Override
public String getPrivacy() {
return "";
}
@Nonnull
@Override
public String getCategory() {
// Get first tag from html, which is the artist's Genre
return document.getElementsByAttributeValue("itemprop", "keywords").first().text();
}
@Nonnull
@Override
public String getLicence() {
int license = current.getInt("license_type");
// Tests resulted in this mapping of ints to licence: https://cloud.disroot.org/s/ZTWBxbQ9fKRmRWJ/preview
switch (license) {
case 1:
return "All rights reserved ©";
case 2:
return "CC BY-NC-ND 3.0";
case 3:
return "CC BY-NC-SA 3.0";
case 4:
return "CC BY-NC 3.0";
case 5:
return "CC BY-ND 3.0";
case 8:
return "CC BY-SA 3.0";
case 6:
return "CC BY 3.0";
default:
return "Unknown license (internal ID " + license + ")";
}
}
@Nullable
@Override
public Locale getLanguageInfo() {
return null;
}
@Nonnull
@Override
public List<String> getTags() {
Elements tagElements = document.getElementsByAttributeValue("itemprop", "keywords");
ArrayList<String> tags = new ArrayList<>();
for (Element e : tagElements) {
tags.add(e.text());
}
return tags;
}
@Nonnull
@Override
public String getSupportInfo() {
return "";
}
}

View file

@ -9,6 +9,9 @@ import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampStreamExtractor;
import org.schabi.newpipe.extractor.stream.StreamExtractor;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@ -52,7 +55,7 @@ public class BandcampStreamExtractorTest {
@Test
public void testDescription() {
assertEquals(831, extractor.getDescription().length());
assertEquals(831, extractor.getDescription().getContent().length());
}
@Test
@ -77,4 +80,19 @@ public class BandcampStreamExtractorTest {
bandcamp.getStreamExtractor("https://bandcamp.com");
}
@Test
public void testCategory() throws ExtractionException, IOException {
StreamExtractor se = bandcamp.getStreamExtractor("https://npet.bandcamp.com/track/track-1");
se.fetchPage();
assertEquals("acoustic", se.getCategory());
}
@Test
public void testLicense() throws ExtractionException, IOException {
StreamExtractor se = bandcamp.getStreamExtractor("https://npet.bandcamp.com/track/track-1");
se.fetchPage();
assertEquals("CC BY 3.0", se.getLicence());
}
}