Zend_Service_Audioscrobbler(日本語)

Zend_Service_Delicious(日本語)

導入

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

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

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード'"--\n""タイトル: {$post->getTitle()}\n""URL: {$post->getUrl()}\n";
  2. }

投稿の取得

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. * 直近の投稿を取得する
  11. *
  12. * @param string $tag   オプションで、タグによる絞込みを行う
  13. * @param string $count 返す投稿の最大数 (デフォルトは 15)
  14. * @return Zend_Service_Delicious_PostList
  15. *//**
  16. * すべての投稿を取得する
  17. *
  18. * @param string $tag オプションで、タグによる絞込みを行う
  19. * @return Zend_Service_Delicious_PostList
  20. */

Zend_Service_Delicious_PostList

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

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

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

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード'// 投稿数を数えます
  2. // 投稿を順次処理します
  3. "--\n""タイトル: {$post->getTitle()}\n""URL: {$post->getUrl()}\n";
  4. }
  5.  
  6. // 配列風のアクセス方式で投稿を取得します

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

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

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

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

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード'// タグ "php" および "zend" が指定されている投稿のみを表示します
  2. 'php', 'zend'"タイトル: {$post->getTitle()}\n""URL: {$post->getUrl()}\n";
  3. }

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

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

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード'// URL に "help" を含む投稿のみを表示します
  2. '/help/'"タイトル: {$post->getTitle()}\n""URL: {$post->getUrl()}\n";
  3. }

投稿の編集

Example #5 投稿の編集

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード'// タイトルを設定します
  2. '新しいタイトル');
  3. // 変更を保存します

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

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

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード''新しいタイトル')
  2.          ->setNotes('新しいメモ')
  3.          ->save();

投稿の削除

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

Example #7 投稿の削除

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード');
  2.  
  3. // URL を指定します
  4. 'http://framework.zend.com');
  5.  
  6. // あるいは、post オブジェクトのメソッドをコールします
  7. // deletePost() を使用する、もうひとつの方法

新しい投稿の追加

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

Example #8 投稿の追加

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

タグ

Example #9 タグ

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード');
  2.  
  3. // すべてのタグを取得します
  4. // タグ ZF の名前を zendFramework に変更します
  5. 'ZF', 'zendFramework');

バンドル

Example #10 バンドル

  1. span style="color: #ff0000;">'ユーザ名', 'パスワード');
  2.  
  3. // すべてのバンドルを取得します
  4. // someBundle というバンドルを削除します
  5. 'someBundle');
  6.  
  7. // バンドルを追加します
  8. 'newBundle''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. // someUser のファンを取得します
  3. 'someUser'));
  4.  
  5. // someUser のネットワークを取得します
  6. 'someUser'));
  7.  
  8. // someUser のタグを取得します
  9. '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.  

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

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

  1. span style="color: #ff0000;">'keepalive'

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


Zend_Service_Audioscrobbler(日本語)