iddyのAPIでプロフィールをblogに表示してみる

普通の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>

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