Zend_Service_StrikeIron: 応用編

Zend_Service_Technorati(日本語)

注意:このドキュメントでは、英語版のリビジョン 22768 の更新内容をスキップしています。

導入

Zend_Service_Technorati は、Technorati API を使うための簡単で直感的なオブジェクト指向インターフェイスを提供します。 利用可能なすべての » Technorati API クエリ にアクセスすることができ、API が返す XML 形式のレスポンスを PHP で扱いやすいオブジェクトで返します。

» Technorati は、人気のあるブログ検索エンジンのひとつです。その API を使用すると、 特定のブログについての情報を取得したり、 指定したタグやフレーズにマッチするブログの著者の情報を取得したりできます。 使用できるクエリの一覧は、 » Technorati API ドキュメント あるいはこのドキュメントの 使用できる Technorati クエリ を参照ください。

さあ始めましょう

Technorati API を使用するには、キーが必要です。 API キーを取得するには、まず最初に » Technorati アカウントを作成 し、それから » API キーのセクション に行ってください。

Note: API キーの制限
一日あたり最大 500 までの Technorati API コールを無料で行うことができます。 現在の Technorati API のライセンスによってはその他の使用制限が適用されるかもしれません。

API キーを取得したら、いよいよ Zend_Service_Technorati を使うことができます。

はじめてのクエリ

クエリを実行するにはまず最初に API キーを使用して Zend_Service_Technorati のインスタンスを作成します。 そしてクエリの形式を選択し、引数を指定したうえでそれをコールします。

Example #1 はじめてのクエリの実行

  1. // API_KEY を指定して
  2. // Zend_Service_Technorati を作成します
  3. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  4.  
  5. // Technorati で PHP というキーワードを検索します
  6. $resultSet = $technorati->search('PHP');

検索用のメソッドにはオプションパラメータの配列を渡すことができます。 これを使用すると、クエリをさらに絞り込むことができます。

Example #2 クエリの精度の向上

  1. // API_KEY を指定して
  2. // Zend_Service_Technorati を作成します
  3. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  4.  
  5. // クエリをフィルタリングし、あまり影響力のない
  6. // (あまり他からリンクされていない) ブログを結果から除外します
  7. $options = array('authority' => 'a4');
  8.  
  9. // Technorati で PHP というキーワードを検索します
  10. $resultSet = $technorati->search('PHP', $options);

Zend_Service_Technorati のインスタンスは使い捨てのオブジェクトではありません。 したがって、クエリをコールするたびに毎回新たなインスタンスを作成するなどということは不要です。 一度作成した Zend_Service_Technorati オブジェクトを、気の済むまで使い回せばいいのです。

Example #3 ひとつの Zend_Service_Technorati インスタンスでの複数のクエリの送信

  1. // API_KEY を指定して
  2. // Zend_Service_Technorati を作成します
  3. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  4.  
  5. // Technorati で PHP というキーワードを検索します
  6. $search = $technorati->search('PHP');
  7.  
  8. // Technorati で一番よく登録されているタブを取得します
  9. $topTags = $technorati->topTags();

結果の取得

クエリの結果は、二種類の結果オブジェクトのうちのいずれかの形式で取得できます。

まず最初の形式は Zend_Service_Technorati_*ResultSet オブジェクトで表されるものです。結果セットオブジェクトは、 基本的には結果オブジェクトのコレクションとなります。これは基底クラス Zend_Service_Technorati_ResultSet を継承したもので、 PHPSeekableIterator インターフェイスを実装しています。 この結果セットを使用するいちばんよい方法は、PHPforeach 文を用いてループ処理することです。

Example #4 結果セットオブジェクトの取得

  1. // API_KEY を指定して
  2. // Zend_Service_Technorati を作成します
  3. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  4.  
  5. // Technorati で PHP というキーワードを検索します
  6. // $resultSet は Zend_Service_Technorati_SearchResultSet のインスタンスです
  7. $resultSet = $technorati->search('PHP');
  8.  
  9. // 結果オブジェクトをループします
  10. foreach ($resultSet as $result) {
  11.     // $result は Zend_Service_Technorati_SearchResult のインスタンスです
  12. }

Zend_Service_Technorati_ResultSetSeekableIterator インターフェイスを実装しているので、結果コレクション内での位置を指定して 特定の結果オブジェクトを取得することもできます。

Example #5 特定の結果セットオブジェクトの取得

  1. // API_KEY を指定して
  2. // Zend_Service_Technorati を作成します
  3. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  4.  
  5. // Technorati で PHP というキーワードを検索します
  6. // $resultSet は Zend_Service_Technorati_SearchResultSet のインスタンスです
  7. $resultSet = $technorati->search('PHP');
  8.  
  9. // $result は Zend_Service_Technorati_SearchResult のインスタンスです
  10. $resultSet->seek(1);
  11. $result = $resultSet->current();

Note: SeekableIterator は配列として動作し、 そのインデックスは 0 から始まります。インデックス 1 を指定すると、コレクション内の 2 番目の結果を取得することになります。

2 番目の形式は、単体の特別な結果オブジェクトで表されるものです。 Zend_Service_Technorati_GetInfoResultZend_Service_Technorati_BlogInfoResult および Zend_Service_Technorati_KeyInfoResult は、 Zend_Service_Technorati_AuthorZend_Service_Technorati_Weblog といったオブジェクトのラッパーとして働きます。

Example #6 単体の結果オブジェクトの取得

  1. // API_KEY を指定して
  2. // Zend_Service_Technorati を作成します
  3. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  4.  
  5. // weppos についての情報を取得します
  6. $result = $technorati->getInfo('weppos');
  7.  
  8. $author = $result->getAuthor();
  9. echo '<h2>' . $author->getFirstName() . ' ' . $author->getLastName() .
  10.      ' のブログ</h2>';
  11. echo '<ol>';
  12. foreach ($result->getWeblogs() as $weblog) {
  13.     echo '<li>' . $weblog->getName() . '</li>';
  14. }
  15. echo "</ol>";

レスポンスクラスの詳細については Zend_Service_Technorati クラス のセクションを参照ください。

エラー処理

Zend_Service_Technorati のクエリメソッドは、失敗したときには Zend_Service_Technorati_Exception をスローします。 またその際にはわかりやすいエラーメッセージを提供します。

Zend_Service_Technorati のクエリが失敗する原因は、いくつか考えられます。 Zend_Service_Technorati は、クエリを送信する際にすべてのパラメータを検証します。 もし無効なパラメータや無効な値を指定していた場合は Zend_Service_Technorati_Exception をスローします。 さらに、Technorati API が一時的に使用できなくなっていたり、 そのレスポンスが整形式でない場合もあり得るでしょう。

Technorati のクエリは、常に try...catch ブロック内に記述するようにしましょう。

Example #7 クエリの例外処理

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. try {
  3.     $resultSet = $technorati->search('PHP');
  4. } catch(Zend_Service_Technorati_Exception $e) {
  5.     echo "エラーが発生しました: " $e->getMessage();
  6. }

API キーの使用限度の確認

今日は後何回 API キーが使えるのかを調べたいことも多々あるでしょう。 デフォルトでは、Technorati の API は 1 日あたり 500 回までしか使用することができません。 それを超えて使用しようとすると、Zend_Service_Technorati は例外を返します。自分の API キーの使用状況を取得するには Zend_Service_Technorati::keyInfo() メソッドを使用します。

Zend_Service_Technorati::keyInfo()Zend_Service_Technorati_KeyInfoResult オブジェクトを返します。 詳細は » API リファレンスガイド を参照ください。

Example #8 API キーの使用状況の取得

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $key = $technorati->keyInfo();
  3.  
  4. echo "API Key: " . $key->getApiKey() . "<br />";
  5. echo "Daily Usage: " . $key->getApiQueries() . "/" .
  6.      $key->getMaxQueries() . "<br />";

使用できる Technorati クエリ

Zend_Service_Technorati は以下のクエリをサポートしています。

Technorati Cosmos

» Cosmos クエリは、指定した URL にリンクしているブログを探します。このクエリは Zend_Service_Technorati_CosmosResultSet オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::cosmos() を参照ください。

Example #9 Cosmos クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $resultSet = $technorati->cosmos('http://devzone.zend.com/');
  3.  
  4. echo "<p>Reading " . $resultSet->totalResults() .
  5.      " of " . $resultSet->totalResultsAvailable() .
  6.      " available results</p>";
  7. echo "<ol>";
  8. foreach ($resultSet as $result) {
  9.     echo "<li>" . $result->getWeblog()->getName() . "</li>";
  10. }
  11. echo "</ol>";

Technorati Search

» Search クエリは、指定した検索文字列を含むブログを探します。このクエリは Zend_Service_Technorati_SearchResultSet オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::search() を参照ください。

Example #10 Search クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $resultSet = $technorati->search('zend framework');
  3.  
  4. echo "<p>Reading " . $resultSet->totalResults() .
  5.      " of " . $resultSet->totalResultsAvailable() .
  6.      " available results</p>";
  7. echo "<ol>";
  8. foreach ($resultSet as $result) {
  9.     echo "<li>" . $result->getWeblog()->getName() . "</li>";
  10. }
  11. echo "</ol>";

Technorati Tag

» Tag クエリは、指定したタグがつけられている投稿を探します。このクエリは Zend_Service_Technorati_TagResultSet オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::tag() を参照ください。

Example #11 Tag クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $resultSet = $technorati->tag('php');
  3.  
  4. echo "<p>Reading " . $resultSet->totalResults() .
  5.      " of " . $resultSet->totalResultsAvailable() .
  6.      " available results</p>";
  7. echo "<ol>";
  8. foreach ($resultSet as $result) {
  9.     echo "<li>" . $result->getWeblog()->getName() . "</li>";
  10. }
  11. echo "</ol>";

Technorati DailyCounts

» DailyCounts クエリは、指定したキーワードを含む投稿の 1 日あたりの数を返します。このクエリは Zend_Service_Technorati_DailyCountsResultSet オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::dailyCounts() を参照ください。

Example #12 DailyCounts クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $resultSet = $technorati->dailyCounts('php');
  3.  
  4. foreach ($resultSet as $result) {
  5.     echo "<li>" . $result->getDate() .
  6.          "(" . $result->getCount() . ")</li>";
  7. }
  8. echo "</ol>";

Technorati TopTags

» TopTags クエリは、Technorati にもっとも多く登録されているタグの情報を返します。このクエリは Zend_Service_Technorati_TagsResultSet オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::topTags() を参照ください。

Example #13 TopTags タグ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $resultSet = $technorati->topTags();
  3.  
  4. echo "<p>Reading " . $resultSet->totalResults() .
  5.      " of " . $resultSet->totalResultsAvailable() .
  6.      " available results</p>";
  7. echo "<ol>";
  8. foreach ($resultSet as $result) {
  9.     echo "<li>" . $result->getTag() . "</li>";
  10. }
  11. echo "</ol>";

Technorati BlogInfo

» BlogInfo は、指定した URL に関連するブログの情報を返します。このクエリは Zend_Service_Technorati_BlogInfoResult オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::blogInfo() を参照ください。

Example #14 BlogInfo クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $result = $technorati->blogInfo('http://devzone.zend.com/');
  3.  
  4. echo '<h2><a href="' . (string) $result->getWeblog()->getUrl() . '">' .
  5.      $result->getWeblog()->getName() . '</a></h2>';

Technorati BlogPostTags

» BlogPostTags クエリは、そのブログでよく使われているタグの情報を返します。このクエリは Zend_Service_Technorati_TagsResultSet オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::blogPostTags() を参照ください。

Example #15 BlogPostTags クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $resultSet = $technorati->blogPostTags('http://devzone.zend.com/');
  3.  
  4. echo "<p>Reading " . $resultSet->totalResults() .
  5.      " of " . $resultSet->totalResultsAvailable() .
  6.      " available results</p>";
  7. echo "<ol>";
  8. foreach ($resultSet as $result) {
  9.     echo "<li>" . $result->getTag() . "</li>";
  10. }
  11. echo "</ol>";

Technorati GetInfo

» GetInfo クエリは、あるメンバーについて Technorati が把握している情報を返します。このクエリは Zend_Service_Technorati_GetInfoResult オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::getInfo() を参照ください。

Example #16 GetInfo クエリ

  1. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  2. $result = $technorati->getInfo('weppos');
  3.  
  4. $author = $result->getAuthor();
  5. echo "<h2>Blogs authored by " . $author->getFirstName() . " " .
  6.      $author->getLastName() . "</h2>";
  7. echo "<ol>";
  8. foreach ($result->getWeblogs() as $weblog) {
  9.     echo "<li>" . $weblog->getName() . "</li>";
  10. }
  11. echo "</ol>";

Technorati KeyInfo

KeyInfo クエリは、API キーの使用状況についての情報を返します。このクエリは Zend_Service_Technorati_KeyInfoResult オブジェクトを返します。詳細は » API リファレンスガイドZend_Service_Technorati::keyInfo() を参照ください。

Zend_Service_Technorati クラス

以下のクラスは、Technorati の各種クエリから返されるものです。 Zend_Service_Technorati_*ResultSet 系のクラスは、 それぞれの形式にあわせた結果セットを保持します。 その中身は形式にあわせた結果オブジェクトであり、容易に処理できます。 これらの結果セットクラスはすべて Zend_Service_Technorati_ResultSet クラスを継承しており、かつ SeekableIterator インターフェイスを実装しています。 これによって、結果のループ処理や特定の結果の取り出しが簡単にできるようになります。

Note: Zend_Service_Technorati_GetInfoResultZend_Service_Technorati_BlogInfoResult そして Zend_Service_Technorati_KeyInfoResult には上にあげたクラスと異なる点があります。これらは結果セットに属しておらず、 インターフェイスを実装していません。これらは単一のレスポンスオブジェクトを表し、 Zend_Service_Technorati_AuthorZend_Service_Technorati_Weblog といった Zend_Service_Technorati のオブジェクトのラッパーとして働きます。

Zend_Service_Technorati には、これ以外にも 特定のレスポンスオブジェクトを表す便利なクラスが含まれています。 Zend_Service_Technorati_Author は、Technorati のアカウント (ブログの著者、いわゆるブロガー) を表します。 Zend_Service_Technorati_Weblog は単一のウェブログオブジェクトを表します。 ここには、フィードの URL やブログ名などの情報が含まれます。詳細は » API リファレンスガイドZend_Service_Technorati を参照ください。

Zend_Service_Technorati_ResultSet

Zend_Service_Technorati_ResultSet は最も重要な結果セットです。 クエリ固有の結果セットクラス群はこのクラスを継承して作成しています。 このクラス自体のインスタンスを直接作成してはいけません。 各子クラスは、クエリの種類に応じた Zend_Service_Technorati_Result オブジェクトのコレクションを表します。

Zend_Service_Technorati_ResultSetPHPSeekableIterator インターフェイスを実装しており、foreach 文で結果を処理できます。

Example #17 結果セットコレクション内の結果オブジェクトの反復処理

  1. // 単純なクエリを実行します
  2. $technorati = new Zend_Service_Technorati('VALID_API_KEY');
  3. $resultSet = $technorati->search('php');
  4.  
  5. // $resultSet は Zend_Service_Technorati_SearchResultSet
  6. // のインスタンスです
  7. // これは Zend_Service_Technorati_ResultSet を継承しています
  8. foreach ($resultSet as $result) {
  9.     // Zend_Service_Technorati_SearchResult オブジェクトに対して
  10.     // 何らかの操作をします
  11. }

Zend_Service_Technorati_CosmosResultSet

Zend_Service_Technorati_CosmosResultSet は Technorati Cosmos クエリの結果セットを表します。

Note: Zend_Service_Technorati_CosmosResultSetZend_Service_Technorati_ResultSet を継承しています。

Zend_Service_Technorati_SearchResultSet

Zend_Service_Technorati_SearchResultSet は Technorati Search クエリの結果セットを表します。

Note: Zend_Service_Technorati_SearchResultSetZend_Service_Technorati_ResultSet を継承しています。

Zend_Service_Technorati_TagResultSet

Zend_Service_Technorati_TagResultSet は Technorati Tag クエリの結果セットを表します。

Note: Zend_Service_Technorati_TagResultSetZend_Service_Technorati_ResultSet を継承しています。

Zend_Service_Technorati_DailyCountsResultSet

Zend_Service_Technorati_DailyCountsResultSet は Technorati DailyCounts クエリの結果セットを表します。

Note: Zend_Service_Technorati_DailyCountsResultSetZend_Service_Technorati_ResultSet を継承しています。

Zend_Service_Technorati_TagsResultSet

Zend_Service_Technorati_TagsResultSet は Technorati TopTags あるいは BlogPostTags クエリの結果セットを表します。

Note: Zend_Service_Technorati_TagsResultSetZend_Service_Technorati_ResultSet を継承しています。

Zend_Service_Technorati_Result

Zend_Service_Technorati_Result は最も重要な結果オブジェクトです。 クエリ固有の結果クラス群はこのクラスを継承して作成しています。 このクラス自体のインスタンスを直接作成してはいけません。

Zend_Service_Technorati_CosmosResult

Zend_Service_Technorati_CosmosResult は Technorati Cosmos クエリの単一の結果オブジェクトを表します。 単体のオブジェクトとして返されることはなく、常に Zend_Service_Technorati_CosmosResultSet オブジェクトに含まれる形式で返されます。

Note: Zend_Service_Technorati_CosmosResultZend_Service_Technorati_Result を継承しています。

Zend_Service_Technorati_SearchResult

Zend_Service_Technorati_SearchResult は Technorati Search クエリの単一の結果オブジェクトを表します。 単体のオブジェクトとして返されることはなく、常に Zend_Service_Technorati_SearchResultSet オブジェクトに含まれる形式で返されます。

Note: Zend_Service_Technorati_SearchResultZend_Service_Technorati_Result を継承しています。

Zend_Service_Technorati_TagResult

Zend_Service_Technorati_TagResult は Technorati Tag クエリの単一の結果オブジェクトを表します。 単体のオブジェクトとして返されることはなく、常に Zend_Service_Technorati_TagResultSet オブジェクトに含まれる形式で返されます。

Note: Zend_Service_Technorati_TagResultZend_Service_Technorati_Result を継承しています。

Zend_Service_Technorati_DailyCountsResult

Zend_Service_Technorati_DailyCountsResult は Technorati DailyCounts クエリの単一の結果オブジェクトを表します。 単体のオブジェクトとして返されることはなく、常に Zend_Service_Technorati_DailyCountsResultSet オブジェクトに含まれる形式で返されます。

Note: Zend_Service_Technorati_DailyCountsResultZend_Service_Technorati_Result を継承しています。

Zend_Service_Technorati_TagsResult

Zend_Service_Technorati_TagsResult は Technorati TopTags あるいは BlogPostTags クエリの単一の結果オブジェクトを表します。 単体のオブジェクトとして返されることはなく、常に Zend_Service_Technorati_TagsResultSet オブジェクトに含まれる形式で返されます。

Note: Zend_Service_Technorati_TagsResultZend_Service_Technorati_Result を継承しています。

Zend_Service_Technorati_GetInfoResult

Zend_Service_Technorati_GetInfoResult は Technorati GetInfo クエリの単一の結果オブジェクトを表します。

Zend_Service_Technorati_BlogInfoResult

Zend_Service_Technorati_BlogInfoResult は Technorati BlogInfo クエリの単一の結果オブジェクトを表します。

Zend_Service_Technorati_KeyInfoResult

Zend_Service_Technorati_KeyInfoResult は Technorati KeyInfo クエリの単一の結果オブジェクトを表します。 これは Technorati API キーの使用状況 についての情報を提供します。


Zend_Service_StrikeIron: 応用編