diff --git a/lib/routes/youtube/playlist.js b/lib/routes/youtube/playlist.js index f96b5d04d..4ec7c8932 100644 --- a/lib/routes/youtube/playlist.js +++ b/lib/routes/youtube/playlist.js @@ -10,25 +10,26 @@ module.exports = async (ctx) => { const playlistTitle = (await utils.getPlaylist(id, 'snippet', ctx.cache)).data.items[0].snippet.title; - const data = (await utils.getPlaylistItems(id, 'snippet,contentDetails')).data.items; + const data = (await utils.getPlaylistItems(id, 'snippet')).data.items.filter((d) => d.snippet.title !== 'Private video' && d.snippet.title !== 'Deleted video'); + const ids = data.map((item) => item.snippet.resourceId.videoId).join(','); + const authors = (await utils.getVideoAuthor(ids, 'snippet')).data.items; ctx.state.data = { title: `Playlist: ${playlistTitle} by ${data[0].snippet.channelTitle}`, link: `https://www.youtube.com/playlist?list=${id}`, description: `Playlist: ${playlistTitle} by ${data[0].snippet.channelTitle}`, - item: data - .filter((d) => d.snippet.title !== 'Private video' && d.snippet.title !== 'Deleted video') - .map((item) => { - const snippet = item.snippet; - const videoId = snippet.resourceId.videoId; - const img = utils.getThumbnail(snippet.thumbnails); - return { - title: snippet.title, - description: `${embed ? '' : ''} + item: data.map((item, index) => { + const snippet = item.snippet; + const videoId = snippet.resourceId.videoId; + const img = utils.getThumbnail(snippet.thumbnails); + return { + title: snippet.title, + description: `${embed ? '' : ''} ${utils.formatDescription(snippet.description)}`, - pubDate: new Date(snippet.publishedAt).toUTCString(), - link: `https://www.youtube.com/watch?v=${videoId}`, - }; - }), + pubDate: new Date(snippet.publishedAt).toUTCString(), + link: `https://www.youtube.com/watch?v=${videoId}`, + author: authors[index].snippet.channelTitle, + }; + }), }; }; diff --git a/lib/routes/youtube/utils.js b/lib/routes/youtube/utils.js index e1bfe5b46..f642e8ed6 100644 --- a/lib/routes/youtube/utils.js +++ b/lib/routes/youtube/utils.js @@ -78,6 +78,16 @@ const youtubeUtils = { ); return res; }), + getVideoAuthor: async (id, part) => { + const res = await exec( + async (youtube) => + await youtube.videos.list({ + part, + id, + }) + ); + return res; + }, getThumbnail: (thumbnails) => thumbnails.maxres || thumbnails.standard || thumbnails.high || thumbnails.medium || thumbnails.default, formatDescription: (description) => description.replace(/(?:\r\n|\r|\n)/g, '
'), };