Skip to content

Commit 157055f

Browse files
committed
Create getJsonResponse() function
1 parent 4f40651 commit 157055f

6 files changed

Lines changed: 33 additions & 155 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.grack.nanojson.JsonArray;
44
import com.grack.nanojson.JsonObject;
5-
import com.grack.nanojson.JsonParser;
6-
import com.grack.nanojson.JsonParserException;
75

86
import org.schabi.newpipe.extractor.StreamingService;
97
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
@@ -19,14 +17,11 @@
1917
import org.schabi.newpipe.extractor.utils.Utils;
2018

2119
import java.io.IOException;
22-
import java.util.Collections;
23-
import java.util.HashMap;
24-
import java.util.List;
25-
import java.util.Map;
2620

2721
import javax.annotation.Nonnull;
2822

2923
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.fixThumbnailUrl;
24+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getJsonResponse;
3025
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
3126

3227
/*
@@ -62,22 +57,7 @@ public YoutubeChannelExtractor(StreamingService service, ListLinkHandler linkHan
6257
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
6358
final String url = super.getUrl() + "/videos?pbj=1&view=0&flow=grid";
6459

65-
JsonArray ajaxJson;
66-
67-
Map<String, List<String>> headers = new HashMap<>();
68-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
69-
headers.put("X-YouTube-Client-Version",
70-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
71-
final String response = getDownloader().get(url, headers, getExtractorLocalization()).responseBody();
72-
if (response.length() < 50) { // ensure to have a valid response
73-
throw new ParsingException("Could not parse json data for next streams");
74-
}
75-
76-
try {
77-
ajaxJson = JsonParser.array().from(response);
78-
} catch (JsonParserException e) {
79-
throw new ParsingException("Could not parse json data for next streams", e);
80-
}
60+
final JsonArray ajaxJson = getJsonResponse(url);
8161

8262
initialData = ajaxJson.getObject(1).getObject("response");
8363
}
@@ -214,22 +194,7 @@ public InfoItemsPage<StreamInfoItem> getPage(String pageUrl) throws IOException,
214194
fetchPage();
215195

216196
StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
217-
JsonArray ajaxJson;
218-
219-
Map<String, List<String>> headers = new HashMap<>();
220-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
221-
headers.put("X-YouTube-Client-Version",
222-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
223-
final String response = getDownloader().get(pageUrl, headers, getExtractorLocalization()).responseBody();
224-
if (response.length() < 50) { // ensure to have a valid response
225-
throw new ParsingException("Could not parse json data for next streams");
226-
}
227-
228-
try {
229-
ajaxJson = JsonParser.array().from(response);
230-
} catch (JsonParserException e) {
231-
throw new ParsingException("Could not parse json data for next streams", e);
232-
}
197+
final JsonArray ajaxJson = getJsonResponse(pageUrl);
233198

234199
JsonObject sectionListContinuation = ajaxJson.getObject(1).getObject("response")
235200
.getObject("continuationContents").getObject("gridContinuation");

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.grack.nanojson.JsonArray;
44
import com.grack.nanojson.JsonObject;
5-
import com.grack.nanojson.JsonParser;
6-
import com.grack.nanojson.JsonParserException;
75

86
import org.schabi.newpipe.extractor.StreamingService;
97
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -12,20 +10,16 @@
1210
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
1311
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
1412
import org.schabi.newpipe.extractor.playlist.PlaylistExtractor;
15-
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper;
1613
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
1714
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
1815
import org.schabi.newpipe.extractor.utils.Utils;
1916

2017
import java.io.IOException;
21-
import java.util.Collections;
22-
import java.util.HashMap;
23-
import java.util.List;
24-
import java.util.Map;
2518

2619
import javax.annotation.Nonnull;
2720

2821
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.fixThumbnailUrl;
22+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getJsonResponse;
2923
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
3024
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
3125

@@ -42,22 +36,7 @@ public YoutubePlaylistExtractor(StreamingService service, ListLinkHandler linkHa
4236
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
4337
final String url = getUrl() + "&pbj=1";
4438

45-
JsonArray ajaxJson;
46-
47-
Map<String, List<String>> headers = new HashMap<>();
48-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
49-
headers.put("X-YouTube-Client-Version",
50-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
51-
final String response = getDownloader().get(url, headers, getExtractorLocalization()).responseBody();
52-
if (response.length() < 50) { // ensure to have a valid response
53-
throw new ParsingException("Could not parse json data for next streams");
54-
}
55-
56-
try {
57-
ajaxJson = JsonParser.array().from(response);
58-
} catch (JsonParserException e) {
59-
throw new ParsingException("Could not parse json data for next streams", e);
60-
}
39+
final JsonArray ajaxJson = getJsonResponse(url);
6140

6241
initialData = ajaxJson.getObject(1).getObject("response");
6342
playlistInfo = getPlaylistInfo();
@@ -207,22 +186,7 @@ public InfoItemsPage<StreamInfoItem> getPage(final String pageUrl) throws IOExce
207186
}
208187

209188
StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId());
210-
JsonArray ajaxJson;
211-
212-
Map<String, List<String>> headers = new HashMap<>();
213-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
214-
headers.put("X-YouTube-Client-Version",
215-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
216-
final String response = getDownloader().get(pageUrl, headers, getExtractorLocalization()).responseBody();
217-
if (response.length() < 50) { // ensure to have a valid response
218-
throw new ParsingException("Could not parse json data for next streams");
219-
}
220-
221-
try {
222-
ajaxJson = JsonParser.array().from(response);
223-
} catch (JsonParserException e) {
224-
throw new ParsingException("Could not parse json data for next streams", e);
225-
}
189+
final JsonArray ajaxJson = getJsonResponse(pageUrl);
226190

227191
JsonObject sectionListContinuation = ajaxJson.getObject(1).getObject("response")
228192
.getObject("continuationContents").getObject("playlistVideoListContinuation");

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSearchExtractor.java

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.grack.nanojson.JsonArray;
44
import com.grack.nanojson.JsonObject;
5-
import com.grack.nanojson.JsonParser;
6-
import com.grack.nanojson.JsonParserException;
75

86
import org.schabi.newpipe.extractor.InfoItem;
97
import org.schabi.newpipe.extractor.StreamingService;
@@ -14,16 +12,12 @@
1412
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
1513
import org.schabi.newpipe.extractor.search.InfoItemsSearchCollector;
1614
import org.schabi.newpipe.extractor.search.SearchExtractor;
17-
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper;
1815

1916
import java.io.IOException;
20-
import java.util.Collections;
21-
import java.util.HashMap;
22-
import java.util.List;
23-
import java.util.Map;
2417

2518
import javax.annotation.Nonnull;
2619

20+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getJsonResponse;
2721
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
2822

2923
/*
@@ -57,22 +51,7 @@ public YoutubeSearchExtractor(StreamingService service, SearchQueryHandler linkH
5751
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
5852
final String url = getUrl() + "&pbj=1";
5953

60-
JsonArray ajaxJson;
61-
62-
Map<String, List<String>> headers = new HashMap<>();
63-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
64-
headers.put("X-YouTube-Client-Version",
65-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
66-
final String response = getDownloader().get(url, headers, getExtractorLocalization()).responseBody();
67-
if (response.length() < 50) { // ensure to have a valid response
68-
throw new ParsingException("Could not parse json data for next streams");
69-
}
70-
71-
try {
72-
ajaxJson = JsonParser.array().from(response);
73-
} catch (JsonParserException e) {
74-
throw new ParsingException("Could not parse json data for next streams", e);
75-
}
54+
final JsonArray ajaxJson = getJsonResponse(url);
7655

7756
initialData = ajaxJson.getObject(1).getObject("response");
7857
}
@@ -125,23 +104,7 @@ public InfoItemsPage<InfoItem> getPage(String pageUrl) throws IOException, Extra
125104
}
126105

127106
InfoItemsSearchCollector collector = getInfoItemSearchCollector();
128-
JsonArray ajaxJson;
129-
130-
Map<String, List<String>> headers = new HashMap<>();
131-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
132-
headers.put("X-YouTube-Client-Version",
133-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
134-
final String response = getDownloader().get(pageUrl, headers, getExtractorLocalization()).responseBody();
135-
if (response.length() < 50) { // ensure to have a valid response
136-
throw new ParsingException("Could not parse json data for next streams");
137-
}
138-
139-
try {
140-
ajaxJson = JsonParser.array().from(response);
141-
} catch (JsonParserException e) {
142-
throw new ParsingException("Could not parse json data for next streams", e);
143-
}
144-
107+
final JsonArray ajaxJson = getJsonResponse(pageUrl);
145108

146109
JsonObject itemSectionRenderer = ajaxJson.getObject(1).getObject("response")
147110
.getObject("continuationContents").getObject("itemSectionContinuation");

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.grack.nanojson.JsonArray;
44
import com.grack.nanojson.JsonObject;
55
import com.grack.nanojson.JsonParser;
6-
import com.grack.nanojson.JsonParserException;
76

87
import org.mozilla.javascript.Context;
98
import org.mozilla.javascript.Function;
@@ -53,6 +52,7 @@
5352
import javax.annotation.Nullable;
5453

5554
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.fixThumbnailUrl;
55+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getJsonResponse;
5656
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
5757
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
5858

@@ -580,20 +580,7 @@ public String getErrorMessage() {
580580
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
581581
final String url = getUrl() + "&pbj=1";
582582

583-
Map<String, List<String>> headers = new HashMap<>();
584-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
585-
headers.put("X-YouTube-Client-Version",
586-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
587-
final String response = getDownloader().get(url, headers, getExtractorLocalization()).responseBody();
588-
if (response.length() < 50) { // ensure to have a valid response
589-
throw new ParsingException("Could not parse json data for next streams");
590-
}
591-
592-
try {
593-
initialAjaxJson = JsonParser.array().from(response);
594-
} catch (JsonParserException e) {
595-
throw new ParsingException("Could not parse json data for next streams", e);
596-
}
583+
initialAjaxJson = getJsonResponse(url);
597584

598585
final String playerUrl;
599586

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeTrendingExtractor.java

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import com.grack.nanojson.JsonArray;
2424
import com.grack.nanojson.JsonObject;
25-
import com.grack.nanojson.JsonParser;
26-
import com.grack.nanojson.JsonParserException;
2725

2826
import org.schabi.newpipe.extractor.StreamingService;
2927
import org.schabi.newpipe.extractor.downloader.Downloader;
@@ -32,18 +30,14 @@
3230
import org.schabi.newpipe.extractor.kiosk.KioskExtractor;
3331
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
3432
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
35-
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper;
3633
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
3734
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
3835

3936
import java.io.IOException;
40-
import java.util.Collections;
41-
import java.util.HashMap;
42-
import java.util.List;
43-
import java.util.Map;
4437

4538
import javax.annotation.Nonnull;
4639

40+
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getJsonResponse;
4741
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
4842

4943
public class YoutubeTrendingExtractor extends KioskExtractor<StreamInfoItem> {
@@ -60,22 +54,7 @@ public void onFetchPage(@Nonnull Downloader downloader) throws IOException, Extr
6054
final String url = getUrl() + "?pbj=1&gl="
6155
+ getExtractorContentCountry().getCountryCode();
6256

63-
JsonArray ajaxJson;
64-
65-
Map<String, List<String>> headers = new HashMap<>();
66-
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
67-
headers.put("X-YouTube-Client-Version",
68-
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
69-
final String response = getDownloader().get(url, headers, getExtractorLocalization()).responseBody();
70-
if (response.length() < 50) { // ensure to have a valid response
71-
throw new ParsingException("Could not parse json data for next streams");
72-
}
73-
74-
try {
75-
ajaxJson = JsonParser.array().from(response);
76-
} catch (JsonParserException e) {
77-
throw new ParsingException("Could not parse json data for next streams", e);
78-
}
57+
final JsonArray ajaxJson = getJsonResponse(url);
7958

8059
initialData = ajaxJson.getObject(1).getObject("response");
8160
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeParsingHelper.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
import org.jsoup.Jsoup;
1010
import org.jsoup.nodes.Document;
1111
import org.schabi.newpipe.extractor.downloader.Response;
12+
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
1213
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1314
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
1415
import org.schabi.newpipe.extractor.utils.Parser;
1516
import org.schabi.newpipe.extractor.utils.Utils;
1617

18+
import java.io.IOException;
1719
import java.io.UnsupportedEncodingException;
1820
import java.net.URL;
1921
import java.net.URLDecoder;
@@ -343,4 +345,22 @@ public static String fixThumbnailUrl(String thumbnailUrl) {
343345

344346
return thumbnailUrl;
345347
}
348+
349+
public static JsonArray getJsonResponse(String url) throws IOException, ExtractionException {
350+
Map<String, List<String>> headers = new HashMap<>();
351+
headers.put("X-YouTube-Client-Name", Collections.singletonList("1"));
352+
headers.put("X-YouTube-Client-Version",
353+
Collections.singletonList(YoutubeParsingHelper.getClientVersion()));
354+
final String response = getDownloader().get(url, headers).responseBody();
355+
356+
if (response.length() < 50) { // ensure to have a valid response
357+
throw new ParsingException("JSON response is too short");
358+
}
359+
360+
try {
361+
return JsonParser.array().from(response);
362+
} catch (JsonParserException e) {
363+
throw new ParsingException("Could not parse JSON", e);
364+
}
365+
}
346366
}

0 commit comments

Comments
 (0)