自分のサイトの情報をRSS配信したくていろいろやってみようと調べていたらRSSって結構面白そうなので例によってちょっと実験してみます。
第1段階は頻繁に更新されて有益な地震情報のRSS配信、livedoor地震速報のRSSを読み込んでWEBページで表示してみるというものです。
URIはhttp://weather.livedoor.com/forecast/rss/earthquake.xmlです。(クリックすると表示されます。
中身は↓。途中のデータは省略しています。
<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:ldWeather="http://weather.livedoor.com/ns/rss/2.0"> <channel> <title>地震速報 - livedoor 天気情報</title> <link>http://weather.livedoor.com/earthquake/?r=rss</link> <description>livedoor 天気情報が配信する全国の地震速報</description> <lastBuildDate>Thu, 21 Aug 2008 12:34:16 +0900</lastBuildDate> <author>livedoor Weather Team.</author> <language>ja</language> <category>天気情報</category> <generator>http://weather.livedoor.com/</generator> <copyright>Copyright (C) 1996-2008 livedoor Co.,Ltd. All rights reserved.</copyright> <image> <title>livedoor 天気情報</title> <link>http://weather.livedoor.com</link> <url>http://image.weather.livedoor.com/img/cmn/livedoor.gif</url> <width>118</width> <height>26</height> </image> <ldWeather:provider name="(株)ハレックス" link="http://www.halex.co.jp/halexbrain/weather/" /> <ldWeather:provider name="日本気象協会" link="http://tenki.jp/" /> <ldWeather:notes link="http://weather.livedoor.com/weather_hacks/forum.html">livedoor 天気情報 Weather Hacks での疑問点などは http://weather.livedoor.com/weather_hacks/forum.html で質問してみましょう!</ldWeather:notes> <item> <title>[ PR ] ブログでお天気を簡単ゲット!</title> <link>http://weather.livedoor.com/weather_hacks/plugin.html</link> <category>PR</category> <description> livedoor 天気情報「Weather Hacks」では一般のブロガーの皆さん向けにブログでお天気を表示できる、お天気プラグインを公開しました。使い方はとってもカンタン!手順に沿って作成したHTMLソースを自分のブログに貼り付けるだけです! </description> <image> <title>お天気プラグイン - livedoor 天気情報</title> <link>http://weather.livedoor.com/weather_hacks/plugin.html</link> <url>http://image.weather.livedoor.com/img/weather_hacks/news_title.gif</url> <width>151</width> <height>50</height> </image> <pubDate>Thu, 21 Aug 2008 00:00:00 +0900</pubDate> </item> <item> <title>21日12:29 [ 最大震度 ] 震度 1 [ 震源地 ] 釧路沖</title> <link>http://weather.livedoor.com/earthquake/2008-08-21-12-29.html?r=rss</link> <category>地震速報</category> <description>8月21日12時29分、釧路沖を震源とする最大震度1の地震が発生しました。</description> <ldWeather:earthquake epicenter="釧路沖" maximumintensity="1" date="Thu, 21 Aug 2008 12:29:00 +0900" /> <day>Thursday</day> <pubDate>Thu, 21 Aug 2008 12:34:16 +0900</pubDate> </item> <item> <title>21日11:29 [ 最大震度 ] 震度 1 [ 震源地 ] 八丈島東方沖</title> <link>http://weather.livedoor.com/earthquake/2008-08-21-11-29.html?r=rss</link> <category>地震速報</category> <description>8月21日11時29分、八丈島東方沖を震源とする最大震度1の地震が発生しました。</description> <ldWeather:earthquake epicenter="八丈島東方沖" maximumintensity="1" date="Thu, 21 Aug 2008 11:29:00 +0900" /> <day>Thursday</day> <pubDate>Thu, 21 Aug 2008 11:34:27 +0900</pubDate> </item> <item> <title>06日13:04 [ 最大震度 ] 震度 2 [ 震源地 ] 宮城県北部</title> <link>http://weather.livedoor.com/earthquake/2008-08-06-13-04.html?r=rss</link> <category>地震速報</category> <description>8月6日13時4分、宮城県北部を震源とする最大震度2の地震が発生しました。</description> <ldWeather:earthquake epicenter="宮城県北部" maximumintensity="2" date="Wed, 06 Aug 2008 13:04:00 +0900" /> <day>Wednesday</day> <pubDate>Wed, 06 Aug 2008 13:10:14 +0900</pubDate> </item> </channel> </rss>
PRとかも入っていて複雑そうですが調べてみると結構簡単です。
RSS 1.0は複雑らしいがRSS2.0はこんな感じです。
channel内のitem要素がひとつの地震を表している。PRもあるけどitem要素のcategoryが「地震速報」のものだけ処理すればOKっぽい。
地震の情報はldWeather:earthquakeからもらえば良さそう。
RSSを処理するのにいろいろと使えそうなライブラリがあるのだけれど今回はRubyに標準添付されているrexmlを使用することにしました。
まずは端末で動かそう。REXML Tutorial - Homeを見ながらソースコードを書いてみました。こんな感じです。FedoraはUTF-8なのであまり気にせずにコーディングするだけで動きました。
require 'open-uri' require 'rexml/document' if $0 == __FILE__ # LiveDoorさんのRSSのURI EARTHQUAKE_URI = "http://weather.livedoor.com/forecast/rss/earthquake.xml" # REXML doc = REXML::Document.new open(EARTHQUAKE_URI) c = 0 # ldWeather:earthquakeについて処理を行う doc.elements.each("/rss/channel/item/ldWeather:earthquake") do |quake| c += 1 print <<"EOT" #{c} #{quake.attributes["date"]} #{quake.attributes["maximumintensity"]} #{quake.attributes["epicenter"]} EOT end end
実行結果↓。途中省略しています。
1
Thu, 21 Aug 2008 17:48:00 +0900
2
京都府南部
2
Thu, 21 Aug 2008 12:29:00 +0900
1
釧路沖
途中省略
51
Wed, 06 Aug 2008 17:23:00 +0900
1
宮城県北部
上記をこのページで表示してみました。実行結果は↓
他のページに比べてこのページの表示に時間がかかるのはlivedoorのRSSを読みに行っているからと思われます。
震源が空白のデータは震源不明とのことです。
| No. | 日時 | 最大震度 | 震源 |
|---|---|---|---|
| 1 | Wed, 07 Jan 2009 18:31:00 +0900 | 1 | 浦河沖 |
| 2 | Wed, 07 Jan 2009 18:24:00 +0900 | 1 | |
| 3 | Wed, 07 Jan 2009 17:46:00 +0900 | 1 | 岩手県沖 |
| 4 | Wed, 07 Jan 2009 06:44:00 +0900 | 2 | 福島県沖 |
| 5 | Tue, 06 Jan 2009 19:59:00 +0900 | 1 | 新潟県中越地方 |
| 6 | Tue, 06 Jan 2009 12:37:00 +0900 | 2 | 石垣島近海 |
| 7 | Tue, 06 Jan 2009 08:53:00 +0900 | 1 | 福島県沖 |
| 8 | Mon, 05 Jan 2009 10:36:00 +0900 | 2 | 福島県沖 |
| 9 | Mon, 05 Jan 2009 06:18:00 +0900 | 1 | 奄美大島近海 |
| 10 | Mon, 05 Jan 2009 05:44:00 +0900 | 1 | 宮城県沖 |
| 11 | Sun, 04 Jan 2009 22:36:00 +0900 | 2 | 西表島付近 |
| 12 | Sun, 04 Jan 2009 16:12:00 +0900 | 1 | 山形県村山地方 |
| 13 | Sun, 04 Jan 2009 07:34:00 +0900 | ニューギニア付近 | |
| 14 | Sun, 04 Jan 2009 04:44:00 +0900 | ニューギニア付近 | |
| 15 | Sun, 04 Jan 2009 01:02:00 +0900 | 2 | 福島県沖 |
| 16 | Sat, 03 Jan 2009 17:58:00 +0900 | 1 | 愛媛県南予地方 |
| 17 | Sat, 03 Jan 2009 16:13:00 +0900 | 4 | 福島県沖 |
| 18 | Sat, 03 Jan 2009 08:10:00 +0900 | 1 | |
| 19 | Fri, 02 Jan 2009 16:43:00 +0900 | 1 | |
| 20 | Fri, 02 Jan 2009 07:15:00 +0900 | 2 | 新潟県中越地方 |
| 21 | Thu, 01 Jan 2009 14:02:00 +0900 | 1 | 福島県会津地方 |
| 22 | Thu, 01 Jan 2009 08:50:00 +0900 | 2 | 浦河沖 |
| 23 | Thu, 01 Jan 2009 06:55:00 +0900 | 1 | 茨城県南部 |
| 24 | Thu, 01 Jan 2009 01:59:00 +0900 | 1 | 沖縄本島近海 |
| 25 | Wed, 31 Dec 2008 22:54:00 +0900 | 1 | 富山湾 |
| 26 | Wed, 31 Dec 2008 20:04:00 +0900 | 1 | 三重県中部 |
| 27 | Wed, 31 Dec 2008 18:34:00 +0900 | 1 | 岐阜県飛騨地方 |
| 28 | Wed, 31 Dec 2008 00:48:00 +0900 | 2 | 千葉県東方沖 |
| 29 | Tue, 30 Dec 2008 23:52:00 +0900 | 1 | 十勝沖 |
| 30 | Tue, 30 Dec 2008 23:25:00 +0900 | 3 | 新潟県中越地方 |
| 31 | Tue, 30 Dec 2008 12:02:00 +0900 | 1 | |
| 32 | Tue, 30 Dec 2008 01:33:00 +0900 | 1 | 奄美大島近海 |
| 33 | Tue, 30 Dec 2008 00:58:00 +0900 | 1 | 奄美大島近海 |
| 34 | Mon, 29 Dec 2008 21:32:00 +0900 | 1 | 静岡県西部 |
| 35 | Mon, 29 Dec 2008 18:37:00 +0900 | 1 | 静岡県西部 |
| 36 | Mon, 29 Dec 2008 13:34:00 +0900 | 1 | 釧路支庁中南部 |
| 37 | Sun, 28 Dec 2008 15:21:00 +0900 | 3 | 宗谷支庁北部 |
| 38 | Sun, 28 Dec 2008 14:56:00 +0900 | 1 | 宮城県沖 |
| 39 | Sun, 28 Dec 2008 12:51:00 +0900 | 1 | 福井県嶺南地方 |
| 40 | Sun, 28 Dec 2008 11:41:00 +0900 | 2 | 新潟県中越地方 |
| 41 | Sun, 28 Dec 2008 08:42:00 +0900 | 1 | 宗谷支庁北部 |
| 42 | Sat, 27 Dec 2008 17:36:00 +0900 | 2 | 宗谷支庁北部 |
| 43 | Sat, 27 Dec 2008 16:05:00 +0900 | 1 | 十勝沖 |
| 44 | Fri, 26 Dec 2008 12:47:00 +0900 | 1 | 紀伊水道 |
| 45 | Fri, 26 Dec 2008 05:27:00 +0900 | 1 | 岩手県内陸南部 |
| 46 | Fri, 26 Dec 2008 02:21:00 +0900 | 1 | 紀伊水道 |
| 47 | Thu, 25 Dec 2008 21:39:00 +0900 | 2 | 十勝沖 |
| 48 | Thu, 25 Dec 2008 19:43:00 +0900 | 1 | 関東東方沖 |
| 49 | Thu, 25 Dec 2008 05:32:00 +0900 | 2 | 釧路沖 |
| 50 | Thu, 25 Dec 2008 01:56:00 +0900 | 2 | 新潟県中越地方 |
| 51 | Wed, 24 Dec 2008 05:57:00 +0900 | 2 | 茨城県沖 |