MovableTypeで「特定地域の天気情報を表示」をやる

Create:2004/02/26, update:2004/02/26

 

お天気の表示プラグインが、、、

MovableTypeを導入して早いもので数ヶ月が過ぎ去ろうとしてます。すこし前に「その日のお天気」を記事に導入できたら? と色々探したところ「晴れときどき鬼瓦現在の天気や気温を表示する」さんの記事を見てインストールしてみたのですが、どうもインストールできずで泣いていました

ところが「Samurize=サムライズ」とか色々物色してたら、なんだかこちらも「お天気プラグイン」なるものがあって、ダウンロードしてみるとvbだし♪ ってなわけで、こんな感じならオイラにも作れるな♪ っと現在試行β版を作成&錯誤中なのです。

お天気の表示プラグインの概略

asahi.com サイトの「Weather情報」を取得し各都市の天気情報を日記に差込みます。

取得に関しては、GETメッソドを使用し該当ページの情報を取得します。取得が正常に行われた場合、お天気情報を切り出し各都市の情報を出力します。

お天気取得は、お天気情報表示のコンテナタグが記述された場合のみ実行されます。

このプラグインを使用するためには、下記のモジュールが必須となります。

CPAN : LWP(libwww-perl)
jcode.pl

MovableType でプラグインを作成するために参考にしたページは以下の通りです。

PROGRAMMATIC INTERFACES(英語)
PROGRAMMATIC INTERFACES(日本語)
MovableTypeのプラグイン作成(邦訳)

ついでに Perl の便利関数です。

フォームから送られてきたデータをデコード・整形・修正するサブルーチン集

お天気の表示プラグインの設置と、コンテナタグの記述方法

とりあえずの版です、ほんとうに・・・・

かなりβっす

お天気の表示プラグインの設置と、コンテナタグの記述方法

  1. お天気の表示プラグインをダウンロードし MovableType がインストールされているディレクトリ以下の plugin フォルダにコピーしてください。このとき jcode.pl も一緒にplugin フォルダにコピーするのを忘れないでください。
  2. plugin フォルダにコピーしたら実行権限を指定してください。(jcode.pl は、特に実行権限いらないと思うけど念のため)
    $ chmod 755 jpWeather.pl jcode.pl
    
  3. 設置が終わったら、取得したい都市と jcode.pl のファイルパスを修正(赤いところ)します。
    require "/hoge/mt/plugins/jcode.pl";
    my %Weather_info = (
        "URL",          "http://weather.asahi.com/city/",                       # asahi.com
        "CITY",         "tokyo.html",                                           # 都市
        "AGENT",        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",   # agent情報
        "CONTENT_TYPE", "application/x-weather-form-urlencoded",                #
        "IP",       "",                                                         #
    );
    
  4. 都市の変更については http://weather.asahi.com/ にアクセスし取得したい都市を選択した時の最後の部分を指定してください。
    http://weather.asahi.com/city/tokyo.html
    

コンテナタグは、以下のようにかいてください

<MTjpWeather>
<$MTjpWeatherCity$> のお天気
<$MTjpWeatherDD$>日 <$MTjpWeatherHH$>時の、報告っす

<$MTjpWeatherTemperature$> かー。さむいか?

</MTjpWeather>

とりあえずの版

コンテナタグとテンプレートタグを見て頂けるとわかる通り、自分の勉強用にかなりハショってます(笑)

肝心の天気情報も入れてないしっと突っ込まされそうですが、こんな感じで作るものなのかな?って思ってます。

こんな感じでよかったら、もうちっと拡張してみようかなぁぁ

基本的にコンテナタグは、繰り返しを行う事を目的としているので特に繰り返しが発生しない処理とするなら、以下の様にかくみたい。

use MT::Template::Context;
MT::Template::Context->add_container_tag(Loop => sub {
    my $ctx = shift;
    my $content = '';

    my $builder = $ctx->stash('builder');
    my $tokens = $ctx->stash('tokens');


    $ctx->stash('i_value', "mura ");
    $content = $builder->build($ctx, $tokens);
    return $content;
});
MT::Template::Context->add_tag(LoopIValue => sub {
    my $ctx = shift;
    $ctx->stash('i_value');
});

1;
[..戻る..]