Skip to content

Commit 94a2d5b

Browse files
committed
Fix thumbnail URLs starting with //
1 parent 838d834 commit 94a2d5b

6 files changed

Lines changed: 54 additions & 29 deletions

File tree

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,6 @@ public String getAvatarUrl() throws ParsingException {
128128
String url = initialData.getObject("header").getObject("c4TabbedHeaderRenderer").getObject("avatar")
129129
.getArray("thumbnails").getObject(0).getString("url");
130130

131-
// the first characters of the avatar URLs are different for each channel and some are not even valid URLs
132-
if (url.startsWith("//")) {
133-
url = url.substring(2);
134-
}
135131
if (url.startsWith(HTTP)) {
136132
url = Utils.replaceHttpWithHttps(url);
137133
} else if (!url.startsWith(HTTPS)) {
@@ -155,10 +151,7 @@ public String getBannerUrl() throws ParsingException {
155151
if (url == null || url.contains("s.ytimg.com") || url.contains("default_banner")) {
156152
return null;
157153
}
158-
// the first characters of the banner URLs are different for each channel and some are not even valid URLs
159-
if (url.startsWith("//")) {
160-
url = url.substring(2);
161-
}
154+
162155
if (url.startsWith(HTTP)) {
163156
url = Utils.replaceHttpWithHttps(url);
164157
} else if (!url.startsWith(HTTPS)) {

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,13 @@ public YoutubeChannelInfoItemExtractor(JsonObject channelInfoItem) {
4242
public String getThumbnailUrl() throws ParsingException {
4343
try {
4444
String url = channelInfoItem.getObject("thumbnail").getArray("thumbnails").getObject(0).getString("url");
45-
if (url.startsWith("//")) {
46-
url = url.substring(2);
47-
}
45+
4846
if (url.startsWith(HTTP)) {
4947
url = Utils.replaceHttpWithHttps(url);
5048
} else if (!url.startsWith(HTTPS)) {
5149
url = HTTPS + url;
5250
}
51+
5352
return url;
5453
} catch (Exception e) {
5554
throw new ParsingException("Could not get thumbnail url", e);

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,30 @@ public String getName() throws ParsingException {
121121

122122
@Override
123123
public String getThumbnailUrl() throws ParsingException {
124+
String url = null;
125+
124126
try {
125-
return playlistInfo.getObject("thumbnailRenderer").getObject("playlistVideoThumbnailRenderer")
127+
url = playlistInfo.getObject("thumbnailRenderer").getObject("playlistVideoThumbnailRenderer")
126128
.getObject("thumbnail").getArray("thumbnails").getObject(0).getString("url");
127129
} catch (Exception ignored) {}
128-
try {
129-
return initialData.getObject("microformat").getObject("microformatDataRenderer").getObject("thumbnail")
130-
.getArray("thumbnails").getObject(0).getString("url");
131-
} catch (Exception e) {
132-
throw new ParsingException("Could not get playlist thumbnail", e);
130+
131+
if (url == null) {
132+
try {
133+
return initialData.getObject("microformat").getObject("microformatDataRenderer").getObject("thumbnail")
134+
.getArray("thumbnails").getObject(0).getString("url");
135+
} catch (Exception ignored) {}
136+
}
137+
138+
if (url != null && !url.isEmpty()) {
139+
if (url.startsWith(HTTP)) {
140+
url = Utils.replaceHttpWithHttps(url);
141+
} else if (!url.startsWith(HTTPS)) {
142+
url = HTTPS + url;
143+
}
144+
145+
return url;
133146
}
147+
throw new ParsingException("Could not get playlist thumbnail");
134148
}
135149

136150
@Override
@@ -162,10 +176,6 @@ public String getUploaderAvatarUrl() throws ParsingException {
162176
try {
163177
String url = getUploaderInfo().getObject("thumbnail").getArray("thumbnails").getObject(0).getString("url");
164178

165-
// the first characters of the avatar URLs are different for each channel and some are not even valid URLs
166-
if (url.startsWith("//")) {
167-
url = url.substring(2);
168-
}
169179
if (url.startsWith(HTTP)) {
170180
url = Utils.replaceHttpWithHttps(url);
171181
} else if (!url.startsWith(HTTPS)) {

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.schabi.newpipe.extractor.utils.Utils;
99

1010
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
11+
import static org.schabi.newpipe.extractor.utils.Utils.HTTP;
12+
import static org.schabi.newpipe.extractor.utils.Utils.HTTPS;
1113

1214
public class YoutubePlaylistInfoItemExtractor implements PlaylistInfoItemExtractor {
1315
private JsonObject playlistInfoItem;
@@ -19,8 +21,16 @@ public YoutubePlaylistInfoItemExtractor(JsonObject playlistInfoItem) {
1921
@Override
2022
public String getThumbnailUrl() throws ParsingException {
2123
try {
22-
return playlistInfoItem.getArray("thumbnails").getObject(0).getArray("thumbnails")
23-
.getObject(0).getString("url");
24+
String url = playlistInfoItem.getArray("thumbnails").getObject(0)
25+
.getArray("thumbnails").getObject(0).getString("url");
26+
27+
if (url.startsWith(HTTP)) {
28+
url = Utils.replaceHttpWithHttps(url);
29+
} else if (!url.startsWith(HTTPS)) {
30+
url = HTTPS + url;
31+
}
32+
33+
return url;
2434
} catch (Exception e) {
2535
throw new ParsingException("Could not get thumbnail url", e);
2636
}

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,15 @@ public String getThumbnailUrl() throws ParsingException {
187187
try {
188188
JsonArray thumbnails = playerResponse.getObject("videoDetails").getObject("thumbnail").getArray("thumbnails");
189189
// the last thumbnail is the one with the highest resolution
190-
return thumbnails.getObject(thumbnails.size() - 1).getString("url");
190+
String url = thumbnails.getObject(thumbnails.size() - 1).getString("url");
191191

192+
if (url.startsWith(HTTP)) {
193+
url = Utils.replaceHttpWithHttps(url);
194+
} else if (!url.startsWith(HTTPS)) {
195+
url = HTTPS + url;
196+
}
197+
198+
return url;
192199
} catch (Exception e) {
193200
throw new ParsingException("Could not get thumbnail url");
194201
}
@@ -362,10 +369,6 @@ public String getUploaderAvatarUrl() throws ParsingException {
362369
String url = getVideoSecondaryInfoRenderer().getObject("owner").getObject("videoOwnerRenderer")
363370
.getObject("thumbnail").getArray("thumbnails").getObject(0).getString("url");
364371

365-
// the first characters of the avatar URLs are different for each channel and some are not even valid URLs
366-
if (url.startsWith("//")) {
367-
url = url.substring(2);
368-
}
369372
if (url.startsWith(HTTP)) {
370373
url = Utils.replaceHttpWithHttps(url);
371374
} else if (!url.startsWith(HTTPS)) {

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getTextFromObject;
1818
import static org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
19+
import static org.schabi.newpipe.extractor.utils.Utils.HTTP;
20+
import static org.schabi.newpipe.extractor.utils.Utils.HTTPS;
1921

2022
/*
2123
* Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org>
@@ -196,8 +198,16 @@ public long getViewCount() throws ParsingException {
196198
public String getThumbnailUrl() throws ParsingException {
197199
try {
198200
// TODO: Don't simply get the first item, but look at all thumbnails and their resolution
199-
return videoInfo.getObject("thumbnail").getArray("thumbnails")
201+
String url = videoInfo.getObject("thumbnail").getArray("thumbnails")
200202
.getObject(0).getString("url");
203+
204+
if (url.startsWith(HTTP)) {
205+
url = Utils.replaceHttpWithHttps(url);
206+
} else if (!url.startsWith(HTTPS)) {
207+
url = HTTPS + url;
208+
}
209+
210+
return url;
201211
} catch (Exception e) {
202212
throw new ParsingException("Could not get thumbnail url", e);
203213
}

0 commit comments

Comments
 (0)