From 54aa5b3042b1f4cc53a06d78ef9aac4be6996a4a Mon Sep 17 00:00:00 2001 From: TobiGr Date: Tue, 16 Feb 2021 21:09:35 +0100 Subject: [PATCH] Use propper structure in KioskExtractors Made BandCampRadioExtractor a Kiosk which holds StreamInfoItems and not InfoItems. --- .../extractors/BandcampFeaturedExtractor.java | 48 +++++++++---------- .../extractors/BandcampRadioExtractor.java | 45 +++++++---------- .../BandcampFeaturedExtractorTest.java | 1 + .../bandcamp/BandcampRadioExtractorTest.java | 5 +- 4 files changed, 45 insertions(+), 54 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java index 2019153a6..12214601a 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java @@ -24,6 +24,8 @@ public class BandcampFeaturedExtractor extends KioskExtractor public static final String KIOSK_FEATURED = "Featured"; public static final String FEATURED_API_URL = "https://bandcamp.com/api/mobile/24/bootstrap_data"; + private JsonObject json; + public BandcampFeaturedExtractor(final StreamingService streamingService, final ListLinkHandler listLinkHandler, final String kioskId) { super(streamingService, listLinkHandler, kioskId); @@ -31,7 +33,15 @@ public class BandcampFeaturedExtractor extends KioskExtractor @Override public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException { - + try { + json = JsonParser.object().from( + getDownloader().post( + FEATURED_API_URL, null, "{\"platform\":\"\",\"version\":0}".getBytes() + ).responseBody() + ); + } catch (final JsonParserException e) { + throw new ParsingException("Could not parse Bandcamp featured API response", e); + } } @Nonnull @@ -46,35 +56,23 @@ public class BandcampFeaturedExtractor extends KioskExtractor final PlaylistInfoItemsCollector c = new PlaylistInfoItemsCollector(getServiceId()); - try { + final JsonArray featuredStories = json.getObject("feed_content") + .getObject("stories") + .getArray("featured"); + for (int i = 0; i < featuredStories.size(); i++) { + final JsonObject featuredStory = featuredStories.getObject(i); - final JsonObject json = JsonParser.object().from( - getDownloader().post( - FEATURED_API_URL, null, "{\"platform\":\"\",\"version\":0}".getBytes() - ).responseBody() - ); - - final JsonArray featuredStories = json.getObject("feed_content") - .getObject("stories") - .getArray("featured"); - - for (int i = 0; i < featuredStories.size(); i++) { - final JsonObject featuredStory = featuredStories.getObject(i); - - if (featuredStory.isNull("album_title")) { - // Is not an album, ignore - continue; - } - - c.commit(new BandcampPlaylistInfoItemFeaturedExtractor(featuredStory)); + if (featuredStory.isNull("album_title")) { + // Is not an album, ignore + continue; } - return new InfoItemsPage<>(c, null); - } catch (final JsonParserException e) { - e.printStackTrace(); - throw new ParsingException("JSON error", e); + c.commit(new BandcampPlaylistInfoItemFeaturedExtractor(featuredStory)); } + + return new InfoItemsPage<>(c, null); + } @Override diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java index 61c9e7326..8c3a7baf3 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java @@ -6,8 +6,6 @@ import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonParser; import com.grack.nanojson.JsonParserException; -import org.schabi.newpipe.extractor.InfoItem; -import org.schabi.newpipe.extractor.InfoItemsCollector; import org.schabi.newpipe.extractor.Page; import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.downloader.Downloader; @@ -15,16 +13,19 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.kiosk.KioskExtractor; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; +import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector; import javax.annotation.Nonnull; import java.io.IOException; -public class BandcampRadioExtractor extends KioskExtractor { +public class BandcampRadioExtractor extends KioskExtractor { public static final String KIOSK_RADIO = "Radio"; public static final String RADIO_API_URL = "https://bandcamp.com/api/bcweekly/1/list"; + private JsonObject json = null; + public BandcampRadioExtractor(final StreamingService streamingService, final ListLinkHandler linkHandler, final String kioskId) { super(streamingService, linkHandler, kioskId); @@ -32,7 +33,12 @@ public class BandcampRadioExtractor extends KioskExtractor { @Override public void onFetchPage(@Nonnull final Downloader downloader) throws IOException, ExtractionException { - + try { + json = JsonParser.object().from( + getDownloader().get(RADIO_API_URL).responseBody()); + } catch (final JsonParserException e) { + throw new ExtractionException("Could not parse Bandcamp Radio API response", e); + } } @Nonnull @@ -43,36 +49,21 @@ public class BandcampRadioExtractor extends KioskExtractor { @Nonnull @Override - public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final InfoItemsCollector c = new StreamInfoItemsCollector(getServiceId()); + public InfoItemsPage getInitialPage() { + final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); - try { + final JsonArray radioShows = json.getArray("results"); - final JsonObject json = JsonParser.object().from( - getDownloader().get( - RADIO_API_URL - ).responseBody() - ); - - final JsonArray radioShows = json.getArray("results"); - - for (int i = 0; i < radioShows.size(); i++) { - final JsonObject radioShow = radioShows.getObject(i); - - c.commit( - new BandcampRadioInfoItemExtractor(radioShow) - ); - } - - } catch (final JsonParserException e) { - e.printStackTrace(); + for (int i = 0; i < radioShows.size(); i++) { + final JsonObject radioShow = radioShows.getObject(i); + collector.commit(new BandcampRadioInfoItemExtractor(radioShow)); } - return new InfoItemsPage(c, null); + return new InfoItemsPage<>(collector, null); } @Override - public InfoItemsPage getPage(final Page page) { + public InfoItemsPage getPage(final Page page) { return null; } } diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampFeaturedExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampFeaturedExtractorTest.java index 8a9756f91..1be966dea 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampFeaturedExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampFeaturedExtractorTest.java @@ -31,6 +31,7 @@ public class BandcampFeaturedExtractorTest implements BaseListExtractorTest { NewPipe.init(DownloaderTestImpl.getInstance()); extractor = (BandcampFeaturedExtractor) Bandcamp .getKioskList().getDefaultKioskExtractor(); + extractor.fetchPage(); } @Test diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioExtractorTest.java index 064521d9b..70838bd7e 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioExtractorTest.java @@ -5,11 +5,11 @@ package org.schabi.newpipe.extractor.services.bandcamp; import org.junit.BeforeClass; import org.junit.Test; import org.schabi.newpipe.downloader.DownloaderTestImpl; -import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.services.BaseListExtractorTest; import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampRadioExtractor; +import org.schabi.newpipe.extractor.stream.StreamInfoItem; import java.io.IOException; import java.util.List; @@ -31,11 +31,12 @@ public class BandcampRadioExtractorTest implements BaseListExtractorTest { extractor = (BandcampRadioExtractor) Bandcamp .getKioskList() .getExtractorById("Radio", null); + extractor.fetchPage(); } @Test public void testRadioCount() throws ExtractionException, IOException { - final List list = Bandcamp.getKioskList().getExtractorById("Radio", null).getInitialPage().getItems(); + final List list = extractor.getInitialPage().getItems(); assertTrue(list.size() > 300); }