From 4284661afef8725d54bab9cf93ef2eedf2a20486 Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sat, 6 Jul 2024 22:56:26 +0300 Subject: [PATCH 1/7] Also provide mediaMetadata --- docs/api.md | 13 +++++++------ src/modules/processing/matchActionDecider.js | 1 + src/modules/processing/request.js | 6 ++++-- src/modules/processing/services/twitter.js | 15 ++++++++++++++- src/modules/processing/services/youtube.js | 11 ++++++++++- 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/docs/api.md b/docs/api.md index b63c9216a..ca484f2dc 100644 --- a/docs/api.md +++ b/docs/api.md @@ -37,12 +37,13 @@ Content-Type: application/json ### response body variables | key | type | variables | |:-------------|:---------|:------------------------------------------------------------| -| `status` | `string` | `error / redirect / stream / success / rate-limit / picker` | -| `text` | `string` | various text, mostly used for errors | -| `url` | `string` | direct link to a file or a link to cobalt's live render | -| `pickerType` | `string` | `various / images` | -| `picker` | `array` | array of picker items | -| `audio` | `string` | direct link to a file or a link to cobalt's live render | +| `status` | `string` | `error / redirect / stream / success / rate-limit / picker` | +| `text` | `string` | various text, mostly used for errors | +| `url` | `string` | direct link to a file or a link to cobalt's live render | +| `pickerType` | `string` | `various / images` | +| `picker` | `array` | array of picker items | +| `audio` | `string` | direct link to a file or a link to cobalt's live render | +| `mediaMetadata` | `object` | Supported only on YouTube and Twitter videos. Object, that contains values `duration` (duration of the video in seconds), `likes` and `views` | ### picker item variables item type: `object` diff --git a/src/modules/processing/matchActionDecider.js b/src/modules/processing/matchActionDecider.js index 74f0f8c77..2f6c7c8a8 100644 --- a/src/modules/processing/matchActionDecider.js +++ b/src/modules/processing/matchActionDecider.js @@ -14,6 +14,7 @@ export default function(r, host, userFormat, isAudioOnly, lang, isAudioMuted, di filename: r.filenameAttributes ? createFilename(r.filenameAttributes, filenamePattern, isAudioOnly, isAudioMuted) : r.filename, fileMetadata: !disableMetadata ? r.fileMetadata : false, + mediaMetadata: r.mediaMetadata, requestIP }, params = {}, diff --git a/src/modules/processing/request.js b/src/modules/processing/request.js index f2f58c65c..269ea5043 100644 --- a/src/modules/processing/request.js +++ b/src/modules/processing/request.js @@ -59,13 +59,15 @@ export function createResponse(responseType, responseData) { case "redirect": response = { - url: responseData.u + url: responseData.u, + mediaMetadata: responseData.mediaMetadata, } break; case "stream": response = { - url: createStream(responseData) + url: createStream(responseData), + mediaMetadata: responseData.mediaMetadata, } break; diff --git a/src/modules/processing/services/twitter.js b/src/modules/processing/services/twitter.js index 36a8669bd..e102ccd69 100644 --- a/src/modules/processing/services/twitter.js +++ b/src/modules/processing/services/twitter.js @@ -159,12 +159,18 @@ export default async function({ id, index, toGif, dispatcher }) { case 0: return { error: 'ErrorNoVideosInTweet' }; case 1: + const mediaMetadata = { + duration: Math.round(media[0].video_info.duration_millis / 1000), + likes: baseTweet.favorite_count, + views: Number(tweetResult.views.count) + }; return { type: needsFixing(media[0]) ? "remux" : "normal", urls: bestQuality(media[0].video_info.variants), filename: `twitter_${id}.mp4`, audioFilename: `twitter_${id}_audio`, - isGif: media[0].type === "animated_gif" + isGif: media[0].type === "animated_gif", + mediaMetadata }; default: const picker = media.map((content, i) => { @@ -180,10 +186,17 @@ export default async function({ id, index, toGif, dispatcher }) { }) } + const mediaMetadata = { + duration: Math.round(content.video_info.duration_millis / 1000), + likes: baseTweet.favorite_count, + views: Number(tweetResult.views.count) + }; + return { type: 'video', url, thumb: content.media_url_https, + mediaMetadata } }); return { picker }; diff --git a/src/modules/processing/services/youtube.js b/src/modules/processing/services/youtube.js index 1c86b4ed0..616c57b6b 100644 --- a/src/modules/processing/services/youtube.js +++ b/src/modules/processing/services/youtube.js @@ -218,16 +218,25 @@ export default async function(o) { urls = [video.decipher(yt.session.player), audio.decipher(yt.session.player)]; } + const mediaMetadata = { + duration: info.basic_info.duration, + likes: info.basic_info.like_count, + views: info.basic_info.view_count + }; + if (match) { filenameAttributes.qualityLabel = match.quality_label; filenameAttributes.resolution = `${match.width}x${match.height}`; filenameAttributes.extension = codecMatch[format].container; filenameAttributes.youtubeFormat = format; + + return { type, urls, filenameAttributes, - fileMetadata + fileMetadata, + mediaMetadata, } } From 7c7c60cccc7fad93d7f423a018135b9786bb3eb3 Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sat, 6 Jul 2024 23:17:31 +0300 Subject: [PATCH 2/7] Get rid of variable --- src/modules/processing/services/twitter.js | 23 ++++++++++------------ 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/modules/processing/services/twitter.js b/src/modules/processing/services/twitter.js index e102ccd69..2686165e6 100644 --- a/src/modules/processing/services/twitter.js +++ b/src/modules/processing/services/twitter.js @@ -159,18 +159,17 @@ export default async function({ id, index, toGif, dispatcher }) { case 0: return { error: 'ErrorNoVideosInTweet' }; case 1: - const mediaMetadata = { - duration: Math.round(media[0].video_info.duration_millis / 1000), - likes: baseTweet.favorite_count, - views: Number(tweetResult.views.count) - }; return { type: needsFixing(media[0]) ? "remux" : "normal", urls: bestQuality(media[0].video_info.variants), filename: `twitter_${id}.mp4`, audioFilename: `twitter_${id}_audio`, isGif: media[0].type === "animated_gif", - mediaMetadata + mediaMetadata: { + duration: Math.round(media[0].video_info.duration_millis / 1000), + likes: baseTweet.favorite_count, + views: Number(tweetResult.views.count) + } }; default: const picker = media.map((content, i) => { @@ -186,17 +185,15 @@ export default async function({ id, index, toGif, dispatcher }) { }) } - const mediaMetadata = { - duration: Math.round(content.video_info.duration_millis / 1000), - likes: baseTweet.favorite_count, - views: Number(tweetResult.views.count) - }; - return { type: 'video', url, thumb: content.media_url_https, - mediaMetadata + mediaMetadata: { + duration: Math.round(content.video_info.duration_millis / 1000), + likes: baseTweet.favorite_count, + views: Number(tweetResult.views.count) + } } }); return { picker }; From 92db295619aa59eaa2ec4dfd777ef1b77234d0ee Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sun, 7 Jul 2024 11:00:04 +0300 Subject: [PATCH 3/7] Added title to mediaMetadata, improved twitter mediaMetadata building --- src/modules/processing/services/twitter.js | 25 +++++++++++++--------- src/modules/processing/services/youtube.js | 3 ++- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/modules/processing/services/twitter.js b/src/modules/processing/services/twitter.js index 2686165e6..f0114c0a1 100644 --- a/src/modules/processing/services/twitter.js +++ b/src/modules/processing/services/twitter.js @@ -36,6 +36,17 @@ function bestQuality(arr) { .url } +function buildMediaMetadata(tweetResult, media){ + return { + duration: Math.round(media.video_info.duration_millis / 1000) || 0, + likes: tweetResult.legacy.favorite_count || 0, + views: Number(tweetResult.views.count) || 0, + title: (tweetResult.legacy && tweetResult.legacy.full_text && Array.isArray(tweetResult.legacy.display_text_range) && tweetResult.legacy.display_text_range[0] !== undefined && tweetResult.legacy.display_text_range[1] !== undefined) + ? tweetResult.legacy.full_text.substr(tweetResult.legacy.display_text_range[0], tweetResult.legacy.display_text_range[1] - tweetResult.legacy.display_text_range[0]) + : undefined + } +} + let _cachedToken; const getGuestToken = async (dispatcher, forceReload = false) => { if (_cachedToken && !forceReload) { @@ -154,6 +165,8 @@ export default async function({ id, index, toGif, dispatcher }) { media = [media[index]] } + console.log(tweetResult) + switch (media?.length) { case undefined: case 0: @@ -165,11 +178,7 @@ export default async function({ id, index, toGif, dispatcher }) { filename: `twitter_${id}.mp4`, audioFilename: `twitter_${id}_audio`, isGif: media[0].type === "animated_gif", - mediaMetadata: { - duration: Math.round(media[0].video_info.duration_millis / 1000), - likes: baseTweet.favorite_count, - views: Number(tweetResult.views.count) - } + mediaMetadata: buildMediaMetadata(tweetResult, media[0]) }; default: const picker = media.map((content, i) => { @@ -189,11 +198,7 @@ export default async function({ id, index, toGif, dispatcher }) { type: 'video', url, thumb: content.media_url_https, - mediaMetadata: { - duration: Math.round(content.video_info.duration_millis / 1000), - likes: baseTweet.favorite_count, - views: Number(tweetResult.views.count) - } + mediaMetadata: buildMediaMetadata(tweetResult, content) } }); return { picker }; diff --git a/src/modules/processing/services/youtube.js b/src/modules/processing/services/youtube.js index 616c57b6b..bb630dca2 100644 --- a/src/modules/processing/services/youtube.js +++ b/src/modules/processing/services/youtube.js @@ -221,7 +221,8 @@ export default async function(o) { const mediaMetadata = { duration: info.basic_info.duration, likes: info.basic_info.like_count, - views: info.basic_info.view_count + views: info.basic_info.view_count, + title: info.basic_info.title, }; if (match) { From 096066bc36a49d59e6c6a07ce13a9c1cc4324622 Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sun, 7 Jul 2024 11:04:23 +0300 Subject: [PATCH 4/7] Fix docs --- docs/api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api.md b/docs/api.md index ca484f2dc..3a4b0bf5f 100644 --- a/docs/api.md +++ b/docs/api.md @@ -43,7 +43,7 @@ Content-Type: application/json | `pickerType` | `string` | `various / images` | | `picker` | `array` | array of picker items | | `audio` | `string` | direct link to a file or a link to cobalt's live render | -| `mediaMetadata` | `object` | Supported only on YouTube and Twitter videos. Object, that contains values `duration` (duration of the video in seconds), `likes` and `views` | +| `mediaMetadata` | `object` | Supported only on YouTube and Twitter videos. Object, that contains values `duration` (duration of the video in seconds), `likes`, `views`, `title` | ### picker item variables item type: `object` From 12e1fa64972bf77e446eccdfb7f601e1d7a94ec6 Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sun, 7 Jul 2024 11:08:22 +0300 Subject: [PATCH 5/7] Fix docs spacing --- docs/api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api.md b/docs/api.md index 3a4b0bf5f..2b23e2c25 100644 --- a/docs/api.md +++ b/docs/api.md @@ -35,8 +35,8 @@ Content-Type: application/json | `tiktokH265` | `boolean` | `true / false` | `false` | changes whether 1080p h265 videos are preferred or not. | ### response body variables -| key | type | variables | -|:-------------|:---------|:------------------------------------------------------------| +| key | type | variables | +|:----------------|:---------|:------------------------------------------------------------| | `status` | `string` | `error / redirect / stream / success / rate-limit / picker` | | `text` | `string` | various text, mostly used for errors | | `url` | `string` | direct link to a file or a link to cobalt's live render | From ef6bf10e9234222e0eea2d9ae0a57a50e4bfbddd Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sun, 7 Jul 2024 11:09:22 +0300 Subject: [PATCH 6/7] Remove console.log --- src/modules/processing/services/twitter.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/modules/processing/services/twitter.js b/src/modules/processing/services/twitter.js index f0114c0a1..5add46200 100644 --- a/src/modules/processing/services/twitter.js +++ b/src/modules/processing/services/twitter.js @@ -165,8 +165,6 @@ export default async function({ id, index, toGif, dispatcher }) { media = [media[index]] } - console.log(tweetResult) - switch (media?.length) { case undefined: case 0: From 29ee3a6e7e77b2a43bf1e2198af5f8212ac7fe04 Mon Sep 17 00:00:00 2001 From: Aleksei Kolchanov Date: Sun, 7 Jul 2024 13:41:53 +0300 Subject: [PATCH 7/7] Added support of VK for mediaMetadata --- src/modules/processing/services/vk.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/processing/services/vk.js b/src/modules/processing/services/vk.js index e95f12bec..fbc6fef27 100644 --- a/src/modules/processing/services/vk.js +++ b/src/modules/processing/services/vk.js @@ -49,6 +49,12 @@ export default async function(o) { resolution: `${quality}p`, qualityLabel: `${quality}p`, extension: "mp4" + }, + mediaMetadata: { + duration: js.player.params[0].duration, + likes: js.mvData.likes, + views: js.videoModalInfoData.views, + title: js.mvData.title } } return { error: 'ErrorEmptyDownload' }