2009/02/27

IT勉強会カレンダーの内容を1ヶ月分と1週間分にまとめてBlog投稿

前回の北海道開発オフで@ITWSCALを作ったのだけど、当日分の勉強会開催情報しか配信されないので、事前に数日後の勉強会をチェックするのには使えない。そこで、IT勉強会カレンダーの内容を1ヶ月分及び1週間分としてBlogに投稿するスクリプトを作った。基本的には、自分でRSSで読めたら便利かなぁ、というだけです。

IT勉強会カレンダーの二次利用については、運営されているはなずきん♪さんのこちらを参照。大変な運用をされている、はなずきん♪さんに感謝と賛辞を。

投稿されるBlogはhttp://itwscal.smokeymonkey.net/。ソースは以下。


#! /usr/bin/ruby -Ku

require 'open-uri'
require 'date'
require 'rexml/document'
require 'kconv'
require 'net/smtp'

begin

fday = Date.today.to_s
array = Date.today.to_s.split("-")
day = Date.new(array[0].to_i,array[1].to_i+1,1)
lday = day.to_s

uri="http://www.google.com/calendar/feeds/fvijvohm91uifvd9hratehf65k%40group.calendar.google.com/public/basic?orderby=starttime&max-results=10000&start-min=" + fday + "&start-max=" + lday
xml = open(uri).read
eventlist=Array.new
cntlist=Array.new

REXML::Document.new(xml).root.elements.each("entry") do |elm|
cnt = elm.elements['content'].text.to_s
cnt.gsub!(/\n/,"")
cnt.gsub!(/
/,",")
cnt.gsub!(/,+/,",")
eventlist << [elm.elements['title'].text.to_s,cnt]
end

day = day - 1
sfile = open("send.txt",'w')
sfile.puts "From:FROMADDRESS\n"
sfile.puts "To:TOADDRESS\n"
subject = "Monthly Event: " + fday + "-" + day.to_s + "\n"
sfile.puts "Subject:" + subject
sfile.puts "Mime-Version: 1.0\n"
sfile.puts "Content-Type: text/plain; charset=\"utf8\"\n"
sfile.puts "Content-Transfer-Encoding: 8bit\n"

eventlist.reverse_each do |event|
sfile.puts "\n"
sfile.puts "●" + event[0]
event[1].split(",").each do |data|
edata = Kconv.kconv(data,Kconv::UTF8)
sfile.puts edata
end
end
sfile.close

Net::SMTP.start('localhost',25) {|smtp|
File.open('send.txt','r') {|f|
smtp.send_mail f, 'FROMADDRESS', 'TOADDRESS'
}
}
rescue
print "RuntimeError: ", $!, "\n";
end