diff options
| author | Omar Roth <omarroth@hotmail.com> | 2018-09-17 18:13:24 -0500 |
|---|---|---|
| committer | Omar Roth <omarroth@hotmail.com> | 2018-09-17 18:13:24 -0500 |
| commit | bd5ec2f2f3ed2852978d216c1ea9a10554544d7d (patch) | |
| tree | 98a4ba84e032243dcc65c79cb7f9cf33b92e1547 | |
| parent | 296771809a73f6dec1fbe86c58106f06097299c8 (diff) | |
| download | invidious-bd5ec2f2f3ed2852978d216c1ea9a10554544d7d.tar.gz invidious-bd5ec2f2f3ed2852978d216c1ea9a10554544d7d.tar.bz2 invidious-bd5ec2f2f3ed2852978d216c1ea9a10554544d7d.zip | |
Add playlist RSS
| -rw-r--r-- | src/invidious.cr | 32 | ||||
| -rw-r--r-- | src/invidious/views/playlist.ecr | 5 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/invidious.cr b/src/invidious.cr index 3286f3ae..d1509437 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -1618,6 +1618,38 @@ get "/feed/private" do |env| feed end +get "/feed/playlist/:plid" do |env| + plid = env.params.url["plid"] + + host_url = make_host_url(Kemal.config.ssl || CONFIG.https_only, env.request.headers["Host"]?) + path = env.request.path + + client = make_client(YT_URL) + response = client.get("/feeds/videos.xml?playlist_id=#{plid}") + document = XML.parse(response.body) + + document.xpath_nodes(%q(//*[@href]|//*[@url])).each do |node| + node.attributes.each do |attribute| + case attribute.name + when "url" + node["url"] = "#{host_url}#{URI.parse(node["url"]).full_path}" + when "href" + node["href"] = "#{host_url}#{URI.parse(node["href"]).full_path}" + end + end + end + + document = document.to_xml(options: XML::SaveOptions::NO_DECL) + + document.scan(/<uri>(?<url>[^<]+)<\/uri>/).each do |match| + content = "#{host_url}#{URI.parse(match["url"]).full_path}" + document = document.gsub(match[0], "<uri>#{content}</uri>") + end + + env.response.content_type = "text/xml" + document +end + # Channels # YouTube appears to let users set a "brand" URL that diff --git a/src/invidious/views/playlist.ecr b/src/invidious/views/playlist.ecr index 4e93fc6f..56ad79f3 100644 --- a/src/invidious/views/playlist.ecr +++ b/src/invidious/views/playlist.ecr @@ -6,6 +6,11 @@ <div class="pure-u-2-3"> <h3><%= playlist.title %></h3> </div> + <div class="pure-u-1-3" style="text-align:right;"> + <h3> + <a href="/feed/playlist/<%= plid %>"><i class="icon ion-logo-rss"></i></a> + </h3> + </div> </div> <div class="pure-g h-box"> <div class="pure-u-1 pure-u-md-1-4"> |
