2008-03-04
_ Yahoo!路線情報から運行情報をとってくるEFT
Plagger を使った運行情報の取得には livedoor 路線案内の運行情報を利用した,LDTraffic や LDTrain があるけど,Yahoo!路線情報の運行情報からだと,EFT でひっぱってこれた.
# http://transit.yahoo.co.jp/railway/area?ac=<code>&an=<name> author: hb@smallstyle custom_feed_handle: http://transit\.yahoo\.co\.jp/railway custom_feed_follow_link: /detail\?ac=\d+&line=\d+&cp=\d+ handle: http://transit\.yahoo\.co\.jp/railway/detail\?ac=\d+&line=\d+&cp=\d+ extract_xpath: title: //h2/b/text() body: //div[@id="info_display"]/text() date: //div[@id="info_time"]/text() extract_after_hook: | my $regex = decode("utf-8","(平常通り|再開|遅れ|運転変更|見合わせ|運休)"); my @status; while($data->{body} =~ /$regex/g){push(@status, $1);} $data->{title} = "[$status[$#status]] $data->{title} $data->{date}";
extract_after_hook でステータスをタイトルに付け加えています.
一部列車に運転変更が出ていましたが、12:00現在、ほぼ平常通り運転しています。
上のような"運転変更"と"平常通り"のキーワードが同時にでたときに,Yahoo!路線情報では最後のキーワードがそれらしい感じ.正規表現は最初にマッチしたキーワードで評価されるため,いったんステータスにマッチするキーワードをすべて取り出してから,最後のキーワードを取り出すというまわりくどいことをしてます.
これで各エリアごとの運行情報を取得することができたので,あとは Filter::Rule で自分が利用する路線だけを対象にしておくと必要なものだけになってすっきりする.で,config.yaml の一部はこんな感じに.
global: cache: expires: 5 sec plugins: - module: Subscription::Config config: feed: - http://transit.yahoo.co.jp/railway/area?ac=6&an=%93%8C%8AC - module: Filter::EntryFullText - module: Filter::Rule rule: module: Deduped compare_body: 1 - module: Filter::Rule rule: expression: $args->{entry}->title =~ /(名古屋本線|東海道本線)/
cache の expires を設定しておかないと,最新情報がとってこられないことがあるみたいなので,ひとまず 5 秒後には消してしまうようにしてみました.
EFT を CodeRepos に commit しました.
2008-03-06
_ Plagger::Plugin::Filter::FetchNicoVideo でニコニコ動画(SP1) H.264 形式対応
2008-03-07 追記:Plagger::Plugin::Filter::FetchNicoVideo でニコニコ動画(SP1)対応(2)でニコニコムービーメーカにも対応した形に変更しています.
ニコニコ動画が H.264 に対応したので,Plagger::Plugin::Filter::FetchNicoVideo で FLV と H.264 を判別するようにしてみました.H.264 の動画は拡張子が mp4 でダウンロードするようにしています.とりあえず diff だけ.
Index: FetchNicoVideo.pm =================================================================== --- FetchNicoVideo.pm (revision 7529) +++ FetchNicoVideo.pm (working copy) @@ -73,8 +73,12 @@ if ( $self->conf->{filename_encode} ) { Encode::from_to( $filename, "utf-8", $self->conf->{filename_encode} ); } - my $path = File::Spec->catfile( $self->conf->{dir}, $filename . ".flv" ); + $enclosure->url =~ m!^http://[^/]+(?:smilevideo|nicovideo)\.jp/smile\?(v|m)=(?:[^.]+)\.\d+(?:low)?!; + my $ext = $1 eq 'v' ? 'flv' : 'mp4'; + + my $path = File::Spec->catfile( $self->conf->{dir}, $filename . ".$ext" ); + unless ( -e $path ) { #access video page $ua->get("http://www.nicovideo.jp/watch/$video_id"); @@ -112,6 +116,7 @@ if ($res->header('Content-Length') ) { $enclosure->length( $res->header('Content-Length') ); } + $enclosure->type( Plagger::Util::mime_type_of($path) ); $entry->add_enclosure($enclosure); }
これまでだと,ダウンロードした FLV を MP4 に変換という部分が,H.264 動画の場合は必要ないこともあるかと思うので,enclosure の type を見るようにすると,振り分けることが可能です.config.yaml の一部はこんな感じ.
- module: Filter::FFmpeg rule: - expression: $args->{entry}->enclosure->type eq "video/x-flv"
2008-03-07
_ Plagger::Plugin::Filter::FetchNicoVideo でニコニコ動画(SP1) 対応(2)
H.264動画対応に加えてニコニコムービーメーカで作成されたものにも対応させておく.
Index: FetchNicoVideo.pm =================================================================== --- FetchNicoVideo.pm (revision 7618) +++ FetchNicoVideo.pm (working copy) @@ -73,8 +73,16 @@ if ( $self->conf->{filename_encode} ) { Encode::from_to( $filename, "utf-8", $self->conf->{filename_encode} ); } - my $path = File::Spec->catfile( $self->conf->{dir}, $filename . ".flv" ); + $enclosure->url =~ m!^http://[^/]+(?:smilevideo|nicovideo)\.jp/smile\?(\w)=(?:[^.]+)\.\d+(?:low)?!; + my %video_type_of = ( + v => 'flv', + m => 'mp4', + s => 'swf', + ); + my $ext = exists( $video_type_of{$1} ) ? $video_type_of{$1} : "unknown"; + + my $path = File::Spec->catfile( $self->conf->{dir}, $filename . ".$ext" ); unless ( -e $path ) { #access video page $ua->get("http://www.nicovideo.jp/watch/$video_id"); @@ -112,6 +120,7 @@ if ($res->header('Content-Length') ) { $enclosure->length( $res->header('Content-Length') ); } + $enclosure->type( Plagger::Util::mime_type_of($path) ); $entry->add_enclosure($enclosure); }
2008-03-13
_ iEPG を利用してコマンドラインから Diga に予約登録するツール
Panasonic の Diga を利用していて,テレビ番組の予約といえば,たいていはリモコンからの予約で事足りるけど,たまに外から予約する必要がでたりすることがあります.Dimora に登録しておけば,リモートからも録画が可能ですが,いまいち使いにくい.(リニューアルで今まで有料だった番組表からの予約が無料になるみたいだけど,これの使い勝手はどんなものだろうか・・・)
Linux や Mac からコマンドラインで簡単に登録できるツールがあれば便利そうだなぁと思い,ちょっと作ってみた.とりあえず,iEPG でさくさくっと登録できるツール.iEPG ファイルを引数としてわたしてやると,そのデータをもとに Diga へ登録するというごく簡単なもの.Diga Manager へのアクセスは機器パスワードが必要…だと思っていたけど,どうもなしでも登録できてしまうみたい.今後のアップデートで使えなくなるかもしれないけど,ひとまず動いているので,これで公開してみる.
アーカイブを展開して,config.yaml を環境にあわせて設定後,下記のように実行する.
$ ruby rdiga.rb -i "http://tv.goo.ne.jp/contents/program/019/0407/20080316_2330/iepg.tvpi" I, [2008-03-14T00:26:36.882908 #27781] INFO -- : Digaに接続します. I, [2008-03-14T00:26:36.883214 #27781] INFO -- : 予約を登録します. I, [2008-03-14T00:26:36.883252 #27781] INFO -- : 日時:0316 2330-2355 I, [2008-03-14T00:26:36.883286 #27781] INFO -- : チャンネル:中京テレビ(041) I, [2008-03-14T00:26:36.883375 #27781] INFO -- : タイトル:Music Lovers 「いきものがかりライブ」 I, [2008-03-14T00:26:36.883413 #27781] INFO -- : 録画モード:HE I, [2008-03-14T00:26:45.038567 #27781] INFO -- : 録画予約を登録しました.
と,こんな感じで予約を登録できる.ちなみに本体操作時や,停止中の場合は,以下のようなメッセージになる.おそらく初めて実行するときとか,これになると思う.この場合は 30 秒ほど待って再度実行するとうまくいくと思う.
$ ruby rdiga.rb -i "http://tv.goo.ne.jp/contents/program/019/0407/20080316_2330/iepg.tvpi" I, [2008-03-14T00:25:26.996461 #27780] INFO -- : Digaに接続します. I, [2008-03-14T00:25:26.996764 #27780] INFO -- : 予約を登録します. I, [2008-03-14T00:25:26.996801 #27780] INFO -- : 日時:0316 2330-2355 I, [2008-03-14T00:25:26.996835 #27780] INFO -- : チャンネル:中京テレビ(041) I, [2008-03-14T00:25:26.996869 #27780] INFO -- : タイトル:Music Lovers 「いきものがかりライブ」 I, [2008-03-14T00:25:26.996902 #27780] INFO -- : 録画モード:HE F, [2008-03-14T00:25:28.063070 #27780] FATAL -- : 本体操作中、または現在実行できない操作です。
これ以外にも重複予約になると,"予約が重複しています"的なメッセージが表示される.この場合は,予約の登録はできてるけど,重複予約なので,確認が必要.ちなみに録画モードはオプションで変更可能.デフォルトは HE になる.
$ ruby rdiga.rb -h Usage: rdiga [options] -m MODE 録画モード(DR|HG|HX|HE|XP|SP|LP|EP|FR) -c CONFIG 設定ファイル -i IEPG_FILE iEPGファイル -d Debugログ出力
うちの環境では XW300 で動作確認しています.その他のモデルだとどうなるか.まだいろいろとバグ持ちだと思うのですが,ちょっと使ってみてやろうか,という方がいれば一度お試しください.
2008-03-22
_ rdiga 0.0.2 を公開
先日公開した,iEPG を利用してコマンドラインで Diga に予約登録する Ruby スクリプト rdiga を更新.今回は,Diga 中の予約一覧を表示できる機能を追加しました.一覧表示にライブラリに hpricot を利用しています.標準の環境ではインストールされていないものなので,別途インストールが必要となりました.hpricot は gem からインストール可能です.
$ gem install hpricot
rdiga 用のページを別途作成したので,ダウンロードはそちらから.
リスト表示については,日時と録画モードのみを表示する簡易版とタイトルもあわせて表示する詳細版をオプションとして用意しました.タイトル付きは各予約詳細画面へのリクエストが必要となるため,件数が多いと表示までに時間がかかります.予約件数が 15 件の場合,簡易版では約 1.5 秒,詳細版では 20 秒以上かかっています.この辺は状況に応じて使い分けてもらえればと思います.
$ ruby rdiga.rb -l I, [2008-03-21T00:00:00.000000 #7394] INFO -- : 予約一覧を表示します(タイトル付は時間がかかります) 3/21(金) 00:00〜00:05 HE(HDD) 3/22(土) 1:00〜2:00 HE(HDD) 3/22(土) 3:00〜3:30 HE(HDD) 3/22(土) 18:00〜19:00 HE(HDD) 3/23(日) 0:30〜1:30 HE(HDD)
こんな感じで表示されると思います.
2008-03-23
_ 同級生の結婚式二次会に参加してきた
毎年やってる高校のプチ同窓会仲間の一人が結婚,ということで二次会に参加してきた.場所は京都四条烏丸の vanilla というお店で.前日に滋賀まで帰って,この日は夕方から京都入り.あいにく小雨がぱらつく天気だったけど,会場まではほとんど屋根のあるところを移動していけたから助かった.途中,T と合流して受付にいくと,名簿をみるとどうも男女で色分けをしてあるようで,男をあわらしているであろう水色の数がなんか少ない….どこに座ろうかと見渡していると,高校の同級生たちが集まっている一角があったので,そっちへ.新婦の部活仲間がたくさんいたけど,なんだかみたことあるような,ないような.もう 10 年近く会ってない人たちだから,まぁ無理もないか.
二次会では恒例のビンゴ大会があって,先着順にどれか袋を選ぶという仕組み.ようは一抜けしてもいいものがもらえとは限らない,というもの.自分は5,6番目くらいに袋を選んで,「グッチ裕三 うまいぞぉシリーズ よくカエル」っていうフライ返しをゲット.女性にはかわいいって結構うけがよかったみたいよ.なんか写真撮ってくれたけど,あんなんどうするんだろ.ちなみに T がアイロンを引き当て,うちにあるからと僕にくれた.最高額商品は iPod Nano だったかな.やけにでかい箱が入っていた袋は,「美尻クッション」なるものが入っていた.引き当てたのは幹事の男性だったのがいろいろよかった.
もうひとつ企画があって,まぁ○×クイズみたいなので,残った 11 人で現金の入った袋を選ぶみたいなの.このクイズは新郎が新婦の答えを予想して,同じかどうかみたいな類のもの.この企画,なぜか残りの 11 人に入って,見事 3000 円をゲット.ちなみにもう一人の同級生は 1 万円をもらっていった.あいかわらずタダでは帰らん女だなぁ.
相手の人は始めてみたけど,おもしろくてやさしそうな感じの人だった.末永く幸せでいてほしいものです.ちなみに帰り際にあいさつしてたら,アイロンの人と,フライ返しの人で覚えられていた.楽しい二次会でした.
2008-03-24
_ バッテリーが死んだ
仕事で使ってる ThinkPad X41 のバッテリーが死んだっぽい.バッテリーインジケータがオレンジ色で点滅している.一晩,はずして放置しておいてみたけど状況は変わらず.時々,一瞬だけ充電モードになるけどまたすぐにインジケータが点滅する.購入してそろそろ 3 年,寿命なんだろうな.
新しいバッテリーが届くまでは,移動時は休止モードにするか,シャットダウンさせなきゃいけないのか.面倒だなぁ.
2008-03-28
_ IE6 で Digest 認証を利用するとエラーになる
普段は Firefox を利用していて IE を使う機会はさほどないのですが,今日,IE6 で tDiary の管理画面を開いたら,""HTTP 400 - 正しくない要求""とかでて表示できない.なんだろうとログを見ると,以下のログが.
[Thu Mar 28 00:00:00 2008] [error] [client 192.168.0.10] Digest: uri mismatch - </update.rb> does not match request-uri </update.rb?conf=default>, referer: http://www.smallstyle.com/update.rb
これ,IE6 のバグなんですね.今までまったく知りませんでした.で,これを回避するには以下を,httpd.conf か,.htaccess に書いておく.via:http://httpd.apache.org/docs/2.0/mod/mod_auth_digest.html#page-header
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
IE6 から使うこともあるかもしれないので,念のため設定しておくことにしよう.
_ ushiushix [ずっと前に公開されたもののようですが、今日見つけて手元のDMR-BW830で試しました。予約、一覧ともに動いています..]
_ hb [作った本人があまり使わなくなってしまっていて,メンテナンスもろくにしていませんでしたが,コメントありがとうございます..]