Merge pull request #755 from litetex/clean-up-yt-dis-likes
Cleanup: Remove old ways of getting YT dis/likes
This commit is contained in:
commit
10f6cc7194
|
@ -149,27 +149,24 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor {
|
|||
@Nonnull
|
||||
@Override
|
||||
public String getLicence() {
|
||||
// Contrary to other Bandcamp streams, radio streams don't have a license
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getCategory() {
|
||||
// Contrary to other Bandcamp streams, radio streams don't have categories
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<String> getTags() {
|
||||
// Contrary to other Bandcamp streams, radio streams don't have tags
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Privacy getPrivacy() {
|
||||
return Privacy.PUBLIC;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlaylistInfoItemsCollector getRelatedItems() {
|
||||
// Contrary to other Bandcamp streams, radio streams don't have related items
|
||||
|
|
|
@ -98,11 +98,6 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
return albumJson.getString("artist");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUploaderVerified() throws ParsingException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getTextualUploadDate() {
|
||||
|
@ -132,24 +127,6 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelName() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelAvatarUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Description getDescription() {
|
||||
|
@ -164,48 +141,6 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
return new Description(s, Description.PLAIN_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAgeLimit() {
|
||||
return NO_AGE_LIMIT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLength() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTimeStamp() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getViewCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDislikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getDashMpdUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHlsUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AudioStream> getAudioStreams() {
|
||||
final List<AudioStream> audioStreams = new ArrayList<>();
|
||||
|
@ -228,18 +163,6 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<SubtitlesStream> getSubtitlesDefault() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<SubtitlesStream> getSubtitles(MediaFormat format) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StreamType getStreamType() {
|
||||
return StreamType.AUDIO_STREAM;
|
||||
|
@ -259,23 +182,6 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
return collector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHost() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Privacy getPrivacy() {
|
||||
return Privacy.PUBLIC;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getCategory() {
|
||||
|
@ -315,12 +221,6 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Locale getLanguageInfo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<String> getTags() {
|
||||
|
@ -334,22 +234,4 @@ public class BandcampStreamExtractor extends StreamExtractor {
|
|||
|
||||
return tags;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSupportInfo() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<StreamSegment> getStreamSegments() throws ParsingException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<MetaInfo> getMetaInfo() throws ParsingException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,18 +60,6 @@ public class MediaCCCLiveStreamExtractor extends StreamExtractor {
|
|||
return room.getString("display");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getTextualUploadDate() throws ParsingException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public DateWrapper getUploadDate() throws ParsingException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getThumbnailUrl() throws ParsingException {
|
||||
|
@ -84,36 +72,11 @@ public class MediaCCCLiveStreamExtractor extends StreamExtractor {
|
|||
return new Description(conference.getString("description") + " - " + group, Description.PLAIN_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAgeLimit() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLength() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTimeStamp() throws ParsingException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getViewCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDislikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderUrl() throws ParsingException {
|
||||
|
@ -126,41 +89,6 @@ public class MediaCCCLiveStreamExtractor extends StreamExtractor {
|
|||
return conference.getString("conference");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUploaderVerified() throws ParsingException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderAvatarUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelName() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelAvatarUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getDashMpdUrl() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHlsUrl() {
|
||||
|
@ -221,85 +149,14 @@ public class MediaCCCLiveStreamExtractor extends StreamExtractor {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<SubtitlesStream> getSubtitlesDefault() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<SubtitlesStream> getSubtitles(MediaFormat format) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StreamType getStreamType() throws ParsingException {
|
||||
return StreamType.LIVE_STREAM; // TODO: video and audio only streams are both available
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public StreamInfoItemsCollector getRelatedItems() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHost() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Privacy getPrivacy() {
|
||||
return Privacy.PUBLIC;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getCategory() {
|
||||
return group;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getLicence() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Locale getLanguageInfo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<String> getTags() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSupportInfo() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<StreamSegment> getStreamSegments() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<MetaInfo> getMetaInfo() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,36 +58,16 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
return new Description(data.getString("description"), Description.PLAIN_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAgeLimit() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLength() {
|
||||
return data.getInt("length");
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTimeStamp() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getViewCount() {
|
||||
return data.getInt("view_count");
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDislikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderUrl() {
|
||||
|
@ -101,47 +81,12 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
.replaceFirst("https://(api\\.)?media\\.ccc\\.de/public/conferences/", "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUploaderVerified() throws ParsingException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderAvatarUrl() {
|
||||
return conferenceData.getString("logo_url");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelName() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelAvatarUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getDashMpdUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHlsUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AudioStream> getAudioStreams() throws ExtractionException {
|
||||
final JsonArray recordings = data.getArray("recordings");
|
||||
|
@ -200,34 +145,11 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<SubtitlesStream> getSubtitlesDefault() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<SubtitlesStream> getSubtitles(final MediaFormat format) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StreamType getStreamType() {
|
||||
return StreamType.VIDEO_STREAM;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public StreamInfoItemsCollector getRelatedItems() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchPage(@Nonnull final Downloader downloader)
|
||||
throws IOException, ExtractionException {
|
||||
|
@ -253,30 +175,6 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
return data.getString("frontend_link");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHost() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Privacy getPrivacy() {
|
||||
return Privacy.PUBLIC;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getCategory() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getLicence() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Locale getLanguageInfo() throws ParsingException {
|
||||
return Localization.getLocaleFromThreeLetterCode(data.getString("original_language"));
|
||||
|
@ -287,22 +185,4 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
public List<String> getTags() {
|
||||
return JsonUtils.getStringListFromJsonArray(data.getArray("tags"));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSupportInfo() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<StreamSegment> getStreamSegments() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<MetaInfo> getMetaInfo() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,11 +149,6 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
return JsonUtils.getString(json, "account.displayName");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUploaderVerified() throws ParsingException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderAvatarUrl() {
|
||||
|
@ -190,12 +185,6 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
return baseUrl + value;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getDashMpdUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHlsUrl() {
|
||||
|
@ -329,18 +318,6 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<StreamSegment> getStreamSegments() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<MetaInfo> getMetaInfo() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
private String getRelatedItemsUrl(final List<String> tags) throws UnsupportedEncodingException {
|
||||
final String url = baseUrl + PeertubeSearchQueryHandlerFactory.SEARCH_ENDPOINT;
|
||||
final StringBuilder params = new StringBuilder();
|
||||
|
@ -386,11 +363,6 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchPage(final Downloader downloader) throws IOException, ExtractionException {
|
||||
final Response response = downloader.get(baseUrl + PeertubeStreamLinkHandlerFactory.VIDEO_API_ENDPOINT + getId());
|
||||
|
|
|
@ -102,11 +102,6 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
return new Description(track.getString("description"), Description.PLAIN_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAgeLimit() {
|
||||
return NO_AGE_LIMIT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLength() {
|
||||
return track.getLong("duration") / 1000L;
|
||||
|
@ -127,11 +122,6 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
return track.getLong("favoritings_count", -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDislikeCount() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderUrl() {
|
||||
|
@ -155,36 +145,6 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
return SoundcloudParsingHelper.getAvatarUrl(track);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelName() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelAvatarUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getDashMpdUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHlsUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AudioStream> getAudioStreams() throws ExtractionException {
|
||||
final List<AudioStream> audioStreams = new ArrayList<>();
|
||||
|
@ -343,18 +303,6 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public List<SubtitlesStream> getSubtitlesDefault() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public List<SubtitlesStream> getSubtitles(MediaFormat format) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StreamType getStreamType() {
|
||||
return StreamType.AUDIO_STREAM;
|
||||
|
@ -372,17 +320,6 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
return collector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHost() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Privacy getPrivacy() {
|
||||
return track.getString("sharing").equals("public") ? Privacy.PUBLIC : Privacy.PRIVATE;
|
||||
|
@ -400,11 +337,6 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
return track.getString("license");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Locale getLanguageInfo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<String> getTags() {
|
||||
|
@ -432,22 +364,4 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
return tags;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSupportInfo() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<StreamSegment> getStreamSegments() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<MetaInfo> getMetaInfo() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -337,24 +337,18 @@ public class YoutubeStreamExtractor extends StreamExtractor {
|
|||
@Override
|
||||
public long getLikeCount() throws ParsingException {
|
||||
assertPageFetched();
|
||||
String likesString = null;
|
||||
String likesString = "";
|
||||
try {
|
||||
likesString = getVideoPrimaryInfoRenderer().getObject("sentimentBar")
|
||||
.getObject("sentimentBarRenderer").getString("tooltip");
|
||||
if (likesString != null && likesString.contains("/")) {
|
||||
likesString = likesString.split("/")[0];
|
||||
} else {
|
||||
likesString = getVideoPrimaryInfoRenderer()
|
||||
.getObject("videoActions")
|
||||
.getObject("menuRenderer")
|
||||
.getArray("topLevelButtons")
|
||||
.getObject(0)
|
||||
.getObject("toggleButtonRenderer")
|
||||
.getObject("defaultText")
|
||||
.getObject("accessibility")
|
||||
.getObject("accessibilityData")
|
||||
.getString("label");
|
||||
}
|
||||
likesString = getVideoPrimaryInfoRenderer()
|
||||
.getObject("videoActions")
|
||||
.getObject("menuRenderer")
|
||||
.getArray("topLevelButtons")
|
||||
.getObject(0)
|
||||
.getObject("toggleButtonRenderer")
|
||||
.getObject("defaultText")
|
||||
.getObject("accessibility")
|
||||
.getObject("accessibilityData")
|
||||
.getString("label");
|
||||
|
||||
if (likesString == null) {
|
||||
// If this kicks in our button has no content and therefore ratings must be disabled
|
||||
|
@ -364,6 +358,10 @@ public class YoutubeStreamExtractor extends StreamExtractor {
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (likesString.toLowerCase().contains("no likes")) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Integer.parseInt(Utils.removeNonDigitCharacters(likesString));
|
||||
} catch (final NumberFormatException nfe) {
|
||||
throw new ParsingException("Could not parse \"" + likesString + "\" as an Integer",
|
||||
|
@ -376,34 +374,6 @@ public class YoutubeStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDislikeCount() throws ParsingException {
|
||||
assertPageFetched();
|
||||
|
||||
try {
|
||||
String dislikesString = getVideoPrimaryInfoRenderer().getObject("sentimentBar")
|
||||
.getObject("sentimentBarRenderer").getString("tooltip");
|
||||
if (dislikesString != null && dislikesString.contains("/")) {
|
||||
dislikesString = dislikesString.split("/")[1];
|
||||
return Integer.parseInt(Utils.removeNonDigitCharacters(dislikesString));
|
||||
} else {
|
||||
// Calculate dislike with average rating and like count
|
||||
long likes = getLikeCount();
|
||||
double averageRating = playerResponse.getObject("videoDetails").getDouble("averageRating");
|
||||
|
||||
if (likes != -1 && averageRating > 1) {
|
||||
// If averageRating can't be gathered, it will be 0,
|
||||
// but we also can't divide by 0 so we need > 1
|
||||
return Math.round(likes * ((5 - averageRating) / (averageRating - 1)));
|
||||
}
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
}
|
||||
// Silently fail as YouTube is "gradually rolling out" removing dislike count
|
||||
// https://blog.youtube/news-and-events/update-to-youtube/
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getUploaderUrl() throws ParsingException {
|
||||
|
@ -467,24 +437,6 @@ public class YoutubeStreamExtractor extends StreamExtractor {
|
|||
return fixThumbnailUrl(url);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelName() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSubChannelAvatarUrl() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getDashMpdUrl() throws ParsingException {
|
||||
|
@ -1266,12 +1218,6 @@ public class YoutubeStreamExtractor extends StreamExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getHost() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Privacy getPrivacy() {
|
||||
|
@ -1313,12 +1259,6 @@ public class YoutubeStreamExtractor extends StreamExtractor {
|
|||
.getArray("keywords"));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String getSupportInfo() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<StreamSegment> getStreamSegments() throws ParsingException {
|
||||
|
|
|
@ -63,7 +63,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @see #getUploadDate()
|
||||
*/
|
||||
@Nullable
|
||||
public abstract String getTextualUploadDate() throws ParsingException;
|
||||
public String getTextualUploadDate() throws ParsingException {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* A more general {@code Calendar} instance set to the date provided by the service.<br>
|
||||
|
@ -77,7 +79,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @see #getTextualUploadDate()
|
||||
*/
|
||||
@Nullable
|
||||
public abstract DateWrapper getUploadDate() throws ParsingException;
|
||||
public DateWrapper getUploadDate() throws ParsingException {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will return the url to the thumbnail of the stream. Try to return the medium resolution here.
|
||||
|
@ -95,7 +99,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract Description getDescription() throws ParsingException;
|
||||
public Description getDescription() throws ParsingException {
|
||||
return Description.emptyDescription;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the age limit.
|
||||
|
@ -103,52 +109,64 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @return The age which limits the content or {@value NO_AGE_LIMIT} if there is no limit
|
||||
* @throws ParsingException if an error occurs while parsing
|
||||
*/
|
||||
public abstract int getAgeLimit() throws ParsingException;
|
||||
public int getAgeLimit() throws ParsingException {
|
||||
return NO_AGE_LIMIT;
|
||||
}
|
||||
|
||||
/**
|
||||
* This should return the length of a video in seconds.
|
||||
*
|
||||
* @return The length of the stream in seconds.
|
||||
* @return The length of the stream in seconds or 0 when it has no length (e.g. a livestream).
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract long getLength() throws ParsingException;
|
||||
public long getLength() throws ParsingException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the url you are currently handling contains a time stamp/seek, you can return the
|
||||
* position it represents here.
|
||||
* If the url has no time stamp simply return zero.
|
||||
*
|
||||
* @return the timestamp in seconds
|
||||
* @return the timestamp in seconds or 0 when there is no timestamp
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract long getTimeStamp() throws ParsingException;
|
||||
public long getTimeStamp() throws ParsingException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* The count of how many people have watched the video/listened to the audio stream.
|
||||
* If the current stream has no view count or its not available simply return -1
|
||||
*
|
||||
* @return amount of views.
|
||||
* @return amount of views or -1 if not available.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract long getViewCount() throws ParsingException;
|
||||
public long getViewCount() throws ParsingException {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* The amount of likes a video/audio stream got.
|
||||
* If the current stream has no likes or its not available simply return -1
|
||||
*
|
||||
* @return the amount of likes the stream got
|
||||
* @return the amount of likes the stream got or -1 if not available.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract long getLikeCount() throws ParsingException;
|
||||
public long getLikeCount() throws ParsingException {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* The amount of dislikes a video/audio stream got.
|
||||
* If the current stream has no dislikes or its not available simply return -1
|
||||
*
|
||||
* @return the amount of likes the stream got
|
||||
* @return the amount of likes the stream got or -1 if not available.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract long getDislikeCount() throws ParsingException;
|
||||
public long getDislikeCount() throws ParsingException {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Url to the page of the creator/uploader of the stream. This must not be a homepage,
|
||||
|
@ -157,7 +175,7 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* so be sure to implement that one before you return a value here, otherwise NewPipe will crash if one selects
|
||||
* this url.
|
||||
*
|
||||
* @return the url to the page of the creator/uploader of the stream or an empty String
|
||||
* @return the url to the page of the creator/uploader of the stream or an empty string
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
|
@ -167,7 +185,7 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* The name of the creator/uploader of the stream.
|
||||
* If the name is not available you can simply return an empty string.
|
||||
*
|
||||
* @return the name of the creator/uploader of the stream or an empty String
|
||||
* @return the name of the creator/uploader of the stream or an empty tring
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
|
@ -180,7 +198,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @return whether the uploader has been verified by the service's provider
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract boolean isUploaderVerified() throws ParsingException;
|
||||
public boolean isUploaderVerified() throws ParsingException {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* The url to the image file/profile picture/avatar of the creator/uploader of the stream.
|
||||
|
@ -190,7 +210,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getUploaderAvatarUrl() throws ParsingException;
|
||||
public String getUploaderAvatarUrl() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The Url to the page of the sub-channel of the stream. This must not be a homepage,
|
||||
|
@ -203,7 +225,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getSubChannelUrl() throws ParsingException;
|
||||
public String getSubChannelUrl() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the sub-channel of the stream.
|
||||
|
@ -213,7 +237,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getSubChannelName() throws ParsingException;
|
||||
public String getSubChannelName() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The url to the image file/profile picture/avatar of the sub-channel of the stream.
|
||||
|
@ -223,17 +249,21 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getSubChannelAvatarUrl() throws ParsingException;
|
||||
public String getSubChannelAvatarUrl() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the dash mpd url. If you don't know what a dash MPD is you can read about it
|
||||
* <a href="https://www.brendanlong.com/the-structure-of-an-mpeg-dash-mpd.html">here</a>.
|
||||
*
|
||||
* @return the url as a string or an empty string
|
||||
* @return the url as a string or an empty string or an empty string if not available
|
||||
* @throws ParsingException if an error occurs while reading
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getDashMpdUrl() throws ParsingException;
|
||||
public String getDashMpdUrl() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* I am not sure if this is in use, and how this is used. However the frontend is missing support
|
||||
|
@ -241,11 +271,13 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* <a href="https://github.com/teamnewpipe/newpipe/issues">issue</a>,
|
||||
* or fix this description if you know whats up with this.
|
||||
*
|
||||
* @return The Url to the hls stream.
|
||||
* @return The Url to the hls stream or an empty string if not available.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getHlsUrl() throws ParsingException;
|
||||
public String getHlsUrl() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* This should return a list of available
|
||||
|
@ -298,7 +330,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ExtractionException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract List<SubtitlesStream> getSubtitlesDefault() throws IOException, ExtractionException;
|
||||
public List<SubtitlesStream> getSubtitlesDefault() throws IOException, ExtractionException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* This will return a list of available
|
||||
|
@ -312,7 +346,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ExtractionException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract List<SubtitlesStream> getSubtitles(MediaFormat format) throws IOException, ExtractionException;
|
||||
public List<SubtitlesStream> getSubtitles(MediaFormat format) throws IOException, ExtractionException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the <a href="https://teamnewpipe.github.io/NewPipeExtractor/javadoc/">StreamType</a>.
|
||||
|
@ -334,13 +370,15 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ExtractionException
|
||||
*/
|
||||
@Nullable
|
||||
public abstract InfoItemsCollector<? extends InfoItem, ? extends InfoItemExtractor>
|
||||
getRelatedItems() throws IOException, ExtractionException;
|
||||
public InfoItemsCollector<? extends InfoItem, ? extends InfoItemExtractor>
|
||||
getRelatedItems() throws IOException, ExtractionException {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #getRelatedItems()}. May be removed in a future version.
|
||||
* @return The result of {@link #getRelatedItems()} if it is a
|
||||
* StreamInfoItemsCollector, null otherwise
|
||||
* StreamInfoItemsCollector, <code>null</code> otherwise
|
||||
* @throws IOException
|
||||
* @throws ExtractionException
|
||||
*/
|
||||
|
@ -367,9 +405,11 @@ public abstract class StreamExtractor extends Extractor {
|
|||
/**
|
||||
* Should analyse the webpage's document and extracts any error message there might be.
|
||||
*
|
||||
* @return Error message; null if there is no error message.
|
||||
* @return Error message; <code>null</code> if there is no error message.
|
||||
*/
|
||||
public abstract String getErrorMessage();
|
||||
public String getErrorMessage() {
|
||||
return null;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
/// Helper
|
||||
|
@ -435,30 +475,35 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* a federated system, but a centralised system,
|
||||
* you can simply return an empty string.
|
||||
*
|
||||
* @return the host of the stream or an empty String.
|
||||
* @return the host of the stream or an empty string.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getHost() throws ParsingException;
|
||||
public String getHost() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The privacy of the stream (Eg. Public, Private, Unlisted…).
|
||||
* If the privacy is not available you can simply return an empty string.
|
||||
*
|
||||
* @return the privacy of the stream or an empty String.
|
||||
* @return the privacy of the stream.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
public abstract Privacy getPrivacy() throws ParsingException;
|
||||
public Privacy getPrivacy() throws ParsingException {
|
||||
return Privacy.PUBLIC;
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the category of the stream.
|
||||
* If the category is not available you can simply return an empty string.
|
||||
*
|
||||
* @return the category of the stream or an empty String.
|
||||
* @return the category of the stream or an empty string.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getCategory() throws ParsingException;
|
||||
public String getCategory() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the licence of the stream.
|
||||
|
@ -468,7 +513,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getLicence() throws ParsingException;
|
||||
public String getLicence() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The locale language of the stream.
|
||||
|
@ -476,11 +523,13 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* If the language is provided by a language code, you can return
|
||||
* new Locale(language_code);
|
||||
*
|
||||
* @return the locale language of the stream or null.
|
||||
* @return the locale language of the stream or <code>null</code>.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nullable
|
||||
public abstract Locale getLanguageInfo() throws ParsingException;
|
||||
public Locale getLanguageInfo() throws ParsingException {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The list of tags of the stream.
|
||||
|
@ -490,7 +539,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract List<String> getTags() throws ParsingException;
|
||||
public List<String> getTags() throws ParsingException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* The support information of the stream.
|
||||
|
@ -499,11 +550,13 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* If the support information are not available,
|
||||
* you can simply return an empty String.
|
||||
*
|
||||
* @return the support information of the stream or an empty String.
|
||||
* @return the support information of the stream or an empty string.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract String getSupportInfo() throws ParsingException;
|
||||
public String getSupportInfo() throws ParsingException {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* The list of stream segments by timestamps for the stream.
|
||||
|
@ -513,7 +566,9 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract List<StreamSegment> getStreamSegments() throws ParsingException;
|
||||
public List<StreamSegment> getStreamSegments() throws ParsingException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Meta information about the stream.
|
||||
|
@ -524,11 +579,14 @@ public abstract class StreamExtractor extends Extractor {
|
|||
* </p>
|
||||
* The meta information often contains links to external sources like Wikipedia or the WHO.
|
||||
*
|
||||
* @return The meta info of the stream or an empty List if not provided.
|
||||
* @return The meta info of the stream or an empty list if not provided.
|
||||
* @throws ParsingException
|
||||
*/
|
||||
@Nonnull
|
||||
public abstract List<MetaInfo> getMetaInfo() throws ParsingException;
|
||||
public List<MetaInfo> getMetaInfo() throws ParsingException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public enum Privacy {
|
||||
PUBLIC,
|
||||
UNLISTED,
|
||||
|
|
|
@ -55,7 +55,7 @@ public class YoutubeStreamExtractorAgeRestrictedTest extends DefaultStreamExtrac
|
|||
@Nullable @Override public String expectedUploadDate() { return "2018-03-11 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2018-03-11"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 3_700; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 30; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public boolean expectedHasRelatedItems() { return false; } // no related videos (!)
|
||||
@Override public int expectedAgeLimit() { return 18; }
|
||||
@Override public boolean expectedHasSubtitles() { return false; }
|
||||
|
|
|
@ -58,7 +58,7 @@ public class YoutubeStreamExtractorControversialTest extends DefaultStreamExtrac
|
|||
@Nullable @Override public String expectedUploadDate() { return "2010-09-09 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2010-09-09"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 13300; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 2600; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public List<String> expectedTags() { return Arrays.asList("Books", "Burning", "Jones", "Koran", "Qur'an", "Terry", "the amazing atheist"); }
|
||||
@Override public String expectedCategory() { return "Entertainment"; }
|
||||
@Override public String expectedLicence() { return "YouTube licence"; }
|
||||
|
|
|
@ -148,7 +148,7 @@ public class YoutubeStreamExtractorDefaultTest {
|
|||
@Nullable @Override public String expectedUploadDate() { return "2019-08-24 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2019-08-24"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 5212900; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 30600; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public int expectedStreamSegmentsCount() { return 0; }
|
||||
@Override public String expectedLicence() { return YOUTUBE_LICENCE; }
|
||||
@Override public String expectedCategory() { return "Entertainment"; }
|
||||
|
@ -192,7 +192,7 @@ public class YoutubeStreamExtractorDefaultTest {
|
|||
@Nullable @Override public String expectedUploadDate() { return "2018-06-19 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2018-06-19"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 340100; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 18700; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public boolean expectedUploaderVerified() { return true; }
|
||||
@Override public String expectedLicence() { return YOUTUBE_LICENCE; }
|
||||
@Override public String expectedCategory() { return "Science & Technology"; }
|
||||
|
@ -282,7 +282,7 @@ public class YoutubeStreamExtractorDefaultTest {
|
|||
@Nullable @Override public String expectedUploadDate() { return "2021-03-17 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2021-03-17"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 2300; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 450; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public boolean expectedHasSubtitles() { return false; }
|
||||
@Override public int expectedStreamSegmentsCount() { return 13; }
|
||||
@Override public String expectedLicence() { return YOUTUBE_LICENCE; }
|
||||
|
@ -342,7 +342,7 @@ public class YoutubeStreamExtractorDefaultTest {
|
|||
@Nullable @Override public String expectedUploadDate() { return "2020-11-18 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2020-11-18"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 48500; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 20000; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public boolean expectedHasSubtitles() { return true; }
|
||||
@Override public int expectedStreamSegmentsCount() { return 7; }
|
||||
@Override public String expectedLicence() { return YOUTUBE_LICENCE; }
|
||||
|
@ -411,7 +411,7 @@ public class YoutubeStreamExtractorDefaultTest {
|
|||
@Nullable @Override public String expectedUploadDate() { return "2019-06-12 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2019-06-12"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 70000; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 500; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public List<MetaInfo> expectedMetaInfo() throws MalformedURLException {
|
||||
return Collections.singletonList(new MetaInfo(
|
||||
EMPTY_STRING,
|
||||
|
|
|
@ -63,7 +63,7 @@ public class YoutubeStreamExtractorLivestreamTest extends DefaultStreamExtractor
|
|||
@Nullable @Override public String expectedUploadDate() { return "2020-02-22 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2020-02-22"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 825000; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 15600; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public boolean expectedHasSubtitles() { return false; }
|
||||
@Nullable @Override public String expectedDashMpdUrlContains() { return "https://manifest.googlevideo.com/api/manifest/dash/"; }
|
||||
@Override public boolean expectedHasFrames() { return false; }
|
||||
|
|
|
@ -54,7 +54,7 @@ public class YoutubeStreamExtractorUnlistedTest extends DefaultStreamExtractorTe
|
|||
@Nullable @Override public String expectedUploadDate() { return "2017-09-22 00:00:00.000"; }
|
||||
@Nullable @Override public String expectedTextualUploadDate() { return "2017-09-22"; }
|
||||
@Override public long expectedLikeCountAtLeast() { return 110; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return 0; }
|
||||
@Override public long expectedDislikeCountAtLeast() { return -1; }
|
||||
@Override public StreamExtractor.Privacy expectedPrivacy() { return UNLISTED; }
|
||||
@Override public String expectedLicence() { return "YouTube licence"; }
|
||||
@Override public String expectedCategory() { return "Gaming"; }
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -26,16 +26,16 @@
|
|||
"text/javascript; charset\u003dutf-8"
|
||||
],
|
||||
"cross-origin-opener-policy-report-only": [
|
||||
"same-origin; report-to\u003d\"AXrpQdexiF0ssZ_nH8Dr-M3QgbdVRvO77RECMA\""
|
||||
"same-origin; report-to\u003d\"ATmXEA_aXV-idIZ-e5x1JSbJUg8hfAx2dSl3lQ\""
|
||||
],
|
||||
"cross-origin-resource-policy": [
|
||||
"cross-origin"
|
||||
],
|
||||
"date": [
|
||||
"Wed, 08 Dec 2021 20:07:15 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:33 GMT"
|
||||
],
|
||||
"expires": [
|
||||
"Wed, 08 Dec 2021 20:07:15 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:33 GMT"
|
||||
],
|
||||
"p3p": [
|
||||
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
|
||||
|
@ -44,15 +44,15 @@
|
|||
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
|
||||
],
|
||||
"report-to": [
|
||||
"{\"group\":\"AXrpQdexiF0ssZ_nH8Dr-M3QgbdVRvO77RECMA\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/encsid_AXrpQdexiF0ssZ_nH8Dr-M3QgbdVRvO77RECMA\"}]}"
|
||||
"{\"group\":\"ATmXEA_aXV-idIZ-e5x1JSbJUg8hfAx2dSl3lQ\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/encsid_ATmXEA_aXV-idIZ-e5x1JSbJUg8hfAx2dSl3lQ\"}]}"
|
||||
],
|
||||
"server": [
|
||||
"ESF"
|
||||
],
|
||||
"set-cookie": [
|
||||
"YSC\u003dP2g-VD0PQjQ; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
|
||||
"VISITOR_INFO1_LIVE\u003dPfSCy2p0974; Domain\u003d.youtube.com; Expires\u003dMon, 06-Jun-2022 20:07:15 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
|
||||
"CONSENT\u003dPENDING+585; expires\u003dFri, 08-Dec-2023 20:07:15 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
"YSC\u003dnPcJ2G1k_tY; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
|
||||
"VISITOR_INFO1_LIVE\u003d8gv0jn7WFvA; Domain\u003d.youtube.com; Expires\u003dSat, 25-Jun-2022 16:06:33 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
|
||||
"CONSENT\u003dPENDING+029; expires\u003dWed, 27-Dec-2023 16:06:33 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
],
|
||||
"strict-transport-security": [
|
||||
"max-age\u003d31536000"
|
||||
|
@ -67,7 +67,7 @@
|
|||
"0"
|
||||
]
|
||||
},
|
||||
"responseBody": "var scriptUrl \u003d \u0027https:\\/\\/www.youtube.com\\/s\\/player\\/46ac5f60\\/www-widgetapi.vflset\\/www-widgetapi.js\u0027;try{var ttPolicy\u003dwindow.trustedTypes.createPolicy(\"youtube-widget-api\",{createScriptURL:function(x){return x}});scriptUrl\u003dttPolicy.createScriptURL(scriptUrl)}catch(e){}if(!window[\"YT\"])var YT\u003d{loading:0,loaded:0};if(!window[\"YTConfig\"])var YTConfig\u003d{\"host\":\"https://www.youtube.com\"};\nif(!YT.loading){YT.loading\u003d1;(function(){var l\u003d[];YT.ready\u003dfunction(f){if(YT.loaded)f();else l.push(f)};window.onYTReady\u003dfunction(){YT.loaded\u003d1;for(var i\u003d0;i\u003cl.length;i++)try{l[i]()}catch(e$0){}};YT.setConfig\u003dfunction(c){for(var k in c)if(c.hasOwnProperty(k))YTConfig[k]\u003dc[k]};var a\u003ddocument.createElement(\"script\");a.type\u003d\"text/javascript\";a.id\u003d\"www-widgetapi-script\";a.src\u003dscriptUrl;a.async\u003dtrue;var c\u003ddocument.currentScript;if(c){var n\u003dc.nonce||c.getAttribute(\"nonce\");if(n)a.setAttribute(\"nonce\",n)}var b\u003d\ndocument.getElementsByTagName(\"script\")[0];b.parentNode.insertBefore(a,b)})()};\n",
|
||||
"responseBody": "var scriptUrl \u003d \u0027https:\\/\\/www.youtube.com\\/s\\/player\\/8da38e9a\\/www-widgetapi.vflset\\/www-widgetapi.js\u0027;try{var ttPolicy\u003dwindow.trustedTypes.createPolicy(\"youtube-widget-api\",{createScriptURL:function(x){return x}});scriptUrl\u003dttPolicy.createScriptURL(scriptUrl)}catch(e){}if(!window[\"YT\"])var YT\u003d{loading:0,loaded:0};if(!window[\"YTConfig\"])var YTConfig\u003d{\"host\":\"https://www.youtube.com\"};\nif(!YT.loading){YT.loading\u003d1;(function(){var l\u003d[];YT.ready\u003dfunction(f){if(YT.loaded)f();else l.push(f)};window.onYTReady\u003dfunction(){YT.loaded\u003d1;for(var i\u003d0;i\u003cl.length;i++)try{l[i]()}catch(e$0){}};YT.setConfig\u003dfunction(c){for(var k in c)if(c.hasOwnProperty(k))YTConfig[k]\u003dc[k]};var a\u003ddocument.createElement(\"script\");a.type\u003d\"text/javascript\";a.id\u003d\"www-widgetapi-script\";a.src\u003dscriptUrl;a.async\u003dtrue;var c\u003ddocument.currentScript;if(c){var n\u003dc.nonce||c.getAttribute(\"nonce\");if(n)a.setAttribute(\"nonce\",n)}var b\u003d\ndocument.getElementsByTagName(\"script\")[0];b.parentNode.insertBefore(a,b)})()};\n",
|
||||
"latestUrl": "https://www.youtube.com/iframe_api"
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,188 +1,12 @@
|
|||
{
|
||||
"request": {
|
||||
"httpMethod": "POST",
|
||||
"url": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
|
||||
"httpMethod": "GET",
|
||||
"url": "https://www.youtube.com/iframe_api",
|
||||
"headers": {
|
||||
"Accept-Language": [
|
||||
"en-GB, en;q\u003d0.9"
|
||||
],
|
||||
"Origin": [
|
||||
"https://www.youtube.com"
|
||||
],
|
||||
"X-YouTube-Client-Name": [
|
||||
"1"
|
||||
],
|
||||
"Referer": [
|
||||
"https://www.youtube.com"
|
||||
],
|
||||
"X-YouTube-Client-Version": [
|
||||
"2.20210728.00.00"
|
||||
],
|
||||
"Content-Type": [
|
||||
"application/json"
|
||||
]
|
||||
},
|
||||
"dataToSend": [
|
||||
123,
|
||||
34,
|
||||
99,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
120,
|
||||
116,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
104,
|
||||
108,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
101,
|
||||
110,
|
||||
45,
|
||||
71,
|
||||
66,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
103,
|
||||
108,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
71,
|
||||
66,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
78,
|
||||
97,
|
||||
109,
|
||||
101,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
87,
|
||||
69,
|
||||
66,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
86,
|
||||
101,
|
||||
114,
|
||||
115,
|
||||
105,
|
||||
111,
|
||||
110,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
50,
|
||||
46,
|
||||
50,
|
||||
48,
|
||||
50,
|
||||
49,
|
||||
48,
|
||||
55,
|
||||
50,
|
||||
56,
|
||||
46,
|
||||
48,
|
||||
48,
|
||||
46,
|
||||
48,
|
||||
48,
|
||||
34,
|
||||
125,
|
||||
44,
|
||||
34,
|
||||
117,
|
||||
115,
|
||||
101,
|
||||
114,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
108,
|
||||
111,
|
||||
99,
|
||||
107,
|
||||
101,
|
||||
100,
|
||||
83,
|
||||
97,
|
||||
102,
|
||||
101,
|
||||
116,
|
||||
121,
|
||||
77,
|
||||
111,
|
||||
100,
|
||||
101,
|
||||
34,
|
||||
58,
|
||||
102,
|
||||
97,
|
||||
108,
|
||||
115,
|
||||
101,
|
||||
125,
|
||||
125,
|
||||
44,
|
||||
34,
|
||||
118,
|
||||
105,
|
||||
100,
|
||||
101,
|
||||
111,
|
||||
73,
|
||||
100,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
73,
|
||||
78,
|
||||
86,
|
||||
65,
|
||||
76,
|
||||
73,
|
||||
68,
|
||||
95,
|
||||
73,
|
||||
68,
|
||||
95,
|
||||
34,
|
||||
125
|
||||
],
|
||||
"localization": {
|
||||
"languageCode": "en",
|
||||
"countryCode": "GB"
|
||||
|
@ -193,33 +17,45 @@
|
|||
"responseMessage": "",
|
||||
"responseHeaders": {
|
||||
"alt-svc": [
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-T051\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
],
|
||||
"cache-control": [
|
||||
"private"
|
||||
"private, max-age\u003d0"
|
||||
],
|
||||
"content-type": [
|
||||
"application/json; charset\u003dUTF-8"
|
||||
"text/javascript; charset\u003dutf-8"
|
||||
],
|
||||
"cross-origin-opener-policy-report-only": [
|
||||
"same-origin; report-to\u003d\"ATmXEA_aXV-idIZ-e5x1JSbJUg8hfAx2dSl3lQ\""
|
||||
],
|
||||
"cross-origin-resource-policy": [
|
||||
"cross-origin"
|
||||
],
|
||||
"date": [
|
||||
"Fri, 30 Jul 2021 17:07:03 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:44 GMT"
|
||||
],
|
||||
"expires": [
|
||||
"Fri, 30 Jul 2021 17:07:03 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:44 GMT"
|
||||
],
|
||||
"p3p": [
|
||||
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
|
||||
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
|
||||
],
|
||||
"permissions-policy": [
|
||||
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-model\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
|
||||
],
|
||||
"report-to": [
|
||||
"{\"group\":\"ATmXEA_aXV-idIZ-e5x1JSbJUg8hfAx2dSl3lQ\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/encsid_ATmXEA_aXV-idIZ-e5x1JSbJUg8hfAx2dSl3lQ\"}]}"
|
||||
],
|
||||
"server": [
|
||||
"ESF"
|
||||
],
|
||||
"set-cookie": [
|
||||
"CONSENT\u003dPENDING+683; expires\u003dFri, 01-Jan-2038 00:00:00 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
"YSC\u003dKZT0YDZfDrY; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
|
||||
"VISITOR_INFO1_LIVE\u003dh6lqAE2Cbgo; Domain\u003d.youtube.com; Expires\u003dSat, 25-Jun-2022 16:06:44 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
|
||||
"CONSENT\u003dPENDING+570; expires\u003dWed, 27-Dec-2023 16:06:44 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
],
|
||||
"vary": [
|
||||
"Origin",
|
||||
"X-Origin",
|
||||
"Referer"
|
||||
"strict-transport-security": [
|
||||
"max-age\u003d31536000"
|
||||
],
|
||||
"x-content-type-options": [
|
||||
"nosniff"
|
||||
|
@ -231,7 +67,7 @@
|
|||
"0"
|
||||
]
|
||||
},
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"Cgs5dHI5TkJaN0ZkOCi345CIBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"24057238,23996512,24045411,24036948,23748147,9453589,24070942,23944779,24045469,23940237,23983296,23975058,24064096,24049820,24058128,24050503,24044772,23986026,24068842,24036237,24062579,23968386,24066707,1714254,24002922,23857949,24077373,24049571,23974595,24002025,24065632,24049573,23744176,24028143,24590539,24060921,24053866,24007246,24056275,23891344,24004644,23983813,24058812,24043240,23998056,24030040,24070035,24037583,24045470,24058380,23966208,24001373,9453588,24059521,24042870,24056264,23918597,23934970,23891346,24002022,24074166,23987907,23996830,23882502,23804281,23884386,24065724,24037794,24016285,23946420,24076879\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"2.20210728.00.00\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0xc3b20fae4d257c49\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"2.20210728\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"WEB\"\n }\n ]\n }\n ],\n \"mainAppWebResponseContext\": {\n \"loggedOut\": true\n },\n \"webResponseContextExtensionData\": {\n \"hasDecorated\": true\n }\n },\n \"trackingParams\": \"CAAQu2kiEwjMoID9o4vyAhUsEfEFHSf4AIc\u003d\",\n \"playabilityStatus\": {\n \"status\": \"ERROR\",\n \"reason\": \"Video unavailable\",\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"reason\": {\n \"simpleText\": \"Video unavailable\"\n },\n \"thumbnail\": {\n \"thumbnails\": [\n {\n \"url\": \"//s.ytimg.com/yts/img/meh7-vflGevej7.png\",\n \"width\": 140,\n \"height\": 100\n }\n ]\n },\n \"icon\": {\n \"iconType\": \"ERROR_OUTLINE\"\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KC0lOVkFMSURfSURfIPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KC0lOVkFMSURfSURfIPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1627664823\",\n \"nanos\": 625250794\n }\n }\n }\n}\n",
|
||||
"latestUrl": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"
|
||||
"responseBody": "var scriptUrl \u003d \u0027https:\\/\\/www.youtube.com\\/s\\/player\\/8da38e9a\\/www-widgetapi.vflset\\/www-widgetapi.js\u0027;try{var ttPolicy\u003dwindow.trustedTypes.createPolicy(\"youtube-widget-api\",{createScriptURL:function(x){return x}});scriptUrl\u003dttPolicy.createScriptURL(scriptUrl)}catch(e){}if(!window[\"YT\"])var YT\u003d{loading:0,loaded:0};if(!window[\"YTConfig\"])var YTConfig\u003d{\"host\":\"https://www.youtube.com\"};\nif(!YT.loading){YT.loading\u003d1;(function(){var l\u003d[];YT.ready\u003dfunction(f){if(YT.loaded)f();else l.push(f)};window.onYTReady\u003dfunction(){YT.loaded\u003d1;for(var i\u003d0;i\u003cl.length;i++)try{l[i]()}catch(e$0){}};YT.setConfig\u003dfunction(c){for(var k in c)if(c.hasOwnProperty(k))YTConfig[k]\u003dc[k]};var a\u003ddocument.createElement(\"script\");a.type\u003d\"text/javascript\";a.id\u003d\"www-widgetapi-script\";a.src\u003dscriptUrl;a.async\u003dtrue;var c\u003ddocument.currentScript;if(c){var n\u003dc.nonce||c.getAttribute(\"nonce\");if(n)a.setAttribute(\"nonce\",n)}var b\u003d\ndocument.getElementsByTagName(\"script\")[0];b.parentNode.insertBefore(a,b)})()};\n",
|
||||
"latestUrl": "https://www.youtube.com/iframe_api"
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,16 +1,22 @@
|
|||
{
|
||||
"request": {
|
||||
"httpMethod": "POST",
|
||||
"url": "https://youtubei.googleapis.com/youtubei/v1/player?key\u003dAIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w",
|
||||
"url": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
|
||||
"headers": {
|
||||
"Accept-Language": [
|
||||
"en-GB, en;q\u003d0.9"
|
||||
],
|
||||
"User-Agent": [
|
||||
"com.google.android.youtube/16.29.38Linux; U; Android 11; GB) gzip"
|
||||
"Origin": [
|
||||
"https://www.youtube.com"
|
||||
],
|
||||
"x-goog-api-format-version": [
|
||||
"2"
|
||||
"X-YouTube-Client-Name": [
|
||||
"1"
|
||||
],
|
||||
"Referer": [
|
||||
"https://www.youtube.com"
|
||||
],
|
||||
"X-YouTube-Client-Version": [
|
||||
"2.20210728.00.00"
|
||||
],
|
||||
"Content-Type": [
|
||||
"application/json"
|
||||
|
@ -19,6 +25,82 @@
|
|||
"dataToSend": [
|
||||
123,
|
||||
34,
|
||||
112,
|
||||
108,
|
||||
97,
|
||||
121,
|
||||
98,
|
||||
97,
|
||||
99,
|
||||
107,
|
||||
67,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
120,
|
||||
116,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
99,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
80,
|
||||
108,
|
||||
97,
|
||||
121,
|
||||
98,
|
||||
97,
|
||||
99,
|
||||
107,
|
||||
67,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
120,
|
||||
116,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
115,
|
||||
105,
|
||||
103,
|
||||
110,
|
||||
97,
|
||||
116,
|
||||
117,
|
||||
114,
|
||||
101,
|
||||
84,
|
||||
105,
|
||||
109,
|
||||
101,
|
||||
115,
|
||||
116,
|
||||
97,
|
||||
109,
|
||||
112,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
49,
|
||||
56,
|
||||
57,
|
||||
55,
|
||||
56,
|
||||
34,
|
||||
125,
|
||||
125,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
111,
|
||||
110,
|
||||
|
@ -30,78 +112,6 @@
|
|||
58,
|
||||
123,
|
||||
34,
|
||||
116,
|
||||
104,
|
||||
105,
|
||||
114,
|
||||
100,
|
||||
80,
|
||||
97,
|
||||
114,
|
||||
116,
|
||||
121,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
101,
|
||||
109,
|
||||
98,
|
||||
101,
|
||||
100,
|
||||
85,
|
||||
114,
|
||||
108,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
104,
|
||||
116,
|
||||
116,
|
||||
112,
|
||||
115,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
119,
|
||||
119,
|
||||
119,
|
||||
46,
|
||||
121,
|
||||
111,
|
||||
117,
|
||||
116,
|
||||
117,
|
||||
98,
|
||||
101,
|
||||
46,
|
||||
99,
|
||||
111,
|
||||
109,
|
||||
47,
|
||||
119,
|
||||
97,
|
||||
116,
|
||||
99,
|
||||
104,
|
||||
63,
|
||||
118,
|
||||
61,
|
||||
56,
|
||||
86,
|
||||
97,
|
||||
106,
|
||||
116,
|
||||
114,
|
||||
69,
|
||||
83,
|
||||
74,
|
||||
122,
|
||||
65,
|
||||
34,
|
||||
125,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
|
@ -125,29 +135,6 @@
|
|||
34,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
78,
|
||||
97,
|
||||
109,
|
||||
101,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
65,
|
||||
78,
|
||||
68,
|
||||
82,
|
||||
79,
|
||||
73,
|
||||
68,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
103,
|
||||
108,
|
||||
34,
|
||||
|
@ -164,20 +151,16 @@
|
|||
101,
|
||||
110,
|
||||
116,
|
||||
83,
|
||||
99,
|
||||
114,
|
||||
78,
|
||||
97,
|
||||
109,
|
||||
101,
|
||||
101,
|
||||
110,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
87,
|
||||
69,
|
||||
77,
|
||||
66,
|
||||
69,
|
||||
68,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
|
@ -197,14 +180,22 @@
|
|||
34,
|
||||
58,
|
||||
34,
|
||||
49,
|
||||
54,
|
||||
50,
|
||||
46,
|
||||
50,
|
||||
57,
|
||||
46,
|
||||
51,
|
||||
48,
|
||||
50,
|
||||
49,
|
||||
48,
|
||||
55,
|
||||
50,
|
||||
56,
|
||||
46,
|
||||
48,
|
||||
48,
|
||||
46,
|
||||
48,
|
||||
48,
|
||||
34,
|
||||
125,
|
||||
44,
|
||||
|
@ -254,17 +245,17 @@
|
|||
34,
|
||||
58,
|
||||
34,
|
||||
56,
|
||||
86,
|
||||
97,
|
||||
106,
|
||||
100,
|
||||
111,
|
||||
110,
|
||||
45,
|
||||
116,
|
||||
45,
|
||||
101,
|
||||
120,
|
||||
105,
|
||||
115,
|
||||
116,
|
||||
114,
|
||||
69,
|
||||
83,
|
||||
74,
|
||||
122,
|
||||
65,
|
||||
34,
|
||||
125
|
||||
],
|
||||
|
@ -278,7 +269,7 @@
|
|||
"responseMessage": "",
|
||||
"responseHeaders": {
|
||||
"alt-svc": [
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-T051\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
],
|
||||
"cache-control": [
|
||||
"private"
|
||||
|
@ -287,10 +278,10 @@
|
|||
"application/json; charset\u003dUTF-8"
|
||||
],
|
||||
"date": [
|
||||
"Fri, 30 Jul 2021 17:07:06 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:47 GMT"
|
||||
],
|
||||
"expires": [
|
||||
"Fri, 30 Jul 2021 17:07:06 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:47 GMT"
|
||||
],
|
||||
"p3p": [
|
||||
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
|
||||
|
@ -299,7 +290,7 @@
|
|||
"ESF"
|
||||
],
|
||||
"set-cookie": [
|
||||
"CONSENT\u003dPENDING+241; expires\u003dFri, 01-Jan-2038 00:00:00 GMT; path\u003d/; domain\u003d.googleapis.com; Secure"
|
||||
"CONSENT\u003dPENDING+161; expires\u003dWed, 27-Dec-2023 16:06:47 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
],
|
||||
"vary": [
|
||||
"Origin",
|
||||
|
@ -316,7 +307,7 @@
|
|||
"0"
|
||||
]
|
||||
},
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"CgtsNWhSRGgzOWZaZyi645CIBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"24057238,24043232,24045411,23983814,24043023,24070036,24070942,23944779,24068017,24044110,23983296,24070189,24065253,24067360,23968386,24050503,24049820,24058128,24068842,24060091,23996512,23857949,24075814,24049571,24068431,24060921,23974595,24076880,24049573,1714247,24064582,23744176,24028143,24027395,24046762,24024948,24007246,24053866,24036236,24056275,24054937,23891344,24004644,24058812,24036947,23998056,24030040,23970385,23966208,23735348,24058380,24001373,24054345,23918597,24056264,24061714,24059521,24065726,23891346,23934970,23940238,24042870,23996830,24063124,24063663,23884386,23882502,23990876,24021124,24016285,24037794,23946420,24032314,24000751,24071155\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"ANDROID\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"16.29.38\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0x29c50e9e9c43cc11\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"16.29\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"ANDROID\"\n }\n ]\n },\n {\n \"service\": \"LISTNR\",\n \"params\": [\n {\n \"key\": \"e\",\n \"value\": \"24050503,24043023,23996830,24054345,24036947,24037785,24058380,24033252,24075814,24024517,24046762,24056074,24065253,24017183,24037284,24049820,24064582,24031773,24030282\"\n }\n ]\n },\n {\n \"service\": \"SUGGEST\",\n \"params\": [\n {\n \"key\": \"sugexp\",\n \"value\": \"ytmct_c,ytpo.bo.me\u003d0,ytposo.bo.me\u003d0,ytpso.bo.me\u003d0,ytpsoso.bo.me\u003d0,cfro\u003d1,ytpo.bo.me\u003d1,ytposo.bo.me\u003d1,ytpso.bo.me\u003d1,ytpsoso.bo.me\u003d1,ytmo.uic\u003d1\"\n }\n ]\n }\n ]\n },\n \"trackingParams\": \"CAAQu2kiEwie-7H-o4vyAhWTEPEFHT68DIY\u003d\",\n \"playabilityStatus\": {\n \"status\": \"LOGIN_REQUIRED\",\n \"reason\": \"This video is private.\",\n \"messages\": [\n \"This is a private video. Please sign in to verify that you may see it.\"\n ],\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"subreason\": {\n \"runs\": [\n {\n \"text\": \"If the owner of this video has granted you access, please \"\n },\n {\n \"text\": \"sign in\",\n \"navigationEndpoint\": {\n \"clickTrackingParams\": \"CAAQu2kiEwie-7H-o4vyAhWTEPEFHT68DIYyDXByaXZhdGVfdmlkZW8\u003d\",\n \"signInEndpoint\": {\n \"nextEndpoint\": {\n \"clickTrackingParams\": \"CAAQu2kiEwie-7H-o4vyAhWTEPEFHT68DIY\u003d\",\n \"urlEndpoint\": {\n \"url\": \"\"\n }\n }\n }\n }\n },\n {\n \"text\": \".\"\n }\n ]\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"playerSettingsMenuData\": {\n \"loggingDirectives\": {\n \"trackingParams\": \"CAEQtc4GIhMInvux_qOL8gIVkxDxBR0-vAyG\",\n \"visibility\": {\n \"types\": \"12\"\n }\n }\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KCzhWYWp0ckVTSnpBIPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KCzhWYWp0ckVTSnpBIPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1627664826\",\n \"nanos\": 557066370\n }\n }\n }\n}\n",
|
||||
"latestUrl": "https://youtubei.googleapis.com/youtubei/v1/player?key\u003dAIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w"
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"Cgt3ckhBV1BwOEVRRSiXyaeOBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"24117475,24082661,24036947,24131028,24058380,24077241,24007246,24142941,24145062,24131151,23934970,23998056,24004644,24146460,24104858,24129402,24111165,24001373,24080738,23884386,24034168,23882502,24116717,23858057,23966208,24142470,24002022,24067629,24146886,24106839,24007790,24131296,24135236,24143789,23804281,23885487,24120819,23918597,9407156,24085811,24110902,23946420,24115641,24148484,39321475,24145516,24002025,24109689,24116735,23983296,24126016,24141079,23735347,23944779,24150973,24140247,24138442,23968386,24147474,24134152,24028143,23986024,24077266,24084439,1714245,24144448,23744176,24002922,23795882,24143428,24142961,23748146\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"2.20210728.00.00\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0x7c666bc7f580224e\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"2.20211103\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"client.fexp\",\n \"value\": \"24117475,24082661,24036947,24131028,24058380,24077241,24007246,24142941,24145062,24131151,23934970,23998056,24004644,24146460,24104858,24129402,24111165,24001373,24080738,23884386,24034168,23882502,24116717,23858057,23966208,24142470,24002022,24067629,24146886,24106839,24007790,24131296,24135236,24143789,23804281,23885487,24120819,23918597,9407156,24085811,24110902,23946420,24115641,24148484,39321475,24145516,24002025,24109689,24116735,23983296,24126016,24141079,23735347,23944779,24150973,24140247,24138442,23968386,24147474,24134152,24028143,23986024,24077266,24084439,1714245,24144448,23744176,24002922,23795882,24143428,24142961,23748146\"\n }\n ]\n }\n ],\n \"mainAppWebResponseContext\": {\n \"loggedOut\": true\n },\n \"webResponseContextExtensionData\": {\n \"hasDecorated\": true\n }\n },\n \"trackingParams\": \"CAAQu2kiEwiqrJWiroT1AhWL61EKHbJnB5U\u003d\",\n \"playabilityStatus\": {\n \"status\": \"ERROR\",\n \"reason\": \"Video unavailable\",\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"reason\": {\n \"simpleText\": \"Video unavailable\"\n },\n \"thumbnail\": {\n \"thumbnails\": [\n {\n \"url\": \"//s.ytimg.com/yts/img/meh7-vflGevej7.png\",\n \"width\": 140,\n \"height\": 100\n }\n ]\n },\n \"icon\": {\n \"iconType\": \"ERROR_OUTLINE\"\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KC2Rvbi10LWV4aXN0IPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KC2Rvbi10LWV4aXN0IPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\",\n \"addToOfflineButtonState\": \"ADD_TO_OFFLINE_BUTTON_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1640621207\",\n \"nanos\": 285203883\n }\n }\n }\n}\n",
|
||||
"latestUrl": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"
|
||||
}
|
||||
}
|
|
@ -93,9 +93,9 @@
|
|||
34,
|
||||
49,
|
||||
56,
|
||||
56,
|
||||
51,
|
||||
57,
|
||||
55,
|
||||
56,
|
||||
34,
|
||||
125,
|
||||
125,
|
||||
|
@ -112,6 +112,78 @@
|
|||
58,
|
||||
123,
|
||||
34,
|
||||
116,
|
||||
104,
|
||||
105,
|
||||
114,
|
||||
100,
|
||||
80,
|
||||
97,
|
||||
114,
|
||||
116,
|
||||
121,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
101,
|
||||
109,
|
||||
98,
|
||||
101,
|
||||
100,
|
||||
85,
|
||||
114,
|
||||
108,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
104,
|
||||
116,
|
||||
116,
|
||||
112,
|
||||
115,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
119,
|
||||
119,
|
||||
119,
|
||||
46,
|
||||
121,
|
||||
111,
|
||||
117,
|
||||
116,
|
||||
117,
|
||||
98,
|
||||
101,
|
||||
46,
|
||||
99,
|
||||
111,
|
||||
109,
|
||||
47,
|
||||
119,
|
||||
97,
|
||||
116,
|
||||
99,
|
||||
104,
|
||||
63,
|
||||
118,
|
||||
61,
|
||||
100,
|
||||
111,
|
||||
110,
|
||||
45,
|
||||
116,
|
||||
45,
|
||||
101,
|
||||
120,
|
||||
105,
|
||||
115,
|
||||
116,
|
||||
34,
|
||||
125,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
|
@ -170,6 +242,29 @@
|
|||
101,
|
||||
110,
|
||||
116,
|
||||
83,
|
||||
99,
|
||||
114,
|
||||
101,
|
||||
101,
|
||||
110,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
69,
|
||||
77,
|
||||
66,
|
||||
69,
|
||||
68,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
86,
|
||||
101,
|
||||
114,
|
||||
|
@ -269,7 +364,7 @@
|
|||
"responseMessage": "",
|
||||
"responseHeaders": {
|
||||
"alt-svc": [
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-T051\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
],
|
||||
"cache-control": [
|
||||
"private"
|
||||
|
@ -278,10 +373,10 @@
|
|||
"application/json; charset\u003dUTF-8"
|
||||
],
|
||||
"date": [
|
||||
"Fri, 30 Jul 2021 17:07:06 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:47 GMT"
|
||||
],
|
||||
"expires": [
|
||||
"Fri, 30 Jul 2021 17:07:06 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:47 GMT"
|
||||
],
|
||||
"p3p": [
|
||||
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
|
||||
|
@ -290,7 +385,7 @@
|
|||
"ESF"
|
||||
],
|
||||
"set-cookie": [
|
||||
"CONSENT\u003dPENDING+343; expires\u003dFri, 01-Jan-2038 00:00:00 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
"CONSENT\u003dPENDING+780; expires\u003dWed, 27-Dec-2023 16:06:47 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
],
|
||||
"vary": [
|
||||
"Origin",
|
||||
|
@ -307,7 +402,7 @@
|
|||
"0"
|
||||
]
|
||||
},
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"CgtScV9obUx4ODBjOCi645CIBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"24068842,24070036,24058380,23744176,23748146,24070279,23974595,24076879,24049571,23934970,23996830,24002022,24030040,23857950,24049573,24056275,1714253,24053866,24058812,24036237,23946420,24001373,23986016,23804281,23968386,24066623,23882502,24078033,24004644,9453586,23998056,24049820,24059521,24050503,23918597,24056264,24045411,24063598,24007246,24062579,24037794,24058128,9453587,24002025,24002922,23891346,23884386,24042870,24039151,23944779,23983296,24016284,24057238,23983814,24065176,9407157,23966208,24028143,23996512,24060921,9466591,24036947,24043240,23891344\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"2.20210728.00.00\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0xa971253474c3e88f\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"2.20210728\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"WEB\"\n }\n ]\n }\n ],\n \"mainAppWebResponseContext\": {\n \"loggedOut\": true\n },\n \"webResponseContextExtensionData\": {\n \"hasDecorated\": true\n }\n },\n \"trackingParams\": \"CAAQu2kiEwit1rb-o4vyAhUFJ0wKHduEBZM\u003d\",\n \"playabilityStatus\": {\n \"status\": \"ERROR\",\n \"reason\": \"Video unavailable\",\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"reason\": {\n \"simpleText\": \"Video unavailable\"\n },\n \"thumbnail\": {\n \"thumbnails\": [\n {\n \"url\": \"//s.ytimg.com/yts/img/meh7-vflGevej7.png\",\n \"width\": 140,\n \"height\": 100\n }\n ]\n },\n \"icon\": {\n \"iconType\": \"ERROR_OUTLINE\"\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KC2Rvbi10LWV4aXN0IPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KC2Rvbi10LWV4aXN0IPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1627664826\",\n \"nanos\": 620707341\n }\n }\n }\n}\n",
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"Cgt6ZmdwLVdzOEROQSiXyaeOBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"1714257,23882502,24111165,24004644,24104858,24148481,23946420,24001373,23804281,24120820,24007246,24142941,24091242,23998056,24077241,24094608,24129501,24134152,24115066,24045475,24085811,24082661,24002923,9405988,24115641,24106839,24141079,24007790,23934970,24110902,24143789,24108447,24142470,24140247,23884386,24034168,24080738,23966208,24138442,24147469,24002022,24116717,23983296,24146886,23858057,24028143,23968386,24131152,24148127,24135236,24084439,24045476,24117476,24002025,24036948,24109689,23918597,24145063,24145516,39321475,24062267,24116735,24143428,23744176,24127639,23986027,24129402,24053418,24077266,24058380,23944779\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"2.20210728.00.00\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0xad7f8756a25db65b\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"2.20211103\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"client.fexp\",\n \"value\": \"1714257,23882502,24111165,24004644,24104858,24148481,23946420,24001373,23804281,24120820,24007246,24142941,24091242,23998056,24077241,24094608,24129501,24134152,24115066,24045475,24085811,24082661,24002923,9405988,24115641,24106839,24141079,24007790,23934970,24110902,24143789,24108447,24142470,24140247,23884386,24034168,24080738,23966208,24138442,24147469,24002022,24116717,23983296,24146886,23858057,24028143,23968386,24131152,24148127,24135236,24084439,24045476,24117476,24002025,24036948,24109689,23918597,24145063,24145516,39321475,24062267,24116735,24143428,23744176,24127639,23986027,24129402,24053418,24077266,24058380,23944779\"\n }\n ]\n }\n ],\n \"mainAppWebResponseContext\": {\n \"loggedOut\": true\n },\n \"webResponseContextExtensionData\": {\n \"hasDecorated\": true\n }\n },\n \"trackingParams\": \"CAAQu2kiEwjwj5qiroT1AhXp1BEIHaEwD5A\u003d\",\n \"playabilityStatus\": {\n \"status\": \"ERROR\",\n \"reason\": \"Video unavailable\",\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"subreason\": {\n \"simpleText\": \"This video is unavailable\"\n },\n \"reason\": {\n \"simpleText\": \"Video unavailable\"\n },\n \"thumbnail\": {\n \"thumbnails\": [\n {\n \"url\": \"//s.ytimg.com/yts/img/meh7-vflGevej7.png\",\n \"width\": 140,\n \"height\": 100\n }\n ]\n },\n \"icon\": {\n \"iconType\": \"ERROR_OUTLINE\"\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KC2Rvbi10LWV4aXN0IPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KC2Rvbi10LWV4aXN0IPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\",\n \"addToOfflineButtonState\": \"ADD_TO_OFFLINE_BUTTON_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1640621207\",\n \"nanos\": 369473633\n }\n }\n }\n}\n",
|
||||
"latestUrl": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,22 +1,16 @@
|
|||
{
|
||||
"request": {
|
||||
"httpMethod": "POST",
|
||||
"url": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
|
||||
"url": "https://youtubei.googleapis.com/youtubei/v1/player?key\u003dAIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w",
|
||||
"headers": {
|
||||
"Accept-Language": [
|
||||
"en-GB, en;q\u003d0.9"
|
||||
],
|
||||
"Origin": [
|
||||
"https://www.youtube.com"
|
||||
"User-Agent": [
|
||||
"com.google.android.youtube/16.29.38Linux; U; Android 11; GB) gzip"
|
||||
],
|
||||
"X-YouTube-Client-Name": [
|
||||
"1"
|
||||
],
|
||||
"Referer": [
|
||||
"https://www.youtube.com"
|
||||
],
|
||||
"X-YouTube-Client-Version": [
|
||||
"2.20210728.00.00"
|
||||
"x-goog-api-format-version": [
|
||||
"2"
|
||||
],
|
||||
"Content-Type": [
|
||||
"application/json"
|
||||
|
@ -25,82 +19,6 @@
|
|||
"dataToSend": [
|
||||
123,
|
||||
34,
|
||||
112,
|
||||
108,
|
||||
97,
|
||||
121,
|
||||
98,
|
||||
97,
|
||||
99,
|
||||
107,
|
||||
67,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
120,
|
||||
116,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
99,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
110,
|
||||
116,
|
||||
80,
|
||||
108,
|
||||
97,
|
||||
121,
|
||||
98,
|
||||
97,
|
||||
99,
|
||||
107,
|
||||
67,
|
||||
111,
|
||||
110,
|
||||
116,
|
||||
101,
|
||||
120,
|
||||
116,
|
||||
34,
|
||||
58,
|
||||
123,
|
||||
34,
|
||||
115,
|
||||
105,
|
||||
103,
|
||||
110,
|
||||
97,
|
||||
116,
|
||||
117,
|
||||
114,
|
||||
101,
|
||||
84,
|
||||
105,
|
||||
109,
|
||||
101,
|
||||
115,
|
||||
116,
|
||||
97,
|
||||
109,
|
||||
112,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
49,
|
||||
56,
|
||||
56,
|
||||
51,
|
||||
55,
|
||||
34,
|
||||
125,
|
||||
125,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
111,
|
||||
110,
|
||||
|
@ -207,16 +125,6 @@
|
|||
34,
|
||||
44,
|
||||
34,
|
||||
103,
|
||||
108,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
71,
|
||||
66,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
99,
|
||||
108,
|
||||
105,
|
||||
|
@ -230,8 +138,22 @@
|
|||
34,
|
||||
58,
|
||||
34,
|
||||
87,
|
||||
69,
|
||||
65,
|
||||
78,
|
||||
68,
|
||||
82,
|
||||
79,
|
||||
73,
|
||||
68,
|
||||
34,
|
||||
44,
|
||||
34,
|
||||
103,
|
||||
108,
|
||||
34,
|
||||
58,
|
||||
34,
|
||||
71,
|
||||
66,
|
||||
34,
|
||||
44,
|
||||
|
@ -275,22 +197,14 @@
|
|||
34,
|
||||
58,
|
||||
34,
|
||||
50,
|
||||
46,
|
||||
50,
|
||||
48,
|
||||
50,
|
||||
49,
|
||||
48,
|
||||
55,
|
||||
54,
|
||||
46,
|
||||
50,
|
||||
57,
|
||||
46,
|
||||
51,
|
||||
56,
|
||||
46,
|
||||
48,
|
||||
48,
|
||||
46,
|
||||
48,
|
||||
48,
|
||||
34,
|
||||
125,
|
||||
44,
|
||||
|
@ -364,7 +278,7 @@
|
|||
"responseMessage": "",
|
||||
"responseHeaders": {
|
||||
"alt-svc": [
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-T051\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000,h3-Q050\u003d\":443\"; ma\u003d2592000,h3-Q046\u003d\":443\"; ma\u003d2592000,h3-Q043\u003d\":443\"; ma\u003d2592000,quic\u003d\":443\"; ma\u003d2592000; v\u003d\"46,43\""
|
||||
],
|
||||
"cache-control": [
|
||||
"private"
|
||||
|
@ -373,10 +287,10 @@
|
|||
"application/json; charset\u003dUTF-8"
|
||||
],
|
||||
"date": [
|
||||
"Fri, 30 Jul 2021 17:07:05 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:46 GMT"
|
||||
],
|
||||
"expires": [
|
||||
"Fri, 30 Jul 2021 17:07:05 GMT"
|
||||
"Mon, 27 Dec 2021 16:06:46 GMT"
|
||||
],
|
||||
"p3p": [
|
||||
"CP\u003d\"This is not a P3P policy! See g.co/p3phelp for more info.\""
|
||||
|
@ -385,7 +299,7 @@
|
|||
"ESF"
|
||||
],
|
||||
"set-cookie": [
|
||||
"CONSENT\u003dPENDING+496; expires\u003dFri, 01-Jan-2038 00:00:00 GMT; path\u003d/; domain\u003d.youtube.com; Secure"
|
||||
"CONSENT\u003dPENDING+945; expires\u003dWed, 27-Dec-2023 16:06:46 GMT; path\u003d/; domain\u003d.googleapis.com; Secure"
|
||||
],
|
||||
"vary": [
|
||||
"Origin",
|
||||
|
@ -402,7 +316,7 @@
|
|||
"0"
|
||||
]
|
||||
},
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"CgtfM3RCSC1ZUklfTSi545CIBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"9406010,24058128,23858057,24002022,24068860,23891346,24076877,23884386,23996830,24049820,24056264,24042870,24050503,24059521,23934970,23986030,23804281,23735347,24037794,23946420,24016285,23918597,24036236,24058812,24053866,24049573,24047617,24007246,24004644,24070035,23891344,24056275,23974595,23998056,24043240,24030040,24001373,24049571,23966208,24058380,24051037,23882503,24002922,24075254,23744176,24077375,24060921,24002025,23748146,24028143,24590539,23843508,23983296,24036948,24068842,24045411,23886230,24027681,24053419,23983814,23984878,24057238,23944779,1714256,23968386,24064096,23996512,24067276,23857948,23826896,23984488\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"WEB\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"2.20210728.00.00\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0x6c4dc945102f13b6\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"2.20210728\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"WEB\"\n }\n ]\n }\n ],\n \"mainAppWebResponseContext\": {\n \"loggedOut\": true\n },\n \"webResponseContextExtensionData\": {\n \"hasDecorated\": true\n }\n },\n \"trackingParams\": \"CAAQu2kiEwipwvP9o4vyAhUF97QKHbsjDF4\u003d\",\n \"playabilityStatus\": {\n \"status\": \"ERROR\",\n \"reason\": \"Video unavailable\",\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"subreason\": {\n \"simpleText\": \"This video is unavailable.\"\n },\n \"reason\": {\n \"simpleText\": \"Video unavailable\"\n },\n \"thumbnail\": {\n \"thumbnails\": [\n {\n \"url\": \"//s.ytimg.com/yts/img/meh7-vflGevej7.png\",\n \"width\": 140,\n \"height\": 100\n }\n ]\n },\n \"icon\": {\n \"iconType\": \"ERROR_OUTLINE\"\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KC0lOVkFMSURfSURfIPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KC0lOVkFMSURfSURfIPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1627664825\",\n \"nanos\": 515823298\n }\n }\n }\n}\n",
|
||||
"latestUrl": "https://www.youtube.com/youtubei/v1/player?key\u003dAIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"
|
||||
"responseBody": "{\n \"responseContext\": {\n \"visitorData\": \"CgtJbWVMVC1mRHY2cyiWyaeOBg%3D%3D\",\n \"serviceTrackingParams\": [\n {\n \"service\": \"GFEEDBACK\",\n \"params\": [\n {\n \"key\": \"is_viewed_live\",\n \"value\": \"False\"\n },\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n },\n {\n \"key\": \"e\",\n \"value\": \"24053418,24080738,24054345,24123943,24074379,24063124,24007790,24058380,23998056,24036947,24142941,23946420,23918597,24078649,24077241,24007246,24021124,23886486,24135236,23884386,24004644,23966208,24141866,23968386,24142470,24091230,24116717,24034978,23944779,24064556,24150973,24117475,24134152,24082662,23744176,24136747,24001373,24104858,24082169,1714243,24109690,23934970,24054937,24143789,24110902,24116735,24085811,39321475,24106839,24034168,24128155,24138442,24140247,24132532,24077266,23983296,24131029,24144387,24115641,24060091,23882503,24002922,24142961,24143428,24120820,24078457,24091243,23998873,24028143\"\n }\n ]\n },\n {\n \"service\": \"CSI\",\n \"params\": [\n {\n \"key\": \"c\",\n \"value\": \"ANDROID\"\n },\n {\n \"key\": \"cver\",\n \"value\": \"16.29.38\"\n },\n {\n \"key\": \"yt_li\",\n \"value\": \"0\"\n },\n {\n \"key\": \"GetPlayer_rid\",\n \"value\": \"0xa0ffc99a285c97f3\"\n }\n ]\n },\n {\n \"service\": \"GUIDED_HELP\",\n \"params\": [\n {\n \"key\": \"logged_in\",\n \"value\": \"0\"\n }\n ]\n },\n {\n \"service\": \"ECATCHER\",\n \"params\": [\n {\n \"key\": \"client.version\",\n \"value\": \"16.29\"\n },\n {\n \"key\": \"client.name\",\n \"value\": \"ANDROID\"\n },\n {\n \"key\": \"client.fexp\",\n \"value\": \"24053418,24080738,24054345,24123943,24074379,24063124,24007790,24058380,23998056,24036947,24142941,23946420,23918597,24078649,24077241,24007246,24021124,23886486,24135236,23884386,24004644,23966208,24141866,23968386,24142470,24091230,24116717,24034978,23944779,24064556,24150973,24117475,24134152,24082662,23744176,24136747,24001373,24104858,24082169,1714243,24109690,23934970,24054937,24143789,24110902,24116735,24085811,39321475,24106839,24034168,24128155,24138442,24140247,24132532,24077266,23983296,24131029,24144387,24115641,24060091,23882503,24002922,24142961,24143428,24120820,24078457,24091243,23998873,24028143\"\n }\n ]\n },\n {\n \"service\": \"LISTNR\",\n \"params\": [\n {\n \"key\": \"e\",\n \"value\": \"24054345,24142941,24036947,24109931,24116717,24116735,24110902,24033252,24082169,24134152,23998873,24104858,24106839,24150973,24037284,39321475,24085324,24074379,24117475,24064556,24024517,24132532,24058380,24115641,24140247,24143428,24138065,24142470,24030282,24109690\"\n }\n ]\n }\n ]\n },\n \"trackingParams\": \"CAAQu2kiEwiujtGhroT1AhV62REIHQcGAAI\u003d\",\n \"playabilityStatus\": {\n \"status\": \"ERROR\",\n \"reason\": \"This video is unavailable\",\n \"errorScreen\": {\n \"playerErrorMessageRenderer\": {\n \"reason\": {\n \"runs\": [\n {\n \"text\": \"This video is unavailable\"\n }\n ]\n },\n \"thumbnail\": {\n \"thumbnails\": [\n {\n \"url\": \"//s.ytimg.com/yts/img/meh7-vflGevej7.png\",\n \"width\": 140,\n \"height\": 100\n }\n ]\n }\n }\n },\n \"contextParams\": \"Q0FBU0FnZ0E\u003d\"\n },\n \"playerSettingsMenuData\": {\n \"loggingDirectives\": {\n \"trackingParams\": \"CAEQtc4GIhMIro7Roa6E9QIVetkRCB0HBgAC\",\n \"visibility\": {\n \"types\": \"12\"\n }\n }\n },\n \"frameworkUpdates\": {\n \"entityBatchUpdate\": {\n \"mutations\": [\n {\n \"entityKey\": \"Eg0KC0lOVkFMSURfSURfIPYBKAE%3D\",\n \"type\": \"ENTITY_MUTATION_TYPE_REPLACE\",\n \"payload\": {\n \"offlineabilityEntity\": {\n \"key\": \"Eg0KC0lOVkFMSURfSURfIPYBKAE%3D\",\n \"accessState\": \"OFFLINEABILITY_FEATURE_ACCESS_STATE_UNKNOWN\",\n \"addToOfflineButtonState\": \"ADD_TO_OFFLINE_BUTTON_STATE_UNKNOWN\"\n }\n }\n }\n ],\n \"timestamp\": {\n \"seconds\": \"1640621206\",\n \"nanos\": 162641190\n }\n }\n }\n}\n",
|
||||
"latestUrl": "https://youtubei.googleapis.com/youtubei/v1/player?key\u003dAIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w"
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue