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, '
'),
};