iddyのプロフィールをMovable Typeのプラグインで表示する

kwLogではiddyのprofileの表示をサイドバーに表示していますが、これはphpの出力をJavaScriptにするという少々強引なドリブルでした。iddy本家の方でMovable Typeプラグインが公開されたのでまっとうなやり方に移行します。

iddy Movable Typeプラグイン
http://iddy.jp/blog/log/2007/04/000060.php
が、残念ながらphpダイナミックパブリッシングするとまたもや表示されません。眠い目をこすりながらphp用のpluginをつくってみました。

面倒だったのはTagごとにSmartyのファイルを作成しないといけなかったのと、’plugins/iddyMyProfile/data/data.cgi’のパスの指定。このファイル、Tagの出力を行うたびにWebAPIを呼び出すのはトラフィックの無駄なので、WebAPI呼び出しの結果をこのdata.cgiファイルに保存して使いまわすようになっています。(ちなみ使い回し期限は3分)
で、このファイルのパスの取得なんですが、perlのplug-inだと

my $path = $ENV{'SCRIPT_FILENAME'};
$path =~ s/mt\.cgi//g;
$path =~ s/\s//g;
my $file_data = $path.'plugins/iddyMyProfile/data/data.cgi';

と、なっていてmt.cgiからの相対パスになっちゃってます。。。

phpダイナミックパブリッシングしている場合は$_SERVER[‘SCRIPT_FILENAME’]はmtview.phpで階層的にいうと

mt本体/
-mt.cgi <--Perlのときの'SCRIPT_FILENAME'はここ
-plugins/
--iddyMyProfile/
---data/
----data.cgi
-php/
--plugins/
---Smartyのプラグイン
weblog出力先/
-mtview.php <-- phpのときの'SCRIPT_FILENAME'はここ

こんな感じ。

mt本体のディレクトリ名はユーザによって変更可能だから決めうちもできないし。しばし考えました。さすがにmt本体へのパスはあるだろうと思いつhttp://www.sixapart.jp/movabletype/manual/object_reference/archives/mt.html を見てました。

なんだ $mt->mt_dir でいけんじゃん。と思いつつ指定したところhttp://で始まるURIが返ってきて、ファイルの読み込みはできるがhttp指定でファイルの書き込みはできないので万事休す。ほしいのは/usr/local/www/…みたいなlocalhost上のファイルパスなんです。

でも、絶対にあるはずだ。と思い
mt本体/php/mt.phpを見ていたところ下記コードを発見。

// path to MT directory
$cfg['MTDir'] = realpath(dirname($file));

これだ!

<?php
// Get iddy profile
function get_iddy($ctx) {
  $path = $ctx->mt->config['MTDir'];
  if (!preg_match('!/$!', $path))
    $path .= '/';
  $file_data = $path.'plugins/iddyMyProfile/data/data.cgi';
  $lines_content = @file($file_data);
  list($date_data,$accountname) = split(",", $lines_content[0], 2);
 
  $date_chk = strftime("%Y%m%d%H%M%S",time()-60*3);
  $blog = $ctx->stash('blog');
  $iddy_config = iddy_config($ctx);
  $an = ($iddy_config!=null) ? $iddy_config['id_usrname'] : "";
  if (($date_data < $date_chk) or ($accountname != $an)) {
    $url = 'http://iddy.jp/api/user/?apikey=2f81a9d399752350434f8df139c5652a36a14beb&type=all&accountname='.$an;
    $content_in = @file_get_contents($url);
    $date_now = strftime("%Y%m%d%H%M%S",time());
    $content_in = "$date_now,$an\n".$content_in;
    @file_put_contents($file_data,$content_in);
  }
  $content = @file_get_contents($file_data);
  $content = ereg_replace("\r|\n","",$content);
  return array($content,$an);
}

なんとかdata.cgiへの入出力ができました。

data.cgiへのアクセスをベースに各タグのファイルを以下にまとめました。とりあえずversion 1.01用patchです。解凍して普通にmt本体/phpへ上書きしちゃってください。

mt-iddyMyProfile-Plugin patch
plug-inのおかげでwidgetのtemplateの編集が直感的になりました。

<div class="module-iddy module">
<h2 class="module-header">PROFILE by <a href="http://iddy.jp/" target="_blank">iddy</a></h2>
<div class="module-content">
<a href="<$MTIddyProfileurl$>" target="_blank"><img src="<$MTIddyImageurl$>" id="iddy-imageurl" alt="<$MTIddyAccountname$>'s Profile by iddy"/></a>
<div id="iddy-account"><a href="<$MTIddyProfileurl$>" target="_blank" title="<$MTIddyAccountname$>'s Profile by iddy"><$MTIddyAccountname$></a></div>
<p id="iddy-profile"><$MTIddyProfile$></p>
</div>
</div>