Skip to content

Commit 53757ae

Browse files
committed
[YouTube] Support pronouns in subs count parsing of page channel headers
1 parent 8b9ccec commit 53757ae

1 file changed

Lines changed: 14 additions & 23 deletions

File tree

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

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -273,33 +273,24 @@ private long getSubscriberCountFromPageChannelHeader(@Nonnull final JsonObject h
273273
.getObject(PAGE_HEADER_VIEW_MODEL)
274274
.getObject(METADATA);
275275
if (metadataObject.has("contentMetadataViewModel")) {
276-
final JsonArray metadataPart = metadataObject.getObject("contentMetadataViewModel")
277-
.getArray("metadataRows")
278-
.stream()
279-
.filter(JsonObject.class::isInstance)
280-
.map(JsonObject.class::cast)
281-
.map(metadataRow -> metadataRow.getArray("metadataParts"))
282-
/*
283-
Find metadata parts which have two elements: channel handle and subscriber
284-
count.
285-
286-
On autogenerated music channels, the subscriber count is not shown with this
287-
header.
288-
289-
Use the first metadata parts object found.
290-
*/
291-
.filter(metadataParts -> metadataParts.size() == 2)
292-
.findFirst()
293-
.orElse(null);
294-
if (metadataPart == null) {
295-
// As the parsing of the metadata parts object needed to get the subscriber count
296-
// is fragile, return UNKNOWN_SUBSCRIBER_COUNT when it cannot be got
276+
final JsonArray metadataRows = metadataObject.getObject("contentMetadataViewModel")
277+
.getArray("metadataRows");
278+
279+
// Extract the latest metadata part, it contains in general two elements: the
280+
// subscribers and videos counts
281+
final JsonArray lastMetadataRowParts = metadataRows.getObject(
282+
Math.max(0, metadataRows.size() - 1))
283+
.getArray("metadataParts");
284+
285+
if (lastMetadataRowParts.size() < 2) {
286+
// For autogenerated channels such as artist ones, subscribers count isn't returned,
287+
// so the metadata part has a lower size
297288
return UNKNOWN_SUBSCRIBER_COUNT;
298289
}
299290

300291
try {
301-
// The subscriber count is at the same position for all languages as of 02/03/2024
302-
return Utils.mixedNumberWordToLong(metadataPart.getObject(0)
292+
// The subscriber count is at the same position for all languages as of 07/07/2025
293+
return Utils.mixedNumberWordToLong(lastMetadataRowParts.getObject(0)
303294
.getObject("text")
304295
.getString(CONTENT));
305296
} catch (final NumberFormatException e) {

0 commit comments

Comments
 (0)