mirror of
https://github.com/TeamPiped/Piped-Backend.git
synced 2024-12-13 22:00:29 +05:30
Add support for Piped playlists in RSS.
This commit is contained in:
parent
3d6aefdd0e
commit
1135e20c3d
@ -373,7 +373,58 @@ public class ResponseHelper {
|
||||
|
||||
}
|
||||
|
||||
public static byte[] playlistRSSResponse(String playlistId)
|
||||
public static byte[] playlistRSSResponse(String playlistId) throws ExtractionException, IOException, FeedException {
|
||||
|
||||
if (StringUtils.isBlank(playlistId))
|
||||
return Constants.mapper.writeValueAsBytes(new InvalidRequestResponse());
|
||||
|
||||
if (playlistId.matches("[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"))
|
||||
return playlistPipedRSSResponse(playlistId);
|
||||
|
||||
return playlistYouTubeRSSResponse(playlistId);
|
||||
}
|
||||
|
||||
private static byte[] playlistPipedRSSResponse(String playlistId)
|
||||
throws FeedException {
|
||||
|
||||
try (Session s = DatabaseSessionFactory.createSession()) {
|
||||
var cb = s.getCriteriaBuilder();
|
||||
var cq = cb.createQuery(me.kavin.piped.utils.obj.db.Playlist.class);
|
||||
var root = cq.from(me.kavin.piped.utils.obj.db.Playlist.class);
|
||||
root.fetch("videos")
|
||||
.fetch("channel", JoinType.LEFT);
|
||||
root.fetch("owner", JoinType.LEFT);
|
||||
cq.select(root);
|
||||
cq.where(cb.equal(root.get("playlist_id"), UUID.fromString(playlistId)));
|
||||
var query = s.createQuery(cq);
|
||||
var pl = query.uniqueResult();
|
||||
|
||||
final List<SyndEntry> entries = new ObjectArrayList<>();
|
||||
|
||||
SyndFeed feed = new SyndFeedImpl();
|
||||
feed.setFeedType("rss_2.0");
|
||||
feed.setTitle(pl.getName());
|
||||
feed.setAuthor(pl.getOwner().getUsername());
|
||||
feed.setDescription(String.format("%s - Piped", pl.getName()));
|
||||
feed.setLink(Constants.FRONTEND_URL + "/playlist?list=" + pl.getPlaylistId());
|
||||
feed.setPublishedDate(new Date());
|
||||
|
||||
for (var video : pl.getVideos()) {
|
||||
SyndEntry entry = new SyndEntryImpl();
|
||||
entry.setAuthor(video.getChannel().getUploader());
|
||||
entry.setLink(Constants.FRONTEND_URL + "/video?id=" + video.getId());
|
||||
entry.setUri(Constants.FRONTEND_URL + "/video?id=" + video.getId());
|
||||
entry.setTitle(video.getTitle());
|
||||
entries.add(entry);
|
||||
}
|
||||
|
||||
feed.setEntries(entries);
|
||||
|
||||
return new SyndFeedOutput().outputString(feed).getBytes(UTF_8);
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] playlistYouTubeRSSResponse(String playlistId)
|
||||
throws IOException, ExtractionException, FeedException {
|
||||
|
||||
final PlaylistInfo info = PlaylistInfo.getInfo("https://www.youtube.com/playlist?list=" + playlistId);
|
||||
|
Loading…
Reference in New Issue
Block a user