普通のblogってプロフィールを表示する欄があったりすると思うのですが、Movalbe Typeにはなかった気がします。先日登録したiddyを使って表示してみることにしました。登録したプロフィールはiddyのREST APIで取得することができます。
眠くて朦朧とした意識の中、とあるWebデザイナーさんのblogを参考にさせていただきました。http://blog.webcreativepark.net/2007/03/08-235006.html
後でJanneにタグ売ってる人一覧とか、いろいろ機能を足したいのでphpのクラスを一個起こしました。
iddy.inc
<?php /** * iddy * @see http://iddy.jp/api/resources/ */ class iddy { private $apikey; private $encoding = "utf-8"; private $propertyids; function iddy($apikey,$encoding) { $this->apikey = $apikey; if ($encoding) $this->encoding = $encoding; $this->propertyids = array( "accountname" => 'アカウント名', "registdate" => '登録日時', "profileurl" => 'プロフィールページURL', "imageurl" => 'プロフィール画像URL', "name" => '名前', "namekana" => 'ふりがな', "nameroma" => '名前(ローマ字)', "birthday" => '生年月日', "gender" => '性別', "country" => '', "city" => '都道府県', "hometown" => 'ホームタウン', "yahoomessenger" => 'Yahoo!メッセンジャID', "skype" => 'SkypeID', "msnmessenger" => 'MSN Messenger ID', "googletalk" => 'Google Talk ID', "mixi" => 'Mixi ID', "profile" => 'プロフィール', "personaltag" => 'パーソナルタグ(,区切り)', "favoritemovie" => '好きな映画(,区切り)', "favoritefood" => '好きな食べ物(,区切り)', "favoritemusic" => '好きな音楽、音楽家(,区切り)', "hobby" => '趣味(,区切り', ); } function get_profile($accountname) { $profiles = array(); $uri = "http://iddy.jp/api/user/?apikey=".$this->apikey."&type=all&accountname=".$accountname; $xml = @file_get_contents($uri); if (!$xml) return $profiles; foreach ($this->propertyids as $key => $value) { preg_match("/<".$key.">(.+?)<\/".$key.">/sm", $xml, $item); // utf8 -> $encoding $profiles[$key] = @mb_convert_encoding($item[1], $this->encoding, "utf-8"); } return $profiles; } } ?>
で、phpで書いたjavascriptのファイルをワンクッションとして入れます。これをjs/iddy2js.phpという名前で保存。※APIKEYとACOUNTは自分のに置き換えてみてください。
<?php require_once("iddy.inc"); // mb_convert_encodingに渡す $encoding = 'utf8'; $iddy = new iddy('APIKEY',$encoding); $profiles = $iddy->get_profile('ACOUNT',$encoding); /* <accountname> : アカウント名 <registdate> : 登録日時 <profileurl> : プロフィールページURL <imageurl> : プロフィール画像URL <name> : 名前 <namekana> : ふりがな <nameroma> : 名前(ローマ字) 以下は「all」でリクエストした時のみ <birthday> : 生年月日 <gender> : 性別 <country> :国 <city> : 都道府県 <hometown> : ホームタウン <yahoomessenger> : Yahoo!メッセンジャID <skype> : SkypeID <msnmessenger> : MSN Messenger ID <googletalk> : Google Talk ID <mixi> : Mixi ID <profile> : プロフィール <personaltag> : パーソナルタグ(,区切り) <favoritemovie> : 好きな映画(,区切り) <favoritefood> : 好きな食べ物(,区切り) <favoritemusic> : 好きな音楽、音楽家(,区切り) <hobby> : 趣味(,区切り) */ $accountname = $profiles['accountname']; $profileurl = $profiles['profileurl']; $imageurl = $profiles['imageurl']; $profile = $profiles['profile']; print <<< EOF <!-- var profile = ""; profile += '<a href="$profileurl" target="_blank"><img src="$imageurl" id="iddy-imageurl" alt="$accountname"/></a>'; profile += '<div id="iddy-account"><a href="$profileurl" target="_blank">$accountname</a></div>'; profile += '<p id="iddy-profile">$profile</p>'; document.write(profile); // --> EOF; ?>
で、このblogではサイドバーに表示するものは全てMobable TypeのWidget Managerで管理しているので以下のModuleのテンプレートを作成します。
名前:Widget: Profile by iddy
内容:
<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"> <script type="text/javascript" src="<$MTBlogURL$>js/iddy2js.php"></script> </div> </div>
とりあえずこれで表示できました。複数のファイルで構成されているのでわかりにくいんですが、それは後々考えることにします。