mirror of
https://github.com/TeamNewPipe/NewPipeExtractor.git
synced 2025-04-28 16:00:33 +05:30
[YouTube] Shorts don't provide a duration anymore
This commit is contained in:
parent
91419ec6e8
commit
2938067c2c
@ -300,7 +300,7 @@ public class YoutubeChannelTabExtractor extends ChannelTabExtractor {
|
|||||||
getCommitVideoConsumer(collector, timeAgoParser, channelIds,
|
getCommitVideoConsumer(collector, timeAgoParser, channelIds,
|
||||||
richItem.getObject("videoRenderer"));
|
richItem.getObject("videoRenderer"));
|
||||||
} else if (richItem.has("reelItemRenderer")) {
|
} else if (richItem.has("reelItemRenderer")) {
|
||||||
getCommitReelItemConsumer(collector, timeAgoParser, channelIds,
|
getCommitReelItemConsumer(collector, channelIds,
|
||||||
richItem.getObject("reelItemRenderer"));
|
richItem.getObject("reelItemRenderer"));
|
||||||
} else if (richItem.has("playlistRenderer")) {
|
} else if (richItem.has("playlistRenderer")) {
|
||||||
getCommitPlaylistConsumer(collector, channelIds,
|
getCommitPlaylistConsumer(collector, channelIds,
|
||||||
@ -356,11 +356,10 @@ public class YoutubeChannelTabExtractor extends ChannelTabExtractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void getCommitReelItemConsumer(@Nonnull final MultiInfoItemsCollector collector,
|
private void getCommitReelItemConsumer(@Nonnull final MultiInfoItemsCollector collector,
|
||||||
@Nonnull final TimeAgoParser timeAgoParser,
|
|
||||||
@Nonnull final List<String> channelIds,
|
@Nonnull final List<String> channelIds,
|
||||||
@Nonnull final JsonObject jsonObject) {
|
@Nonnull final JsonObject jsonObject) {
|
||||||
collector.commit(
|
collector.commit(
|
||||||
new YoutubeReelInfoItemExtractor(jsonObject, timeAgoParser) {
|
new YoutubeReelInfoItemExtractor(jsonObject) {
|
||||||
@Override
|
@Override
|
||||||
public String getUploaderName() throws ParsingException {
|
public String getUploaderName() throws ParsingException {
|
||||||
if (channelIds.size() >= 2) {
|
if (channelIds.size() >= 2) {
|
||||||
|
@ -411,8 +411,7 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
|
|||||||
richItemRenderer.getObject("content");
|
richItemRenderer.getObject("content");
|
||||||
if (richItemRendererContent.has(REEL_ITEM_RENDERER)) {
|
if (richItemRendererContent.has(REEL_ITEM_RENDERER)) {
|
||||||
collector.commit(new YoutubeReelInfoItemExtractor(
|
collector.commit(new YoutubeReelInfoItemExtractor(
|
||||||
richItemRendererContent.getObject(REEL_ITEM_RENDERER),
|
richItemRendererContent.getObject(REEL_ITEM_RENDERER)));
|
||||||
timeAgoParser));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,24 @@
|
|||||||
package org.schabi.newpipe.extractor.services.youtube.extractors;
|
package org.schabi.newpipe.extractor.services.youtube.extractors;
|
||||||
|
|
||||||
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
|
||||||
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getThumbnailsFromInfoItem;
|
||||||
|
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||||
|
|
||||||
import com.grack.nanojson.JsonObject;
|
import com.grack.nanojson.JsonObject;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.Image;
|
import org.schabi.newpipe.extractor.Image;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
||||||
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
|
|
||||||
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory;
|
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
|
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamType;
|
import org.schabi.newpipe.extractor.stream.StreamType;
|
||||||
import org.schabi.newpipe.extractor.utils.Utils;
|
import org.schabi.newpipe.extractor.utils.Utils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
|
|
||||||
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getThumbnailsFromInfoItem;
|
|
||||||
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link StreamInfoItemExtractor} for YouTube's {@code reelItemRenderers}.
|
* A {@link StreamInfoItemExtractor} for YouTube's {@code reelItemRenderers}.
|
||||||
*
|
*
|
||||||
@ -33,13 +32,9 @@ public class YoutubeReelInfoItemExtractor implements StreamInfoItemExtractor {
|
|||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
private final JsonObject reelInfo;
|
private final JsonObject reelInfo;
|
||||||
@Nullable
|
|
||||||
private final TimeAgoParser timeAgoParser;
|
|
||||||
|
|
||||||
public YoutubeReelInfoItemExtractor(@Nonnull final JsonObject reelInfo,
|
public YoutubeReelInfoItemExtractor(@Nonnull final JsonObject reelInfo) {
|
||||||
@Nullable final TimeAgoParser timeAgoParser) {
|
|
||||||
this.reelInfo = reelInfo;
|
this.reelInfo = reelInfo;
|
||||||
this.timeAgoParser = timeAgoParser;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -68,28 +63,6 @@ public class YoutubeReelInfoItemExtractor implements StreamInfoItemExtractor {
|
|||||||
return StreamType.VIDEO_STREAM;
|
return StreamType.VIDEO_STREAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getDuration() throws ParsingException {
|
|
||||||
// Duration of reelItems is only provided in the accessibility data
|
|
||||||
// example: "VIDEO TITLE - 49 seconds - play video"
|
|
||||||
// "VIDEO TITLE - 1 minute, 1 second - play video"
|
|
||||||
final String accessibilityLabel = reelInfo.getObject("accessibility")
|
|
||||||
.getObject("accessibilityData").getString("label");
|
|
||||||
if (accessibilityLabel == null || timeAgoParser == null) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This approach may be language dependent
|
|
||||||
final String[] labelParts = accessibilityLabel.split(" [\u2013-] ");
|
|
||||||
|
|
||||||
if (labelParts.length > 2) {
|
|
||||||
final String textualDuration = labelParts[labelParts.length - 2];
|
|
||||||
return timeAgoParser.parseDuration(textualDuration);
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getViewCount() throws ParsingException {
|
public long getViewCount() throws ParsingException {
|
||||||
final String viewCountText = getTextFromObject(reelInfo.getObject("viewCountText"));
|
final String viewCountText = getTextFromObject(reelInfo.getObject("viewCountText"));
|
||||||
@ -117,6 +90,11 @@ public class YoutubeReelInfoItemExtractor implements StreamInfoItemExtractor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDuration() throws ParsingException {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUploaderName() throws ParsingException {
|
public String getUploaderName() throws ParsingException {
|
||||||
return null;
|
return null;
|
||||||
|
@ -50,7 +50,7 @@ public interface StreamInfoItemExtractor extends InfoItemExtractor {
|
|||||||
/**
|
/**
|
||||||
* Get the stream duration in seconds
|
* Get the stream duration in seconds
|
||||||
*
|
*
|
||||||
* @return the stream duration in seconds
|
* @return the stream duration in seconds or -1 if no duration is available
|
||||||
* @throws ParsingException if there is an error in the extraction
|
* @throws ParsingException if there is an error in the extraction
|
||||||
*/
|
*/
|
||||||
long getDuration() throws ParsingException;
|
long getDuration() throws ParsingException;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user