diff --git a/app.rb b/app.rb index ca62f89f..22a806b8 100644 --- a/app.rb +++ b/app.rb @@ -75,6 +75,12 @@ get '/profile_mockup' do erb :'profile_mockup', locals: {site: current_site} end +get '/site/:sitename.rss' do |sitename| + site = Site[username: sitename] + content_type :xml + site.to_rss.to_xml +end + get '/site/:sitename' do |sitename| site = Site[username: sitename] not_found if(site.nil?) diff --git a/models/site.rb b/models/site.rb index 63bfbe54..de31be98 100644 --- a/models/site.rb +++ b/models/site.rb @@ -1,4 +1,5 @@ require 'tilt' +require 'rss' class Site < Sequel::Model include Sequel::ParanoidDelete @@ -456,7 +457,7 @@ class Site < Sequel::Model end def title - values[:title] || values[:username] + values[:title] || "#{values[:username]}.neocities.org" end def hits_english @@ -510,4 +511,23 @@ class Site < Sequel::Model ext = File.extname(filename).gsub('.', '').match(LOSSY_IMAGE_REGEX) ? 'jpg' : 'png' "#{THUMBNAILS_URL_ROOT}/#{values[:username]}/#{filename}.#{resolution}.#{ext}" end + + def to_rss + RSS::Maker.make("atom") do |maker| + maker.channel.title = title + maker.channel.updated = updated_at + maker.channel.author = username + maker.channel.id = "#{username}.neocities.org" + + latest_events.each do |event| + if event.site_change_id + maker.items.new_item do |item| + item.link = "http://#{username}.neocities.org" + item.title = "#{username}.neocities.org has been updated" + item.updated = event.site_change.created_at + end + end + end + end + end end diff --git a/views/site.erb b/views/site.erb index 5afa75ca..d01aa918 100644 --- a/views/site.erb +++ b/views/site.erb @@ -29,6 +29,9 @@ <% end %>