Rubyプログラムを書いてみる。

NO IMAGE

さて、4時か。ワールドカップ、コロンビア戦まであと1時間。ブログ書いて寝ると、見逃す可能性ありだな…。

こんな時間に何をやっていたかというと、Rubyのプログラムを書いていました。けっこう前から、旦那さまから「作りたいと思っててなかなか作れてないんだけど、ニュースのRSSの差分をメールしてくれるプログラム書いてよ(最近、ITからご無沙汰でしょ?勉強になるだろうし)。」という課題を頂いておりました。本当に、会社を辞めてから、ほぼITの利用者もしくはUI翻訳者としか生きていなくて、自分から積極的にITに関わることがめっきり少なくなっていたので、なんかやりたいな…と思いつつ、「で、何すればいいのかしらん?」状態だったので、こういう課題が頂けるのは有難く、ちょっと前からRubyをインストールしたり、自宅メールサーバの設定をしていたり、簡単なRubyプログラムを書いていたりしました。

今日は、その書きかけのRubyプログラムを少し完成に近づけるべく、色々調べものをしたり、プログラムを追記したり。

とりあえず、RSSをRubyで取得するところまではできていたけれど、RSSの要素の取り出しができていなくて、且つ、そもそもどのRSSの要素を取り出すべきなのかも決まっていなかったので、まずは、一般的なニュースサイトと思われるYahoo!JAPANとGoogleのニュースRSSを比較してみようと思いました。しかし、Yahoo!JAPANのRSSは比較的簡単に見つかったけど、Googleのほうは見つからないなぁと思って調べたら、とあるサイトを見て、こんな形式で提供されていると知りました。

http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss

複雑なRSSのURL…。しかも、個人サイトで知ったし。公式サイトではどうしてもっと分かりやすくこのURL書いてくれてなかったんだろう…と思いましたが、とりあえずRubyでこのURLでRSSを取得できたので、細かいことはいいとして、Yahoo!JAPANとGoogleのニュースRSSを比較。なんで比較してるかって、「何がRSSで必須の要素なのか」を知って、「差分をメールするための項目としてはどの要素を抜き出すのが適切か」を考えるためです。

で、比較してみて、とりあえず「title」と「link」要素を抜き出してみるのがよさそうだったけど、しかし、この2つの要素はどのRSSでも入っているのだろうか?ということが気になって、RSSの必須の要素ってなんだろう?と思いまして、さらに調べてみまして、RSS2.0の仕様に以下の1文があることを発見。

Elements of item
:
All elements of an item are optional, however at least one of title or description must be present.
(「item」の全ての要素はオプションです。ただし、少なくとも「title」もしくは「discription」は存在している必要があります。)

なるほどなるほど…。要素のtitleかdiscriptionどちらかは必ず入ってるものなんですな。じゃ、とりあえず、titleを抜き出せばいっか。Yahoo!JAPANにもGoogleにも入ってたしな。もともとtitleは抜き出したいと思ってたし。

というわけで、結局titleとlink要素を取得して、メールを送信するプログラムを作ることにしまして、立ち上げたTera Termでrubyプログラムをviエディタで作成すること、1時間くらいか。というか、久しぶりにviエディタ使ったけど、まだなんとか使えてよかった。ちなみに、作業ウィンドウはこんな感じ(クリックすると拡大表示)。

teraterm

 それで、やっとRSSのタイトルとリンクをメールするところまで、作ることができました。こんなプログラム。

require ‘rss’
require ‘net/smtp’

#url = ‘http://rss.dailynews.yahoo.co.jp/fc/rss.xml’
url = ‘http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss’
mlsv = ‘localhost’
fmad = ‘xxxx@localhost’
toad = ‘xxxx@localhost’

rss = RSS::Parser.parse(url)

File.open(“./maildata.txt”,”a”) do |file|
rss.channel.items.each do |item|
file.puts (item.title)
file.puts (item.link)
end
end

Net::SMTP.start(mlsv, 25) {|smtp|
File.open(‘./maildata.txt’) {|f|
smtp.send_message f, fmad, toad
}
}

Rubyのリファレンスマニュアルも読みつつ、ウェブでサンプルコードを色々見つけてつなぎ合わせたプログラムであります。これから、あとはRSSの差分を抜き出すロジックのコードを入れて、旦那さまご要望のRSSチェック間隔を指定できたりするようにして、プログラムを完成に近づけていきたいところ。

と、ここまで書いてみて、今日の投稿は興味がある人は少ないだろうなぁって思いました…。それでもなんで書いたかっていうと、自分が「IT面白い面白い」って言ってるけど、結局何が面白いわけ?っていうのが、どうもうまく説明できなくて、自分でも「自分はITの何が面白いんだろう?」って思うときあって、まずはITに対してもう少し積極的に動いてみて、動いた内容をブログにしてみようと思ったからでした。今日のプログラミング作業が面白かったかというと、ウェブのサンプルコードをつなぎあわせただけみたいなプログラムなのでそんなに頭は使っていないけれど、それでも、RSSのデータ構造を理解したりとか、取得したRSSデータをどうやってメール送信のコードに組み込むかなど、ちょっと頭を使うところもあったので、集中してできました(集中できたってことはある程度面白かったってことだと思う)。

ITの何が面白いって。そこには何か「こうしたい」って目的があって、それを実現するために頭をひねる…ひねって、自分なりの答えを導き出す…とこが面白いのかなぁ…

うーん、イマイチ、自分でも自分が言っている「ITは面白い」っていうのがなんなのか分かりませんが、こうやってたまにブログに勉強したこととかアップしてみるかも。でも、興味がない人も多そうだし、もしかしたら別ブログ立ち上げてそっちに書くかも。

さて、4:45か。あと15分でワールドカップか~~。どうしよう、寝たいような寝たくないような(笑)

P.S. 昨日は庭に植えていた朝顔がとてもきれいに咲いてくれていて嬉しかったです♪

00260625-023923-9563265.jpg

そして、昨日は雷を伴う雨が降ったわけですが、マンション内の屋外スペースで娘は雨を楽しんでいました。レインコートがまだ買えてなくて、頭と服を濡らしながら。娘は、水が大好き。昨日も雨を全身に浴びて楽しそうでありました。

00260625-023924-9564169.jpg