Zend_Service_Audioscrobbler(日本語)

Zend_Service_Delicious(日本語)

導入

Zend_Service_Delicious は、 » del.icio.usXML および JSON ウェブサービスを使用するためのシンプルな API です。 このコンポーネントによって、del.icio.us への投稿のうち、 権限を持っているものについての読み書きが可能になります。 全ユーザの公開データへの読み込み専用のアクセスも可能です。

Example #1 すべての投稿の取得

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2. $posts = $delicious->getAllPosts();
  3.  
  4. foreach ($posts as $post) {
  5.     echo "--\n";
  6.     echo "タイトル: {$post->getTitle()}\n";
  7.     echo "URL: {$post->getUrl()}\n";
  8. }

投稿の取得

Zend_Service_Delicious には、投稿を取得するメソッドとして getPosts()getRecentPosts() および getAllPosts() の三種類があります。 これらはすべて Zend_Service_Delicious_PostList のインスタンスを返します。ここに、取得したすべての投稿が含まれます。

  1. /**
  2. * 引数にマッチする投稿を取得する。日付や url を省略した場合は
  3. * 直近の日付を使用する
  4. *
  5. * @param string $tag オプションで、タグによる絞込みを行う
  6. * @param Zend_Date $dt オプションで、日付による絞込みを行う
  7. * @param string $url オプションで、url による絞込みを行う
  8. * @return Zend_Service_Delicious_PostList
  9. */
  10. public function getPosts($tag = null, $dt = null, $url = null);
  11.  
  12. /**
  13. * 直近の投稿を取得する
  14. *
  15. * @param string $tag   オプションで、タグによる絞込みを行う
  16. * @param string $count 返す投稿の最大数 (デフォルトは 15)
  17. * @return Zend_Service_Delicious_PostList
  18. */
  19. public function getRecentPosts($tag = null, $count = 15);
  20.  
  21. /**
  22. * すべての投稿を取得する
  23. *
  24. * @param string $tag オプションで、タグによる絞込みを行う
  25. * @return Zend_Service_Delicious_PostList
  26. */
  27. public function getAllPosts($tag = null);

Zend_Service_Delicious_PostList

Zend_Service_Delicious のメソッド getPosts()getAllPosts()getRecentPosts() および getUserPosts() が、このクラスのインスタンスを返します。

データへのアクセスを簡単に行うため、このクラスは CountableIterator および ArrayAccess の三つのインターフェイスを実装しています。

Example #2 投稿一覧へのアクセス

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2. $posts = $delicious->getAllPosts();
  3.  
  4. // 投稿数を数えます
  5. echo count($posts);
  6.  
  7. // 投稿を順次処理します
  8. foreach ($posts as $post) {
  9.     echo "--\n";
  10.     echo "タイトル: {$post->getTitle()}\n";
  11.     echo "URL: {$post->getUrl()}\n";
  12. }
  13.  
  14. // 配列風のアクセス方式で投稿を取得します
  15. echo $posts[0]->getTitle();

Note: メソッド ArrayAccess::offsetSet() および ArrayAccess::offsetUnset() は、この実装では例外をスローします。つまり、 unset($posts[0]);$posts[0] = 'A'; といったコードを書くと例外が発生するということです。 というのも、これらのプロパティは読み込み専用だからです。

投稿一覧オブジェクトには、二種類のフィルタリング機能が組み込まれています。 タグによるフィルタリングと、URL によるフィルタリングです。

Example #3 タグの指定による投稿一覧のフィルタリング

特定のタグで投稿を絞り込むには、 withTags() を使用します。 ひとつのタグでだけ絞り込みを行う際に便利なように、 withTag() も用意されています。

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2. $posts = $delicious->getAllPosts();
  3.  
  4. // タグ "php" および "zend" が指定されている投稿のみを表示します
  5. foreach ($posts->withTags(array('php', 'zend')) as $post) {
  6.     echo "タイトル: {$post->getTitle()}\n";
  7.     echo "URL: {$post->getUrl()}\n";
  8. }

Example #4 URL の指定による投稿一覧のフィルタリング

指定した正規表現にマッチする URL で投稿を絞り込むには withUrl() メソッドを使用します。

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2. $posts = $delicious->getAllPosts();
  3.  
  4. // URL に "help" を含む投稿のみを表示します
  5. foreach ($posts->withUrl('/help/') as $post) {
  6.     echo "タイトル: {$post->getTitle()}\n";
  7.     echo "URL: {$post->getUrl()}\n";
  8. }

投稿の編集

Example #5 投稿の編集

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2. $posts = $delicious->getPosts();
  3.  
  4. // タイトルを設定します
  5. $posts[0]->setTitle('新しいタイトル');
  6. // 変更を保存します
  7. $posts[0]->save();

Example #6 メソッドコールの連結

すべての設定用メソッドは post オブジェクトを返すので、 「流れるようなインターフェイス」を使用してメソッドコールを連結できます。

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2. $posts = $delicious->getPosts();
  3.  
  4. $posts[0]->setTitle('新しいタイトル')
  5.          ->setNotes('新しいメモ')
  6.          ->save();

投稿の削除

投稿を削除する方法は二通りあります。 投稿の URL を指定するか、post オブジェクトの delete() メソッドを実行するかのいずれかです。

Example #7 投稿の削除

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2.  
  3. // URL を指定します
  4. $delicious->deletePost('http://framework.zend.com');
  5.  
  6. // あるいは、post オブジェクトのメソッドをコールします
  7. $posts = $delicious->getPosts();
  8. $posts[0]->delete();
  9.  
  10. // deletePost() を使用する、もうひとつの方法
  11. $delicious->deletePost($posts[0]->getUrl());

新しい投稿の追加

投稿を追加するには createNewPost() メソッドをコールする必要があります。 このメソッドは Zend_Service_Delicious_Post オブジェクトを返します。 投稿を編集したら、それを del.icio.us のデータベースに保存するために save() メソッドをコールします。

Example #8 投稿の追加

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2.  
  3. // 新しい投稿を作成し、保存します (メソッドコールの連結を使用します)
  4. $delicious->createNewPost('Zend Framework', 'http://framework.zend.com')
  5.           ->setNotes('Zend Framework Homepage')
  6.           ->save();
  7.  
  8. // 新しい投稿を作成し、保存します (メソッドコールの連結を使用しません)
  9. $newPost = $delicious->createNewPost('Zend Framework',
  10.                                      'http://framework.zend.com');
  11. $newPost->setNotes('Zend Framework Homepage');
  12. $newPost->save();

タグ

Example #9 タグ

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2.  
  3. // すべてのタグを取得します
  4. print_r($delicious->getTags());
  5.  
  6. // タグ ZF の名前を zendFramework に変更します
  7. $delicious->renameTag('ZF', 'zendFramework');

バンドル

Example #10 バンドル

  1. $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
  2.  
  3. // すべてのバンドルを取得します
  4. print_r($delicious->getBundles());
  5.  
  6. // someBundle というバンドルを削除します
  7. $delicious->deleteBundle('someBundle');
  8.  
  9. // バンドルを追加します
  10. $delicious->addBundle('newBundle', array('tag1', 'tag2'));

公開データ

del.icio.us のウェブ API を使用すると、全ユーザの公開データにアクセスできるようになります。

公開データを取得するためのメソッド
名前 説明 返り値の型
getUserFans() あるユーザのファンを取得します Array
getUserNetwork() あるユーザのネットワークを取得します Array
getUserPosts() あるユーザの投稿を取得します Zend_Service_Delicious_PostList
getUserTags() あるユーザのタグを取得します Array

Note: これらのメソッドを使用するだけなら、 Zend_Service_Delicious オブジェクトの作成時に ユーザ名とパスワードを指定する必要はありません。

Example #11 公開データの取得

  1. // ユーザ名とパスワードは不要です
  2. $delicious = new Zend_Service_Delicious();
  3.  
  4. // someUser のファンを取得します
  5. print_r($delicious->getUserFans('someUser'));
  6.  
  7. // someUser のネットワークを取得します
  8. print_r($delicious->getUserNetwork('someUser'));
  9.  
  10. // someUser のタグを取得します
  11. print_r($delicious->getUserTags('someUser'));

公開投稿

公開投稿を getUserPosts() メソッドで取得すると、 Zend_Service_Delicious_PostList オブジェクトが返されます。ここには Zend_Service_Delicious_SimplePost オブジェクトが含まれ、 その中には URL やタイトル、メモ、タグといった投稿に関する基本情報が含まれます。

Zend_Service_Delicious_SimplePost クラスのメソッド
名前 説明 返り値の型
getNotes() 投稿のメモを返します String
getTags() 投稿のタグを返します Array
getTitle() 投稿のタイトルを返します String
getUrl() 投稿の URL を返します String

HTTP クライアント

Zend_Service_Delicious は、Zend_Rest_Client を使用して del.icio.us ウェブサービスへの HTTP リクエストを作成します。 Zend_Service_Delicious が使用する HTTP クライアントを変更するには、Zend_Rest_ClientHTTP クライアントを変更する必要があります。

Example #12 Zend_Rest_Client の HTTP クライアントの変更

  1. $myHttpClient = new My_Http_Client();
  2. Zend_Rest_Client::setHttpClient($myHttpClient);

Zend_Service_Delicious で複数のリクエストを作成する際に それを高速化するなら、接続をキープするように HTTP クライアントを設定するとよいでしょう。

Example #13 HTTP クライアントを、接続を保持し続けるように設定する

  1. Zend_Rest_Client::getHttpClient()->setConfig(array(
  2.         'keepalive' => true
  3. ));

Note: Zend_Service_Delicious オブジェクトを作成する際に、 Zend_Rest_ClientSSL トランスポートは 'ssl' と設定されます。デフォルトの 'ssl2' ではありません。これは、del.icio.us 側の問題で、 'ssl2' を使用するとリクエストの処理に時間がかかる (ほぼ 2 秒くらい) ためです。


Zend_Service_Audioscrobbler(日本語)