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.exceptions.ReCaptchaException;
import org.schabi.newpipe.extractor.linkhandler.LinkHandler; import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
import org.schabi.newpipe.extractor.stream.AudioStream; import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.Description;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -91,8 +92,8 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor {
@Nonnull @Nonnull
@Override @Override
public String getDescription() { public Description getDescription() {
return showInfo.getString("desc"); return new Description(showInfo.getString("desc"), Description.PLAIN_TEXT);
} }
@Override @Override
@ -120,4 +121,22 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor {
return list; 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.json.JSONObject;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; 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.MediaFormat;
import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.downloader.Downloader; import org.schabi.newpipe.extractor.downloader.Downloader;
@ -20,6 +22,7 @@ import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampChannelExtractor.getImageUrl; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampChannelExtractor.getImageUrl;
@ -121,14 +124,15 @@ public class BandcampStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public String getDescription() { public Description getDescription() {
return BandcampExtractorHelper.smartConcatenate( String s = BandcampExtractorHelper.smartConcatenate(
new String[]{ new String[]{
getStringOrNull(current, "about"), getStringOrNull(current, "about"),
getStringOrNull(current, "lyrics"), getStringOrNull(current, "lyrics"),
getStringOrNull(current, "credits") getStringOrNull(current, "credits")
}, "\n\n" }, "\n\n"
); );
return new Description(s, Description.PLAIN_TEXT);
} }
/** /**
@ -176,7 +180,7 @@ public class BandcampStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public String getDashMpdUrl() throws ParsingException { public String getDashMpdUrl() throws ParsingException {
return null; return "";
} }
@Nonnull @Nonnull
@ -210,13 +214,13 @@ public class BandcampStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public List<SubtitlesStream> getSubtitlesDefault() { public List<SubtitlesStream> getSubtitlesDefault() {
return null; return new ArrayList<>();
} }
@Nonnull @Nonnull
@Override @Override
public List<SubtitlesStream> getSubtitles(MediaFormat format) { public List<SubtitlesStream> getSubtitles(MediaFormat format) {
return null; return new ArrayList<>();
} }
@Override @Override
@ -238,4 +242,77 @@ public class BandcampStreamExtractor extends StreamExtractor {
public String getErrorMessage() { public String getErrorMessage() {
return null; 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.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampStreamExtractor; 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.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@ -52,7 +55,7 @@ public class BandcampStreamExtractorTest {
@Test @Test
public void testDescription() { public void testDescription() {
assertEquals(831, extractor.getDescription().length()); assertEquals(831, extractor.getDescription().getContent().length());
} }
@Test @Test
@ -77,4 +80,19 @@ public class BandcampStreamExtractorTest {
bandcamp.getStreamExtractor("https://bandcamp.com"); 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());
}
} }