Weather Ticker はインターネットで天気予報情報を取得して表示するガジェット。SilentC プログラムの HTTP クライアントで情報を取得し、ユーザドライバで LCD に表示する。RSS 情報の加工は SilentC には荷が重いため、自宅サーバ内にゲートウェイとなる CGI プログラムを用意している。
まずは 11/1 のエントリで紹介したブレッドボードでの回路図。でもって、SilentC から動作させるためのユーザドライバのプロジェクトアーカイブ。
回路図(bitmap)
LCDUserDriver.zip
LCD 表示についてはエレキジャックの記事「HCS08マイコンにLCDモジュールをつなぐ」と同様。ProcessorExpert でテストプログラムを書き、BDM で動作確認した後でユーザドライバに変換した。
以下がユーザドライバの関数仕様。
とりあえず SilentC のコンソールから UserDriver(3) として呼び出せばテスト文字列が表示される。
インターネットの天気予報 RSS フィードを取得してティッカー風に表示させるための SilentC プログラムと Web server 用の CGI がこちら。
SilentC.zip
http://rss.weather.com/ のサービスを利用したが、第三者向けに変換結果を提供するのは規約に抵触するかもしれない。日本語サービスの場合には LCD で表示できないため、Text::Kakasi などを用いて半角カナに変換すれば良いのだが、「曇」が「ドン」とかになってしまうのはご愛嬌だ。Livedoor のサービスを使って日本語表示をできるようにしたのが下記の CGI プログラム。半角カナにする場合は sw パラメータを付ける(sw=1 でカナ、デフォルトは 0)。また、n パラメータで地域を指定できる(n=4 で札幌。これがデフォルト)。
Posted by masato at 09:00 PM#!/usr/bin/perl # Weather Report RSS Gateway for CQ-FRQ-MCF52233 # 2008.11 by masato use Encode; use LWP::Simple; use XML::RSS; use CGI qw/:standard/; use Text::Kakasi; my $q = new CGI; my $sj = find_encoding('cp932'); # 4:sapporo my $sw = $q->param('sw'); my $n = $q->param('n') || 4; my $url = sprintf('http://weather.livedoor.com/forecast/rss/1b/%d.xml', $n); my $data_from_web = get($url); my $rss = new XML::RSS; $rss->parse($data_from_web); my $channel = $rss->{'channel'}; print $q->header(-type => 'text/plain', -charset=>'shift_jis'); $kks = Text::Kakasi->new('-sjis', '-Jk', '-Hk', '-Kk', '-Ea'); my $i = 0; foreach my $item ( @{$rss->{'items'}} ) { $i++; next if $i == 1; my $s = $item->{'title'}; my $ss = $item->{'description'}; if (defined($sw) and $sw) { print $kks->get($sj->encode($s))."\n"; print $kks->get($sj->encode($ss))."\n\n"; } else { print $sj->encode($s)."\n"; print $sj->encode($ss)."\n\n"; } }
うーん、なんででしょうね。
2つとも通過しないなんて考えられない。どちらも良い作品なのに。
と言うかmasatoさんと遭えるチャンスかと思っていたのに。
hamayan さんにそう言っていただけて光栄です。
きっと同じようなネタでもっと良い作品があったのでしょう。
自分でも今ひとつ練り切れていないと感じてます。
おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。