サイドメニューの一番上に天気予報を表示するようにしました。本来なら気象庁のHPで天気予報のRSSフィードぐらいやってくれてもいいと思うのですが、色々問題があるようです(「もしも天気予報がXMLだったら - その2 できない理由」参照)。
そんななか、天気予報のRSSを実験的に提供して下さる個人サイトがありました(「RSS形式の天気予報を、実験的に公開することにしました」)。天下りの団体から抗議を受けて閉鎖させられるかもしれませんが、それに対抗するkenboさんに感謝しながら利用させて頂いております。
kenboさんのデータは30箇所の天気予報がありますので、そのうち地元の大阪だけを表示するようにしています。そのときの作業内容のメモを以下に記します。
RSSの取り込みにはMagpieRSSを利用しています。これはPHPで動作するRSSパーサで、http://magpierss.sourceforge.net/からダウンロードできます。
これを解凍・展開したものをftpで適当なディレクトリに送ります。このディレクトリは使用時に指定できますので、どこでも構いません。私は'nucleus'ディレクトリの下に作成しました。また、キャッシュディレクトリも使用時に指定できますので、任意のところに作成します。私は、トラックバックピープル時に作成した'/nucleus/media/rsscache'ディレクトリを利用しています。
RSSデータを取り込むために以下のようなmenu_weather.phpファイルを作成します。
RSSデータの取り込みはこれだけです。あとは$rssに取り込まれたデータを加工するだけです。また、'rss_fetch.inc'中の'init()'関数で各パラメータのデフォルト値が指定されていますので、それを変更したいときは上記のようにdefine文で定義してやります。
Nulceusで表示させる場合はNucleus上でPHPを実行させる必要があります。そのためNP_IncludeEXプラグインを利用して、スキン編集で以下のように記入します。
ただし、これを実行させるとエラーとなります。これはMagpieRSSで'debug()'関数を定義しており、これがNucleusの'debug()'関数と衝突しているからです。MagpieRSSでデバグなんてしないのでこれをコメントアウトします。
kenboさんから提供されるデータはテキストだけで少し素っ気ないので加工しています。そのソースは以下のようになっていますが、その説明は省略します。
天気の種類に雪がありませんが、まだ雪のときのRSSデータが確認できていませんので実装しておりません。そろそろ北海道で雪になっていくでしょうから、それを確認したあとに実装したいと思います。
あとアップデートした日時を入れたいところなのですが、これも未実装です。RSSデータの中には'lastBuildDate'として提供されているのですが、$rss->channel['lastBuildDate']としても取得できません。ちょっと理由がわからず保留にしています。
そんななか、天気予報のRSSを実験的に提供して下さる個人サイトがありました(「RSS形式の天気予報を、実験的に公開することにしました」)。天下りの団体から抗議を受けて閉鎖させられるかもしれませんが、それに対抗するkenboさんに感謝しながら利用させて頂いております。
kenboさんのデータは30箇所の天気予報がありますので、そのうち地元の大阪だけを表示するようにしています。そのときの作業内容のメモを以下に記します。
RSSの取り込みにはMagpieRSSを利用しています。これはPHPで動作するRSSパーサで、http://magpierss.sourceforge.net/からダウンロードできます。
これを解凍・展開したものをftpで適当なディレクトリに送ります。このディレクトリは使用時に指定できますので、どこでも構いません。私は'nucleus'ディレクトリの下に作成しました。また、キャッシュディレクトリも使用時に指定できますので、任意のところに作成します。私は、トラックバックピープル時に作成した'/nucleus/media/rsscache'ディレクトリを利用しています。
RSSデータを取り込むために以下のようなmenu_weather.phpファイルを作成します。
define("MAGPIE_DIR", "/virtual/tantris/public_html/nucleus/magpierss/");
define("MAGPIE_CACHE_DIR", "/virtual/tantris/public_html/nucleus/media/rsscache");
$url = "http://web1.aaacafe.ne.jp/~tenki/tenki.xml";
require_once(MAGPIE_DIR."rss_fetch.inc");
$rss = fetch_rss($url);
define("MAGPIE_CACHE_DIR", "/virtual/tantris/public_html/nucleus/media/rsscache");
$url = "http://web1.aaacafe.ne.jp/~tenki/tenki.xml";
require_once(MAGPIE_DIR."rss_fetch.inc");
$rss = fetch_rss($url);
RSSデータの取り込みはこれだけです。あとは$rssに取り込まれたデータを加工するだけです。また、'rss_fetch.inc'中の'init()'関数で各パラメータのデフォルト値が指定されていますので、それを変更したいときは上記のようにdefine文で定義してやります。
Nulceusで表示させる場合はNucleus上でPHPを実行させる必要があります。そのためNP_IncludeEXプラグインを利用して、スキン編集で以下のように記入します。
<%IncludeEX(php,menu_weather.php)%>
ただし、これを実行させるとエラーとなります。これはMagpieRSSで'debug()'関数を定義しており、これがNucleusの'debug()'関数と衝突しているからです。MagpieRSSでデバグなんてしないのでこれをコメントアウトします。
kenboさんから提供されるデータはテキストだけで少し素っ気ないので加工しています。そのソースは以下のようになっていますが、その説明は省略します。
$image_url = array(
"晴" => IMAGE_DIR . "hare.gif",
"くもり" => IMAGE_DIR . "kumori.gif",
"雨" => IMAGE_DIR . "ame.gif"
);
$kugiri = array(
"時々" => "|",
"のち" => "/",
);
echo $rss->channel['title'];
foreach ($rss->items as $item) {
$title = $item['title'];
if($title == "大阪") {
echo "<b>$title</b><br />\n";
$description = $item['description'];
$array = split("<br />", $description);
if(ereg("^(晴|くもり|雨)", $array[1], $regs)) {
$tenki = $regs[0];
echo "<img src=$image_url[$tenki] />";
if(ereg("(時々|のち)(晴|くもり|雨)$", $array[1], $regs)) {
$var = $regs[1];
echo $kugiri[$var];
$var = $regs[2];
echo "<img src=$image_url[$var] />";
}
}
echo "\n 最高$array[2]\n";
$rain = array(
substr($array[3], strlen("雨12時まで"), strlen($array[3])),
substr($array[4], strlen("雨18時まで"), strlen($array[4])),
substr($array[5], strlen("雨24時まで"), strlen($array[5])),
substr($array[9], strlen("雨06時まで"), strlen($array[9]))
);
echo "<table>\n";
echo " <tr><td>時間帯</td><td>6-12</td><td>12-18</td><td>18-24</td><td>0-6</td></tr>\n";
echo " <tr><td>降水確率</td><td>$rain[0]</td><td>$rain[1]</td><td>$rain[2]</td><td>$rain[3]</td></tr>\n";
echo "</table>\n";
}
}
"晴" => IMAGE_DIR . "hare.gif",
"くもり" => IMAGE_DIR . "kumori.gif",
"雨" => IMAGE_DIR . "ame.gif"
);
$kugiri = array(
"時々" => "|",
"のち" => "/",
);
echo $rss->channel['title'];
foreach ($rss->items as $item) {
$title = $item['title'];
if($title == "大阪") {
echo "<b>$title</b><br />\n";
$description = $item['description'];
$array = split("<br />", $description);
if(ereg("^(晴|くもり|雨)", $array[1], $regs)) {
$tenki = $regs[0];
echo "<img src=$image_url[$tenki] />";
if(ereg("(時々|のち)(晴|くもり|雨)$", $array[1], $regs)) {
$var = $regs[1];
echo $kugiri[$var];
$var = $regs[2];
echo "<img src=$image_url[$var] />";
}
}
echo "\n 最高$array[2]\n";
$rain = array(
substr($array[3], strlen("雨12時まで"), strlen($array[3])),
substr($array[4], strlen("雨18時まで"), strlen($array[4])),
substr($array[5], strlen("雨24時まで"), strlen($array[5])),
substr($array[9], strlen("雨06時まで"), strlen($array[9]))
);
echo "<table>\n";
echo " <tr><td>時間帯</td><td>6-12</td><td>12-18</td><td>18-24</td><td>0-6</td></tr>\n";
echo " <tr><td>降水確率</td><td>$rain[0]</td><td>$rain[1]</td><td>$rain[2]</td><td>$rain[3]</td></tr>\n";
echo "</table>\n";
}
}
天気の種類に雪がありませんが、まだ雪のときのRSSデータが確認できていませんので実装しておりません。そろそろ北海道で雪になっていくでしょうから、それを確認したあとに実装したいと思います。
あとアップデートした日時を入れたいところなのですが、これも未実装です。RSSデータの中には'lastBuildDate'として提供されているのですが、$rss->channel['lastBuildDate']としても取得できません。ちょっと理由がわからず保留にしています。
No comments yet
Add Comments
Trackbacks
Trackback URL
気象庁 天気 予報まとめさいと 気象庁 天気 予報ファンクラブ pinged on 2008-04-02
気象庁 天気 予報のリンク集形式のサイト情報です。の情報収集にお役立てください。
天気予報を表示(aaacafe+Movable Type) へぼ日記 pinged on 2005-06-25
ブログのトップページに天気予報を設置しました。 今回も、aaacafeの悲しい事...
天気予報を表示させる Blog 3180 // 市民ランナーなっかんのWeblog // pinged on 2005-04-21
出来ちゃいました♪ 天気予報RSS取得PHPスクリプトを利用してホームページやブログに天気予報を表示させる事が!うれしぃなぁ〓♪ 出来上がりはこんな感じ↓インラインフレームで埋め込んでいます。天気予報参考にさ...
サイドバーにRSSを利用した天気予報 eizo slash blog pinged on 2005-04-09
行楽シーズンということもあり、サイドバーに天気予報を表示したいと思いネット上の情...
サイドバーにRSSを利用した天気予報 eizo slash blog pinged on 2005-04-09
行楽シーズンということもあり、サイドバーに天気予報を表示したいと思いネット上の情...
RSSを利用して天気予報を表示したい。 Log Book pinged on 2005-03-25
現在、天気予報をRSSで配信しているサイトは下記のとおりです。
〓goo 天気 ...
天気予報のRSS配信 断崖絶破の備忘録 pinged on 2004-12-19
天気予報のRSS配信サイトが無いものかと探していたのですが gooがいつのまにかはじめていた事に気がついた今日この頃、皆様お風邪など召されておりませんでしょうか?断崖絶破です。 民間の気象情報の提供企業の団...
|
最高気温33℃