PHPでGoo天気RSSを読み込んで表示する

感想おまちしてます!

「Gooが天気予報をRSSで配信」というニュースを知り、早速自分のサイトに天気予報を表示しようと試してみた。(今年一番苦労してしまった)地震情報のRSSもあるが、今回は天気だけでいいかなと思っている。
天気のRSSを探していて発見した、とても勉強になる情報をくれた2サイトにも感謝している。
もしも天気予報がXMLだったら ? その2 できない理由
kenbo.net 天気予報RSS公開所
まずは自分の「はてなアンテナ」表示用RSSフィード(PHP)を改良してみようと思った。
これはレッツPHP!のRSSフィードを元に作ったのだが、どうもうまくいかない。PEARのXMLパーサ(XML_RSSXML_Parser)を利用しているみたいだが、これだとGooのRSSの「content:encoded」が読み込めなかった。
Gooの天気RSSは、降水確率などの細かい情報がなく、文字だけじゃとてもさびしくなってしまう。なので、「content:encoded」にある天気画像などの情報をそのまま出したかったのだ。


Pearで取れないならばと、Niftyのフォーラムを参考にXMLを読み込んでみるが、これも同じだった。なぜなのじゃ。いろいろ試してみたが無理みたいなので、ほかのXMLパーサを探してみることにした。そこで見つけたのがMagpieRSS。
「MagpieRSS – PHP で使える RSS パーサー」
早速入れてみると、おお!文字化けはするが取得できたぞ。何に化けているか文字コードを調べたところ、「ASCII」と判明した。ASCII!!!情報処理で勉強したぐらいしか知らない単語だ。mb_convert_encodingでASCIIからUTF-8に変換してみたがうまくいかない。MagpieRSSの文字コードがおかしいのかといろいろな文字コードでUploadしてもうまくいかない。この時点で半泣きである。
GooのRSSが悪いのかと思い、このBlogのRSSを読み込ませてみるがだめ。じゃーやっぱりMagpieが怪しいことになる。
MagpieRSSのページで同じ問題がないか調べてみるとあったー!!
kabuguideさんという方がこの問題についてこう書いてくれていた。

「magpieRssの最新版(0.7)だと文字化けがおきてしまいます。」

よかったよかった。貴重な情報ありがとうです。
kabuguideさんのアドバイスを下に、rss_parse.incだけvar0.61にして再度試すと、
できちゃった。(右写真はそのサムネイル)
pic20050305_2225.gif

// Goo天気RSSを読み込むPHP
<?php
include(‘rss_fetch.inc’);
$xml = $_GET[“u”];
$rss = fetch_rss($xml);
if($rss){
$items = $rss->items;
foreach($items as $item){
$content = $item[“content”][“encoded”];
$content = mb_convert_encoding($content, “UTF-8”, “auto”);
echo $content;
}
}else{
echo “file not found.”;
}
?>

「weather_reader.php?u=http://weather.goo.ne.jp/area/4410.rdf」
こんな感じで読み込むファイルをパラメタで与えて使う。
自分用のPortalサイトに貼り付けてみると、なかなかいい感じだ。
ついでにレッツPHP!さんのところにあった、カレンダーもつけてみた。このカレンダーを少し改造して、
今日は何の日かを見れるようにリンクをはってみた。
(リンク先)今日は何の日 毎日が記念日
毎日が記念日というのはとてもいい言葉だと思う。
あとはキャッシュの仕組みを解明だな?。

コメント

  1. PEAR XML_RSSをちょっといじって、対応していないタグを読み込ませる

    gooの天気予報を自分のサイトに取り込んでいる方の記事を見掛けまして、なかなかおもしろそうなんで、この拒にRSSをいぢくり倒してみようかと思い立ちました次第で。…

  2. tad より:

    magpieRss ver0.71.1
    rss_fetch.inc line: 357
    if ( !defined(‘MAGPIE_OUTPUT_ENCODING’) ) {
    define(‘MAGPIE_OUTPUT_ENCODING’, ‘ISO-8859-1’);
    }
    とありますので、
    define ( ‘MAGPIE_OUTPUT_ENCODING’, ‘UTF-8’ ) ;
    と定義してみてはいかがでしょうか?

  3. だい より:

    あーなるほど。そんなところで指定されていたんですねー。

  4. ikasam より:

    PHPで自作のRSSを作りたくてMagpieRSSを使い始めました。
    をどうやったら表示出来るかずっと悩んでいたのでとても助かりました。
    ありがとうございます。

  5. ふじはら より:

    ikasamさんはじめまして。
    こちらこそお役に立ててなによりです!