The following ruby (jruby) and sql code will get the Announcements from RenWeb and create an RSS feed file from them. The scripts needs the JDBC ActiveRecord gem. If you have any questions on how to run this script, please write a comment below. Both files are released under the MIT license.
main.rb:
require 'rss/maker'
require 'cgi'
require 'rubygems'
gem 'activerecord-jdbc-adapter'
require 'jdbc_adapter'
class AnnouncementsDistrict < ActiveRecord::Base
AnnouncementsDistrict.establish_connection(
:adapter => :jdbc,
:username => "YOUR ODBC USERNAME",
:password => "YOUR ODBC PASSWORD",
:driver => "com.microsoft.sqlserver.jdbc.SQLServerDriver",
:url => "jdbc:sqlserver://THE URL TO CONNECT;DatabaseName=YOUR DATABASE NAME")
set_table_name("AnnouncementsDistrict")
#Gets an sql query from a file
def self.get_sql_query_from_file(filename, params_hash_for_sql_query = nil)
fi = File.open(filename)
sql_query = fi.read
if params_hash_for_sql_query != nil
params_hash_for_sql_query.each do |key, value|
sql_query = sql_query.gsub("$P!{#{key.to_s}}", value.to_s)
end
end
fi.close
return sql_query
end
def self.get_announcements
announcements = self.find_by_sql(get_sql_query_from_file("parents_web_announcements.sql"))
end
end
version = "2.0" # ["0.9", "1.0", "2.0"]
destination = "news.xml" # local file to write
announcements = AnnouncementsDistrict.get_announcements()
content = RSS::Maker.make(version) do |m|
m.channel.title = "School News"
m.channel.link = "http://www.yourlink.com"
m.channel.description = "School News RSS"
m.items.do_sort = true # sort items by date
announcements.each do |item|
i = m.items.new_item
i.title = item.Title
i.link = "http://www.yourlink.com"
#replace new lines with html's
and then html escape the whole message
i.description = item.Message.to_s.gsub("\n","<br/>")
i.date = item.BeginDate
end
end
File.open(destination,"w") do |f|
f.write(content)
end
parents_web_announcements.sql:
SELECT
AnnouncementID,
Title,
SchoolCode,
Message,
BeginDate,
EndDate
FROM
AnnouncementsDistrict
where
AnnouncementsDistrict."Public" = 1 and EndDate >= GetDate()
order by
BeginDate,
AnnouncementID
Put both files in the same folder and run it as "jruby main.rb". Alternatively, you can use NetBeans to run it and/or edit it.
Comments