[php][PEAR]Services_MixiAPIとXML_Feed_Parserを使ってみた
id:shimookaさんが持ちネタを放出したとのことで、CodeReposに追加されたようなので、Services_MixiAPIを使ってみました。
とりあえず、参考にしたサイトを先にまとめておきます。
- 持ちネタ放出 - Do You PHP はてな
- mixiのAPIが増えていたので、Services_MixiAPI作ってみた - Do You PHP はてな
- Services_MixiAPI(APIドキュメント)
- 2007-11-13 - doublenegativeの日記
- PHP: POSIX - Manual
- PHP: uniqid - Manual
- PEAR :: Manual :: XML_Feed_Parser(PEARの日本語ドキュメント)
- XML_Feed_Parserでdc:subject要素を読み込む - ほそいりょすけのほめぱげ
- PHP: DOMDocument->getElementsByTagNameNS() - Manual
まずはライブラリの入手。CodeReposのServices_MixiAPIディレクトリをチェックアウトします。Subversionがない方はmixiのAPIが増えていたので、Services_MixiAPI作ってみたにPEARパッケージにしたものがおいてあるようなので、pearコマンドでインストールできます。もちろん、おすすめはCodeReposの方です。チェックアウトしたら、/src/Servicesディレクトリをinclude_pathで通っている場所にエクスポートします。あるいは、http://svn.coderepos.org/share/lang/php/Services_MixiAPI/src/Servicesを直接エクスポートしてもいいのかな。
私がとってきたバージョンは0.0.1でした。現時点では、Services_MixiAPIは、実行環境がWindowsだと動きません。Services_MixiAPI_AbstractAPIクラスのbuildWSSEAuthメソッドががPOSIX関数を用いているためです。XAMPPerな私はWindowsの実行環境で開発したいので、たぶん一意なハッシュを得るのに必要なんだろうなと適当に解釈して、uniqid()関数でこんな感じで書き換えました。
-
private function buildWSSEAuth($user, $pass) {
-
// ----> uechoco modified begin
-
//$nonce = pack('H*', sha1(md5(time().rand().posix_getpid())));
-
// <---- uechoco modified end
-
$wsse_header = sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"', $user, $digest, base64_encode($nonce), $created);
-
return $wsse_header;
-
}
あと、今回はXML_Feed_ParserというPEARのライブラリも使っています。shimookaさんのサンプルだとSimpleXMLElementを使っているので、同じの使ったら記事にする意味ないかなと思って、XML_Feed_Parserに挑戦してみました。
説明が面倒なので、CYでお願いします。CY?「コード読め」ですよ。取得したAtomを眺めてたら、mixiの拡張フォーマットが指定してあって、ユーザーの画像と、マイミクなのかどうかが取得できるようなので一緒に取得してみました。
-
<?php
-
/**
-
* Services_MixiAPIとXML_Feed_Parserを用いてMixiの足跡を取得するサンプル
-
*
-
* PHP version 5
-
*
-
* @author Yusuke Ueno (uechoco)
-
* @license http://www.php.net/license/3_01.txt The PHP License, version 3.01
-
* @see http://pear.php.net/package/Services_MixiAPI
-
*/
-
-
// クラスの読み込み
-
require_once 'Services/MixiAPI/Factory.php';
-
require_once 'XML/Feed/Parser.php';
-
-
// mixiの個人情報を定義
-
class Mixi_Info {
-
// mixiのログインID
-
const LOGIN_ID = '自分のmixiのログインID';
-
// mixiのパスワード
-
const PASSWORD = '自分のmixiのログインパスワード';
-
// mixiのユーザーID
-
const USER_ID = '自分のmixiのユーザーID';
-
}
-
-
// 足跡オブジェクトの作成
-
$service = Services_MixiAPI_Factory::getInstance(
-
Services_MixiAPI_Factory::API_MODE_FOOTPRINT, // 足跡
-
Mixi_Info::LOGIN_ID, // ログインID
-
Mixi_Info::PASSWORD, // パスワード
-
Mixi_Info::USER_ID // ユーザーID
-
);
-
-
// 足跡の取得
-
$service->execute();
-
-
// とりあえず表示
-
try {
-
$feed = new XML_Feed_Parser($service->get());
-
} catch (XML_Feed_Parser_Exception $e) {
-
}
-
-
// 足跡情報の整形
-
foreach ($feed as $k => $entry) {
-
-
// 通常のAtomフィールドを取得する
-
'id' => $id,
-
'name' => $entry->author,
-
'link' => $entry->link,
-
'unixtime' => $entry->updated,
-
);
-
-
// 拡張情報を取得する
-
$model = $entry->model;
-
foreach ($tracks as $localName) {
-
$nodes = $model->getElementsByTagNameNS('http://mixi.jp/atom/ns#tracks', $localName);
-
foreach ($nodes as $node) {
-
$footprints[$k][$localName] = $node->nodeValue;
-
}
-
}
-
}
-
?>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
<title>足跡一覧</title>
-
<style type="text/css">
-
<!--
-
ul#footprint {
-
list-style-type: none;
-
}
-
-
ul#footprint li {
-
display: block;
-
border: solid 1px gray;
-
padding-left: 100px;
-
height: 76px;
-
background-repeat: no-repeat;
-
}
-
-
ul#footprint li .friend {
-
color: green;
-
}
-
-->
-
</style>
-
</head>
-
<body>
-
<h1>足跡一覧</h1>
-
<ul id="footprint">
-
<?php
-
foreach ($footprints as $footprint) {
-
'<li style="background-image: url(%s)"><a href="%s" title="%s">%s</a>さん (%s 訪問、%s)'."\n",
-
$footprint['image'],
-
$footprint['link'],
-
$footprint['name'],
-
$footprint['name'],
-
$footprint['date'],
-
$footprint['relation'] === 'friend' ? '<span class="friend">お友達</span>' : '他人'
-
);
-
}
-
?>
-
</ul>
-
</body>
-
</html>
モザイクが面倒だったので、名前だけにmd5かけてちょんぎってます。
で、この足跡のリストをどうするの?って言われると、なんとも困るんですが、適当にTwitterとかとあわせてみたりしてください。私の目的はServices_MixiAPIを使ってみたかっただけなのです。
2 Responses to “[php][PEAR]Services_MixiAPIとXML_Feed_Parserを使ってみた”
Comments RSS
TrackBack Identifier URI
コメントする


[PHP][PEAR]Services_MixiAPI 0.1.0リリース
先日CodeReposに突っ込んだServices_MixiAPIですが、バージョン0.1.0としてリリースします。 インストールは $ sudo in…
[...] http://labs.uechoco.com/blog/2008/01/phppearservices_mixiapixml_feed_parser.html [...]