use nokogiri for rss, return better results, index for speed

This commit is contained in:
Kyle Drake 2024-01-20 18:32:18 -06:00
parent 7788437c33
commit fd15fd6856
5 changed files with 32 additions and 22 deletions

View file

@ -52,7 +52,6 @@ gem 'facter', require: nil
gem 'maxmind-db'
gem 'json', '>= 2.3.0'
gem 'nokogiri'
gem 'rss'
gem 'webp-ffi'
gem 'rszr'
gem 'zip_tricks'

View file

@ -254,8 +254,6 @@ GEM
netrc (~> 0.8)
rexml (3.2.6)
rinku (2.0.6)
rss (0.3.0)
rexml
rszr (1.3.0)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
@ -403,7 +401,6 @@ DEPENDENCIES
redis-namespace
rest-client
rinku
rss
rszr
rubyzip
sanitize

View file

@ -2,7 +2,7 @@ get '/site/:username.rss' do |username|
site = Site[username: username]
halt 404 if site.nil?
content_type :xml
site.to_rss.to_xml
site.to_rss
end
get '/site/:username/?' do |username|
@ -374,4 +374,4 @@ post '/site/:username/confirm_phone' do
# Will redirect to / automagically if phone was verified
redirect "/site/#{current_site.username}/confirm_phone"
end
end

View file

@ -0,0 +1,9 @@
Sequel.migration do
up {
DB.add_index :events, [:created_at, :site_id, :site_change_id, :is_deleted], name: :events_rss_index, order: {created_at: :desc}
}
down {
DB.drop_index :events, :rss
}
end

View file

@ -1,6 +1,5 @@
# frozen_string_literal: true
require 'tilt'
require 'rss'
require 'nokogiri'
require 'pathname'
require 'zlib'
@ -1526,24 +1525,30 @@ class Site < Sequel::Model
end
def to_rss
RSS::Maker.make("2.0") do |m|
m.channel.title = title
m.channel.link = uri
m.channel.description = "Site feed for #{title}"
m.image.url = sharing_screenshot_url
m.image.title = title
site_change_events = events_dataset.exclude(is_deleted: true).exclude(site_change_id: nil).order(:created_at.desc).limit(10).all
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
xml.rss('version' => '2.0') {
xml.channel {
xml.title title
xml.link uri
xml.description "Site feed for #{title}"
xml.image {
xml.url sharing_screenshot_url
xml.title title
}
latest_events.each do |event|
if event.site_change_id
m.items.new_item do |i|
i.title = "#{title} has been updated."
i.link = "https://neocities.org/site/#{username}?event_id=#{event.id.to_s}"
i.pubDate = event.created_at
site_change_events.each do |event|
xml.item {
xml.title "#{title} has been updated."
xml.link "https://neocities.org/site/#{username}?event_id=#{event.id.to_s}"
xml.pubDate event.created_at.rfc822
xml.guid event.id.to_s
}
end
end
end
end
}
}
end.to_xml
end
def empty_index?