[php][PEAR]Services_MixiAPIとXML_Feed_Parserを使ってみた

Written by uechoco 1月 25

id:shimookaさんが持ちネタを放出したとのことで、CodeReposに追加されたようなので、Services_MixiAPIを使ってみました。

とりあえず、参考にしたサイトを先にまとめておきます。

まずはライブラリの入手。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()関数でこんな感じで書き換えました。

PHP:
  1. private function buildWSSEAuth($user, $pass) {
  2.         // ----> uechoco modified begin
  3.         //$nonce = pack('H*', sha1(md5(time().rand().posix_getpid())));
  4.         $nonce = pack('H*', sha1(md5(time().rand().uniqid(rand(), true))));
  5.         // <---- uechoco modified end
  6.         $created = date('Y-m-dTH:i:s') . 'Z';
  7.         $digest = base64_encode(pack('H*', sha1($nonce . $created . $pass)));
  8.         $wsse_header = sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"', $user, $digest, base64_encode($nonce), $created);
  9.         return $wsse_header;
  10.     }

あと、今回はXML_Feed_ParserというPEARのライブラリも使っています。shimookaさんのサンプルだとSimpleXMLElementを使っているので、同じの使ったら記事にする意味ないかなと思って、XML_Feed_Parserに挑戦してみました。

説明が面倒なので、CYでお願いします。CY?「コード読め」ですよ。取得したAtomを眺めてたら、mixiの拡張フォーマットが指定してあって、ユーザーの画像と、マイミクなのかどうかが取得できるようなので一緒に取得してみました。

PHP:
  1. <?php
  2. /**
  3. * Services_MixiAPIとXML_Feed_Parserを用いてMixiの足跡を取得するサンプル
  4. *
  5. * PHP version 5
  6. *
  7. * @author    Yusuke Ueno (uechoco)
  8. * @license   http://www.php.net/license/3_01.txt The PHP License, version 3.01
  9. * @see       http://pear.php.net/package/Services_MixiAPI
  10. */
  11.  
  12. // クラスの読み込み
  13. require_once 'Services/MixiAPI/Factory.php';
  14. require_once 'XML/Feed/Parser.php';
  15.  
  16. // mixiの個人情報を定義
  17. class Mixi_Info {
  18.     // mixiのログインID
  19.     const LOGIN_ID = '自分のmixiのログインID';
  20.     // mixiのパスワード
  21.     const PASSWORD = '自分のmixiのログインパスワード';
  22.     // mixiのユーザーID
  23.     const USER_ID  = '自分のmixiのユーザーID';
  24. }
  25.  
  26. // 足跡オブジェクトの作成
  27. $service = Services_MixiAPI_Factory::getInstance(
  28.     Services_MixiAPI_Factory::API_MODE_FOOTPRINT, // 足跡
  29.     Mixi_Info::LOGIN_ID,    // ログインID
  30.     Mixi_Info::PASSWORD,    // パスワード
  31.     Mixi_Info::USER_ID        // ユーザーID
  32. );
  33.  
  34. // 足跡の取得
  35. $service->execute();
  36.  
  37. // とりあえず表示
  38. try {
  39.     $feed = new XML_Feed_Parser($service->get());
  40. } catch (XML_Feed_Parser_Exception $e) {
  41.     die('フィードが無効です:'.$e->getMessage());
  42. }
  43.  
  44. // 足跡情報の整形
  45. $footprints = array();
  46. foreach ($feed as $k => $entry) {
  47.  
  48.     // 通常のAtomフィールドを取得する
  49.     $id = str_replace('http://mixi.jp/show_friend.pl?id=', '', $entry->link);
  50.     $footprints[] = array(
  51.         'id'       => $id,
  52.         'name'     => $entry->author,
  53.         'link'     => $entry->link,
  54.         'date'     => date('Y-m-d H:i:s', $entry->updated),
  55.         'unixtime' => $entry->updated,
  56.     );
  57.  
  58.     // 拡張情報を取得する
  59.     $model = $entry->model;
  60.     $tracks = array('image', 'relation');
  61.     foreach ($tracks as $localName) {
  62.         $nodes = $model->getElementsByTagNameNS('http://mixi.jp/atom/ns#tracks', $localName);
  63.         foreach ($nodes as $node) {
  64.             $footprints[$k][$localName] = $node->nodeValue;
  65.         }
  66.     }
  67. }
  68. ?>
  69. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  70. <html xmlns="http://www.w3.org/1999/xhtml">
  71. <head>
  72. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  73. <title>足跡一覧</title>
  74. <style type="text/css">
  75. <!--
  76. ul#footprint {
  77.     list-style-type: none;
  78. }
  79.  
  80. ul#footprint li {
  81.     display: block;
  82.     border: solid 1px gray;
  83.     padding-left: 100px;
  84.     height: 76px;
  85.     background-repeat: no-repeat;
  86. }
  87.  
  88. ul#footprint li .friend {
  89.     color: green;
  90. }
  91. -->
  92. </style>
  93. </head>
  94. <body>
  95. <h1>足跡一覧</h1>
  96. <ul id="footprint">
  97. <?php
  98. foreach ($footprints as $footprint) {
  99.     printf(
  100.         '<li style="background-image: url(%s)"><a href="%s" title="%s">%s</a>さん (%s 訪問、%s)'."\n",
  101.         $footprint['image'],
  102.         $footprint['link'],
  103.         $footprint['name'],
  104.         $footprint['name'],
  105.         $footprint['date'],
  106.         $footprint['relation'] === 'friend' ? '<span class="friend">お友達</span>' : '他人'
  107.     );
  108. }
  109. ?>
  110. </ul>
  111. </body>
  112. </html>

で、出力画面はこんな感じ。
Services_MixiAPIのサンプル

モザイクが面倒だったので、名前だけにmd5かけてちょんぎってます。

で、この足跡のリストをどうするの?って言われると、なんとも困るんですが、適当にTwitterとかとあわせてみたりしてください。私の目的はServices_MixiAPIを使ってみたかっただけなのです。

[雑記]2007年12月の人気エントリランキング

Written by uechoco 1月 25

 12月の人気エントリのランキングを忘れていたのでいまさらですが、やっちゃいます。

  1. [php]Eclipse+PDT+xamppでcakephp1.2入門
  2. [css][Firefox]<input>タグの特定のtypeにCSSを適用する「input[type=text]」
  3. [php][event]第29回PHP勉強会行ってきました
  4. [tool]Pleiades All-in-one Eclipse
  5. [Linux]ランレベルの数値とchkconfigコマンド
  6. [Let's note W7]購入検討中だけど冷却ファンが気になった人のための記事
  7. FirefoxやThunderbirdなどのMozilla製品をバックアップする「MozBackup」
  8. [php][event]第29回PHP勉強会のお知らせ
  9. [php]php(か、あるいはFlashやJavaScript)でグラフを描く
  10. [php][CakePHP]日英・英日翻訳コンポーネント

 ようやくphpのエントリが上位を占めてきたといった感じですね。個人的にうれしかったのは[php][CakePHP]日英・英日翻訳コンポーネントですね。cakephp.jpで紹介されたのと、yandoさんからコメントを頂けたのが自分の中では印象的です。残念ながらこの記事以来CakePHPを触れずじまいなので、なるはやでBakerというか、ケーキ職人だからパティシエになりたいです。

■関連リンク

[雑記]2007年の人気エントリランキング
2007年11月の人気エントリランキング
2007年10月の人気エントリランキング
2007年9月の検索キーワードランキング
2007年8月の検索キーワードランキング

[php][書籍]紹介:すっきりわかった! PHP

Written by uechoco 1月 24

2008年1月下旬はPHPの本の出版ラッシュですね。確認できているだけで4冊出版されるみたいです。できるかぎり全部見て、良ければ買って、紹介できたらと思います。

まずは、『すっきりわかった! PHP (ASCII BOOKS)』から紹介。さっき本屋で見つけて立ち読みしてきました。

価格は?\2,415、サイズはA5、ページ数は240です。2008/1/21の発売なので、既に本屋で見ることができます。目次はアスキーの「すっきりわかった! PHP」の紹介ページにあります。

著者のクジラ飛行机さんは、ウノウ株式会社のエンジニアの酒徳峰章さんです。最近では『Adobe Flex 2プロフェッショナルガイド Windows & Macintosh対応』を執筆されたのが記憶に新しいです。IPAの未踏ユースに採択されたこともあるIPA公認のスーパークリエイターです、日本語プログラミング言語の「なでしこ」や「ひまわり」の作者と聞けば、知っている人がいるかと思います。

さてさて、中身のほうなのですが、分類としてはPHPの入門書です。第3部から第5部まではPHPの入門として文法やPEAR・PECL・Smartyなども一通り触れています。
私が気に入ったのは、第1部と第2部のPHPの概要についての部分です。PHPの生い立ちの部分では、PHPの誕生からPHP6まで触れています。最近出版されるPHPの本であればPHP6について触れておいて当然だと思うので、しっかり内容が詰まっていますね。PHPがどこで使われているかの部分では、PHPが内部で使われているWebサービスやオープンソースツールなどが紹介されています。こういう紹介も大事ですよね。また、PHP以外で作られている有名なサービスについても触れられています。私が一番気に入ったのは、PHPとほかのWeb言語とのパフォーマンスの比較の部分です。15種類のCPU使用率とメモリ使用率のベンチマークをphp vs. (perl or ruby or Javaなど)で比較して、それぞれグラフ化しています。「このWeb言語はphpよりこうだ」「このWeb言語よりもphpのほうがここで優れているのか」といった情報が読み取れます。端的な見方ではありますが、phpが他のWeb言語に比べてパフォーマンスがどうなのかを確認できます。これはPHP入門者だけでなく、中・上級者も見ておいて損ではないと思います。第2部では、Webの仕組みと照らし合わせながら、Webアプリケーションのセキュリティについての説明があります。細かく、しっかりと説明してあるので、これも読み応えがあります。

[雑記]仮引数と実引数は英語でpatameterとargument

Written by uechoco 1月 23

  • 仮引数:parameter
  • 実引数:argument

へぇ。

私の感覚だと、

  • 引数:parameter
  • 実行時引数:argument

なんですよ。だって、パラメータって言えば、引数のことだなって多くの人に通じますし、C言語系だと、main関数の引数はargvとargcじゃないですか?みなさんはどうなんでしょう?

[Webサービス紹介]うえちょこ@ぼろぐが「勝手にブログ評論」されてみた

Written by uechoco 1月 22

以前、モンマルトルで見た時のR5 ユーザーはより優雅だった。インストール作業も決して悪くはないが。

総合得点 5



-をよく知る紳士は、きまってパソコンを話題に持ち出す。実に陳腐だ。意外と知られていない事だが、大英博物館の入場料が無料なのは、数多くのLLフレー
ムワークBOOKSシリーズの貢献によるところが大きい。ナニゲとは言うが、それは一体なんの毛なのだ?テーマ選択画面か?石ころを磨いてダイヤに仕立て
るデビアスですらe メモリ増設ブームに値段を付けて売るのは難しいのではないか。秋田
真宏氏はまさに冷めたピザだ。私なら、台東区立図書館に生涯を捧げるだろう。あと10年若ければ。

オヤジ臭い話で恐縮だ
が、ジャパンを手に入れるためなら、セーヌ川に飛び込むという若者があとを立たない。嘆かわしい。作者はなにをもって詳しく説明すると言うのか。であるな
らば、かつてメディチ家がそうしたように、テーマ選択後をもっと支援すべきだろう。時にはギリシアの砂浜でディレクトリを愛でるのもいい。一流の美学は、
ときに利用方法に現れる。1人3時間が欲しい。率直な気持ちだ。e_Spanクラスは到底実現不可能に見える。愉悦というのは、PHP5.1以降のような
ことをいうのだ。ツッコミはあきれるほど3dsmax.iniファイルだ。何か忘れてはいないだろうか?・・・そう、1970年以前だ。だれもが「キー
ワード」事件を歓迎はするまい。グループなどは似非書評家にも及ばないのだ。而して、どうだろう。一定時間ごもそうだ。GANCHIKU.com ?
千代田図書館は到底実現不可能に見える。少女とは恐ろしいもので、気がつけば大人になっている。当たり前のようにグループをセカンドバッグから覗かせる。
気づかぬうちにレディとなっているのだ。女性の鋭い洞察の前に、紳士は潔くシャッポを脱ぎ1回時刻をさらすべきなのだ。

そうか。ではジャパンはいかがだろうか。


最近の記事のRSSから抜き出してるらしくて、下記覚えのある単語がちらほら。

大英博物館の入場料が無料なのは、数多くのLLフレー
ムワークBOOKSシリーズの貢献によるところが大きい。

すげぇなw そんな貢献があったなんてw

秋田
真宏氏はまさに冷めたピザだ。

なんというか・・・ごめんなさいww

愉悦というのは、PHP5.1以降のような
ことをいうのだ。

そこまで愉快だとはおもってないの。どっちかっていうと5.3以降?

ツッコミはあきれるほど3dsmax.iniファイルだ。

いみわかんねぇよ。

ほかにも突っ込みいれたいところですが・・・・おもしろいねこれ。