Skip to content

Commit af82c7a

Browse files
authored
Merge pull request #1344 from FineFindus/fix/invalid-related-id
[YouTube] Correctly set `uploaderUrl` for lockup content type items
2 parents d9c777d + 352fae6 commit af82c7a

1 file changed

Lines changed: 25 additions & 6 deletions

File tree

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

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,19 +179,38 @@ public String getUploaderName() throws ParsingException {
179179

180180
@Override
181181
public String getUploaderUrl() throws ParsingException {
182-
final String channelId = channelImageViewModel()
182+
final JsonObject innerTubeCommand = channelImageViewModel()
183183
.forUploaderUrlExtraction()
184184
.getObject("rendererContext")
185185
.getObject("commandContext")
186186
.getObject("onTap")
187-
.getObject("innertubeCommand")
188-
.getObject("browseEndpoint")
187+
.getObject("innertubeCommand");
188+
final JsonObject browseEndpoint = innerTubeCommand
189+
.getObject("browseEndpoint");
190+
final String channelId = browseEndpoint
189191
.getString("browseId");
190192

191-
if (isNullOrEmpty(channelId)) {
192-
throw new ParsingException("Could not get uploader url");
193+
if (channelId != null && channelId.startsWith("UC")) {
194+
return YoutubeChannelLinkHandlerFactory.getInstance().getUrl("channel/" + channelId);
193195
}
194-
return YoutubeChannelLinkHandlerFactory.getInstance().getUrl(channelId);
196+
197+
final String canonicalBaseUrl = browseEndpoint.getString("canonicalBaseUrl");
198+
if (!isNullOrEmpty(canonicalBaseUrl)) {
199+
return resolveUploaderUrlFromRelativeUrl(canonicalBaseUrl);
200+
}
201+
202+
final String webCommandMetadataUrl = innerTubeCommand.getObject("commandMetadata")
203+
.getObject("webCommandMetadata")
204+
.getString("url");
205+
if (!isNullOrEmpty(webCommandMetadataUrl)) {
206+
return resolveUploaderUrlFromRelativeUrl(webCommandMetadataUrl);
207+
}
208+
209+
throw new ParsingException("Could not get uploader url");
210+
}
211+
212+
private String resolveUploaderUrlFromRelativeUrl(final String url) throws ParsingException {
213+
return YoutubeChannelLinkHandlerFactory.getInstance().getUrl("c" + url);
195214
}
196215

197216
@Nonnull

0 commit comments

Comments
 (0)