Skip to content

Commit 54aa5b3

Browse files
committed
Use propper structure in KioskExtractors
Made BandCampRadioExtractor a Kiosk which holds StreamInfoItems and not InfoItems.
1 parent 54b8e54 commit 54aa5b3

4 files changed

Lines changed: 45 additions & 54 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,24 @@ public class BandcampFeaturedExtractor extends KioskExtractor<PlaylistInfoItem>
2424
public static final String KIOSK_FEATURED = "Featured";
2525
public static final String FEATURED_API_URL = "https://bandcamp.com/api/mobile/24/bootstrap_data";
2626

27+
private JsonObject json;
28+
2729
public BandcampFeaturedExtractor(final StreamingService streamingService, final ListLinkHandler listLinkHandler,
2830
final String kioskId) {
2931
super(streamingService, listLinkHandler, kioskId);
3032
}
3133

3234
@Override
3335
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
34-
36+
try {
37+
json = JsonParser.object().from(
38+
getDownloader().post(
39+
FEATURED_API_URL, null, "{\"platform\":\"\",\"version\":0}".getBytes()
40+
).responseBody()
41+
);
42+
} catch (final JsonParserException e) {
43+
throw new ParsingException("Could not parse Bandcamp featured API response", e);
44+
}
3545
}
3646

3747
@Nonnull
@@ -46,35 +56,23 @@ public InfoItemsPage<PlaylistInfoItem> getInitialPage() throws IOException, Extr
4656

4757
final PlaylistInfoItemsCollector c = new PlaylistInfoItemsCollector(getServiceId());
4858

49-
try {
59+
final JsonArray featuredStories = json.getObject("feed_content")
60+
.getObject("stories")
61+
.getArray("featured");
5062

63+
for (int i = 0; i < featuredStories.size(); i++) {
64+
final JsonObject featuredStory = featuredStories.getObject(i);
5165

52-
final JsonObject json = JsonParser.object().from(
53-
getDownloader().post(
54-
FEATURED_API_URL, null, "{\"platform\":\"\",\"version\":0}".getBytes()
55-
).responseBody()
56-
);
57-
58-
final JsonArray featuredStories = json.getObject("feed_content")
59-
.getObject("stories")
60-
.getArray("featured");
61-
62-
for (int i = 0; i < featuredStories.size(); i++) {
63-
final JsonObject featuredStory = featuredStories.getObject(i);
64-
65-
if (featuredStory.isNull("album_title")) {
66-
// Is not an album, ignore
67-
continue;
68-
}
69-
70-
c.commit(new BandcampPlaylistInfoItemFeaturedExtractor(featuredStory));
66+
if (featuredStory.isNull("album_title")) {
67+
// Is not an album, ignore
68+
continue;
7169
}
7270

73-
return new InfoItemsPage<>(c, null);
74-
} catch (final JsonParserException e) {
75-
e.printStackTrace();
76-
throw new ParsingException("JSON error", e);
71+
c.commit(new BandcampPlaylistInfoItemFeaturedExtractor(featuredStory));
7772
}
73+
74+
return new InfoItemsPage<>(c, null);
75+
7876
}
7977

8078
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,39 @@
66
import com.grack.nanojson.JsonObject;
77
import com.grack.nanojson.JsonParser;
88
import com.grack.nanojson.JsonParserException;
9-
import org.schabi.newpipe.extractor.InfoItem;
10-
import org.schabi.newpipe.extractor.InfoItemsCollector;
119
import org.schabi.newpipe.extractor.Page;
1210
import org.schabi.newpipe.extractor.StreamingService;
1311
import org.schabi.newpipe.extractor.downloader.Downloader;
1412
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
1513
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1614
import org.schabi.newpipe.extractor.kiosk.KioskExtractor;
1715
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
16+
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
1817
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
1918

2019
import javax.annotation.Nonnull;
2120
import java.io.IOException;
2221

23-
public class BandcampRadioExtractor extends KioskExtractor<InfoItem> {
22+
public class BandcampRadioExtractor extends KioskExtractor<StreamInfoItem> {
2423

2524
public static final String KIOSK_RADIO = "Radio";
2625
public static final String RADIO_API_URL = "https://bandcamp.com/api/bcweekly/1/list";
2726

27+
private JsonObject json = null;
28+
2829
public BandcampRadioExtractor(final StreamingService streamingService, final ListLinkHandler linkHandler,
2930
final String kioskId) {
3031
super(streamingService, linkHandler, kioskId);
3132
}
3233

3334
@Override
3435
public void onFetchPage(@Nonnull final Downloader downloader) throws IOException, ExtractionException {
35-
36+
try {
37+
json = JsonParser.object().from(
38+
getDownloader().get(RADIO_API_URL).responseBody());
39+
} catch (final JsonParserException e) {
40+
throw new ExtractionException("Could not parse Bandcamp Radio API response", e);
41+
}
3642
}
3743

3844
@Nonnull
@@ -43,36 +49,21 @@ public String getName() throws ParsingException {
4349

4450
@Nonnull
4551
@Override
46-
public InfoItemsPage<InfoItem> getInitialPage() throws IOException, ExtractionException {
47-
final InfoItemsCollector c = new StreamInfoItemsCollector(getServiceId());
52+
public InfoItemsPage<StreamInfoItem> getInitialPage() {
53+
final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
4854

49-
try {
55+
final JsonArray radioShows = json.getArray("results");
5056

51-
final JsonObject json = JsonParser.object().from(
52-
getDownloader().get(
53-
RADIO_API_URL
54-
).responseBody()
55-
);
56-
57-
final JsonArray radioShows = json.getArray("results");
58-
59-
for (int i = 0; i < radioShows.size(); i++) {
60-
final JsonObject radioShow = radioShows.getObject(i);
61-
62-
c.commit(
63-
new BandcampRadioInfoItemExtractor(radioShow)
64-
);
65-
}
66-
67-
} catch (final JsonParserException e) {
68-
e.printStackTrace();
57+
for (int i = 0; i < radioShows.size(); i++) {
58+
final JsonObject radioShow = radioShows.getObject(i);
59+
collector.commit(new BandcampRadioInfoItemExtractor(radioShow));
6960
}
7061

71-
return new InfoItemsPage<InfoItem>(c, null);
62+
return new InfoItemsPage<>(collector, null);
7263
}
7364

7465
@Override
75-
public InfoItemsPage<InfoItem> getPage(final Page page) {
66+
public InfoItemsPage<StreamInfoItem> getPage(final Page page) {
7667
return null;
7768
}
7869
}

extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampFeaturedExtractorTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public static void setUp() throws ExtractionException, IOException {
3131
NewPipe.init(DownloaderTestImpl.getInstance());
3232
extractor = (BandcampFeaturedExtractor) Bandcamp
3333
.getKioskList().getDefaultKioskExtractor();
34+
extractor.fetchPage();
3435
}
3536

3637
@Test

extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioExtractorTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
import org.junit.BeforeClass;
66
import org.junit.Test;
77
import org.schabi.newpipe.downloader.DownloaderTestImpl;
8-
import org.schabi.newpipe.extractor.InfoItem;
98
import org.schabi.newpipe.extractor.NewPipe;
109
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
1110
import org.schabi.newpipe.extractor.services.BaseListExtractorTest;
1211
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampRadioExtractor;
12+
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
1313

1414
import java.io.IOException;
1515
import java.util.List;
@@ -31,11 +31,12 @@ public static void setUp() throws ExtractionException, IOException {
3131
extractor = (BandcampRadioExtractor) Bandcamp
3232
.getKioskList()
3333
.getExtractorById("Radio", null);
34+
extractor.fetchPage();
3435
}
3536

3637
@Test
3738
public void testRadioCount() throws ExtractionException, IOException {
38-
final List<InfoItem> list = Bandcamp.getKioskList().getExtractorById("Radio", null).getInitialPage().getItems();
39+
final List<StreamInfoItem> list = extractor.getInitialPage().getItems();
3940
assertTrue(list.size() > 300);
4041
}
4142

0 commit comments

Comments
 (0)