journalduhacker/script/update_weblogs
joshua stein 85cb7c2057 first stab at planet rss aggregation
could probably use a prettier layout and auto-posting a weblog url
to the main site (carrying tags)
2014-08-03 22:07:57 -05:00

59 lines
1.5 KiB
Ruby
Executable file

#!/usr/bin/env ruby
ENV["RAILS_ENV"] ||= "production"
APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
require APP_PATH
Rails.application.require_environment!
require "feed-normalizer"
User.where("weblog_feed_url <> ''").each do |u|
begin
s = Sponge.new
data = s.fetch(u.weblog_feed_url, :get, nil, nil, {
"User-Agent" => "Mozilla/5.0 (compatible; Planet Lobsters; " <<
"https://#{Rails.application.domain}/)" })
if !data
raise "no data returned"
end
feed = FeedNormalizer::FeedNormalizer.parse(data)
if !feed
raise "could not parse feed"
end
rescue => e
puts "error updating user #{u.id} from #{u.weblog_feed_url}: #{e}"
# TODO: send the user a private message on failure, probably limit to every
# x tries/days
next
end
feed.entries.each do |e|
w = u.weblogs.where(:uuid => e.id).first
if !w
w = u.weblogs.build(:uuid => e.id)
end
# prevent entries with bogus or future times from dominating the front page
if e.last_updated > Time.now
puts "skipping future entry #{e.id} with time #{e.last_updated}"
next
end
# TODO: compare these manually, AR seems to always mark them dirty even if
# the content is the same
w.created_at = e.last_updated
w.url = e.url
w.title = e.title
w.content = e.content
w.tags = e.categories
w.site_url = feed.url
w.site_title = feed.title
w.save
end
end