# Zend_Service_Technorati

## 導入

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

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

## さあ始めましょう

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

### API キーの制限

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

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

## はじめてのクエリ

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

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

    // API_KEY を指定して
    // Zend_Service_Technorati を作成します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');

    // Technorati で PHP というキーワードを検索します
    $resultSet = $technorati->search('PHP');

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

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

    // API_KEY を指定して
    // Zend_Service_Technorati を作成します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');

    // クエリをフィルタリングし、あまり影響力のない
    // (あまり他からリンクされていない) ブログを結果から除外します
    $options = array('authority' => 'a4');

    // Technorati で PHP というキーワードを検索します
    $resultSet = $technorati->search('PHP', $options);

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

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

    // API_KEY を指定して
    // Zend_Service_Technorati を作成します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');

    // Technorati で PHP というキーワードを検索します
    $search = $technorati->search('PHP');

    // Technorati で一番よく登録されているタブを取得します
    $topTags = $technorati->topTags();

## 結果の取得

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

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

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

    // API_KEY を指定して
    // Zend_Service_Technorati を作成します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');

    // Technorati で PHP というキーワードを検索します
    // $resultSet は Zend_Service_Technorati_SearchResultSet のインスタンスです
    $resultSet = $technorati->search('PHP');

    // 結果オブジェクトをループします
    foreach ($resultSet as $result) {
        // $result は Zend_Service_Technorati_SearchResult のインスタンスです
    }

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

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

    // API_KEY を指定して
    // Zend_Service_Technorati を作成します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');

    // Technorati で PHP というキーワードを検索します
    // $resultSet は Zend_Service_Technorati_SearchResultSet のインスタンスです
    $resultSet = $technorati->search('PHP');

    // $result は Zend_Service_Technorati_SearchResult のインスタンスです
    $resultSet->seek(1);
    $result = $resultSet->current();

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

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

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

    // API_KEY を指定して
    // Zend_Service_Technorati を作成します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');

    // weppos についての情報を取得します
    $result = $technorati->getInfo('weppos');

    $author = $result->getAuthor();
    echo '<h2>' . $author->getFirstName() . ' ' . $author->getLastName() .
         ' のブログ</h2>';
    echo '<ol>';
    foreach ($result->getWeblogs() as $weblog) {
        echo '<li>' . $weblog->getName() . '</li>';
    }
    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` ブロック内に記述するようにしましょう。

### クエリの例外処理

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

## API キーの使用限度の確認

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

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

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

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $key = $technorati->keyInfo();

    echo "API Key: " . $key->getApiKey() . "<br />";
    echo "Daily Usage: " . $key->getApiQueries() . "/" .
         $key->getMaxQueries() . "<br />";

## 使用できる Technorati クエリ

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

- `Cosmos`

- `Search`

- `Tag`

- `DailyCounts`

- `TopTags`

- `BlogInfo`

- `BlogPostTags`

- `GetInfo`

### Technorati Cosmos

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

#### Cosmos クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->cosmos('http://devzone.zend.com/');

    echo "<p>Reading " . $resultSet->totalResults() .
         " of " . $resultSet->totalResultsAvailable() .
         " available results</p>";
    echo "<ol>";
    foreach ($resultSet as $result) {
        echo "<li>" . $result->getWeblog()->getName() . "</li>";
    }
    echo "</ol>";

### Technorati Search

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

#### Search クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->search('zend framework');

    echo "<p>Reading " . $resultSet->totalResults() .
         " of " . $resultSet->totalResultsAvailable() .
         " available results</p>";
    echo "<ol>";
    foreach ($resultSet as $result) {
        echo "<li>" . $result->getWeblog()->getName() . "</li>";
    }
    echo "</ol>";

### Technorati Tag

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

#### Tag クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->tag('php');

    echo "<p>Reading " . $resultSet->totalResults() .
         " of " . $resultSet->totalResultsAvailable() .
         " available results</p>";
    echo "<ol>";
    foreach ($resultSet as $result) {
        echo "<li>" . $result->getWeblog()->getName() . "</li>";
    }
    echo "</ol>";

### Technorati DailyCounts

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

#### DailyCounts クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->dailyCounts('php');

    foreach ($resultSet as $result) {
        echo "<li>" . $result->getDate() .
             "(" . $result->getCount() . ")</li>";
    }
    echo "</ol>";

### Technorati TopTags

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

#### TopTags タグ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->topTags();

    echo "<p>Reading " . $resultSet->totalResults() .
         " of " . $resultSet->totalResultsAvailable() .
         " available results</p>";
    echo "<ol>";
    foreach ($resultSet as $result) {
        echo "<li>" . $result->getTag() . "</li>";
    }
    echo "</ol>";

### Technorati BlogInfo

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

#### BlogInfo クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $result = $technorati->blogInfo('http://devzone.zend.com/');

    echo '<h2><a href="' . (string) $result->getWeblog()->getUrl() . '">' .
         $result->getWeblog()->getName() . '</a></h2>';

### Technorati BlogPostTags

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

#### BlogPostTags クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->blogPostTags('http://devzone.zend.com/');

    echo "<p>Reading " . $resultSet->totalResults() .
         " of " . $resultSet->totalResultsAvailable() .
         " available results</p>";
    echo "<ol>";
    foreach ($resultSet as $result) {
        echo "<li>" . $result->getTag() . "</li>";
    }
    echo "</ol>";

### Technorati GetInfo

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

#### GetInfo クエリ

    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $result = $technorati->getInfo('weppos');

    $author = $result->getAuthor();
    echo "<h2>Blogs authored by " . $author->getFirstName() . " " .
         $author->getLastName() . "</h2>";
    echo "<ol>";
    foreach ($result->getWeblogs() as $weblog) {
        echo "<li>" . $weblog->getName() . "</li>";
    }
    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` インターフェイスを実装しています。 これによって、結果のループ処理や特定の結果の取り出しが簡単にできるようになります。

- `Zend_Service_Technorati_ResultSet`

- `Zend_Service_Technorati_CosmosResultSet`

- `Zend_Service_Technorati_SearchResultSet`

- `Zend_Service_Technorati_TagResultSet`

- `Zend_Service_Technorati_DailyCountsResultSet`

- `Zend_Service_Technorati_TagsResultSet`

- `Zend_Service_Technorati_Result`

- `Zend_Service_Technorati_CosmosResult`

- `Zend_Service_Technorati_SearchResult`

- `Zend_Service_Technorati_TagResult`

- `Zend_Service_Technorati_DailyCountsResult`

- `Zend_Service_Technorati_TagsResult`

- `Zend_Service_Technorati_GetInfoResult`

- `Zend_Service_Technorati_BlogInfoResult`

- `Zend_Service_Technorati_KeyInfoResult`

`Zend_Service_Technorati_GetInfoResult`、 `Zend_Service_Technorati_BlogInfoResult` そして `Zend_Service_Technorati_KeyInfoResult` には上にあげたクラスと異なる点があります。これらは結果セットに属しておらず、 インターフェイスを実装していません。これらは単一のレスポンスオブジェクトを表し、 `Zend_Service_Technorati_Author` や `Zend_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_ResultSet` は PHP の `SeekableIterator` インターフェイスを実装しており、`foreach` 文で結果を処理することができます。

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

    // 単純なクエリを実行します
    $technorati = new Zend_Service_Technorati('VALID_API_KEY');
    $resultSet = $technorati->search('php');

    // $resultSet は Zend_Service_Technorati_SearchResultSet
    // のインスタンスです
    // これは Zend_Service_Technorati_ResultSet を継承しています
    foreach ($resultSet as $result) {
        // Zend_Service_Technorati_SearchResult オブジェクトに対して
        // 何らかの操作をします
    }

### Zend_Service_Technorati_CosmosResultSet

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

`Zend_Service_Technorati_CosmosResultSet` は Zend_Service_Technorati_ResultSet を継承しています。

### Zend_Service_Technorati_SearchResultSet

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

`Zend_Service_Technorati_SearchResultSet` は Zend_Service_Technorati_ResultSet を継承しています。

### Zend_Service_Technorati_TagResultSet

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

`Zend_Service_Technorati_TagResultSet` は Zend_Service_Technorati_ResultSet を継承しています。

### Zend_Service_Technorati_DailyCountsResultSet

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

`Zend_Service_Technorati_DailyCountsResultSet` は Zend_Service_Technorati_ResultSet を継承しています。

### Zend_Service_Technorati_TagsResultSet

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

`Zend_Service_Technorati_TagsResultSet` は Zend_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 オブジェクトに含まれる形式で返されます。

`Zend_Service_Technorati_CosmosResult` は Zend_Service_Technorati_Result を継承しています。

### Zend_Service_Technorati_SearchResult

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

`Zend_Service_Technorati_SearchResult` は Zend_Service_Technorati_Result を継承しています。

### Zend_Service_Technorati_TagResult

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

`Zend_Service_Technorati_TagResult` は Zend_Service_Technorati_Result を継承しています。

### Zend_Service_Technorati_DailyCountsResult

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

`Zend_Service_Technorati_DailyCountsResult` は Zend_Service_Technorati_Result を継承しています。

### Zend_Service_Technorati_TagsResult

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

`Zend_Service_Technorati_TagsResult` は Zend_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 キーの使用状況 についての情報を提供します。