普通の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>
とりあえずこれで表示できました。複数のファイルで構成されているのでわかりにくいんですが、それは後々考えることにします。