From 6a61a63522259b24c422220e073a9f0577a2227b Mon Sep 17 00:00:00 2001 From: veralex Date: Tue, 11 Apr 2023 17:11:02 +0300 Subject: [PATCH] feat: added get videos to functions Signed-off-by: veralex feat: added get videos to functions --- assets/js/community-videos.js | 15 ++++++++++++--- assets/js/videos.js | 28 ++++++++++++++++++++-------- functions/youtube-bypass.js | 15 +++++++++++---- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/assets/js/community-videos.js b/assets/js/community-videos.js index 08367a591..e91e6ba48 100644 --- a/assets/js/community-videos.js +++ b/assets/js/community-videos.js @@ -26,18 +26,27 @@ import { format } from "date-fns"; }` ); const data = await response.json(); + + const videoIds = data.map( + ({ resourceId: { videoId } }) => videoId + ); + const videosResponse = await fetch( + `/.netlify/functions/youtube-bypass?type=videos&id=${videoIds.join( + "," + )}` + ); + const videos = await videosResponse.json(); const el = document.getElementById(playlist_id); - const items = data - .map(({ resourceId: { videoId: id }, title, publishedAt, thumbnails }) => { + .map(({ resourceId: { videoId: id }, title, publishedAt, thumbnails }, i) => { let tpl = template.replace("%img_src%", thumbnails?.standard?.url); tpl = tpl.replaceAll("%id%", id); tpl = tpl.replace("%title%", title); tpl = tpl.replace( "%published%", - format(new Date(publishedAt), "MMM dd, yyyy") + format(new Date(videos[i].publishedAt), "MMM dd, yyyy") ); return tpl.trim(); }) diff --git a/assets/js/videos.js b/assets/js/videos.js index cb93dca7b..d0994b0ff 100644 --- a/assets/js/videos.js +++ b/assets/js/videos.js @@ -24,15 +24,27 @@ async function handler() { return; } - data.map((videos, i) => { + data.map(async (playlistItems, i) => { + const videoIds = playlistItems.map( + ({ resourceId: { videoId } }) => videoId + ); + const response = await fetch( + `/.netlify/functions/youtube-bypass?type=videos&id=${videoIds.join( + "," + )}` + ); + const videos = await response.json(); + const el = document.getElementById(ids[i].id); - const items = videos.map( - ({ - resourceId: { videoId: id }, - description, - title, - publishedAt: published, - }) => replace(template, { id, description, title, published }) + + const items = playlistItems.map( + ({ resourceId: { videoId: id }, description, title }, i) => + replace(template, { + id, + description, + title, + published: videos[i].publishedAt, + }) ); el.innerHTML = items.join(); }); diff --git a/functions/youtube-bypass.js b/functions/youtube-bypass.js index 090427778..2cd86183d 100755 --- a/functions/youtube-bypass.js +++ b/functions/youtube-bypass.js @@ -6,10 +6,17 @@ const mapToReponse = (response) => response.items.map(({ snippet }) => snippet); exports.handler = async ({ queryStringParameters }, context) => { try { - const { id, take } = queryStringParameters; - const url = `${API_URL}/playlistItems?part=snippet&playlistId=${id}&maxResults=${ - take || 1 - }&key=${process.env.YOUTUBE_API_KEY}`; + const { id, take, type } = queryStringParameters; + let url; + switch (type) { + case "videos": + url = `${API_URL}/videos?key=${process.env.YOUTUBE_API_KEY}&part=snippet&id=${id}`; + break; + default: // playlist is default + url = `${API_URL}/playlistItems?key=${process.env.YOUTUBE_API_KEY}&part=snippet&playlistId=${id}&maxResults=${take || 1}`; + break; + } + const response = await fetch(url); const json = await response.json();