例 --  Services_Yahoo の使用例

この例について

以下の節では、Services_Yahoo のさまざまな機能を 使用する例を提供します。現在収録されているのは、 Yahoo! Search および Content Analysis へのインターフェイスのついてのドキュメントのみです。

Services_Yahoo のすべての public メソッドは、 何か問題が起こった場合には 例外 を発生させるようになっています。そのため、すべての例で try { ... } catch { } ブロックが使用されています。

注意 この例は、シェルのコマンドラインから実行させるように設計されています。 Web ブラウザから試してみたい場合は、結果を読みやすくするために \n<br /> に置き換えましょう。

Yahoo! Search との会話

以下の例は、Yahoo! Search との通信を行います。

例 59-1Web 検索: 結果の一覧表示

このコードは、Yahoo! Search に対して Steve Fossett という言葉を問い合わせる検索クエリを発行します。 返される結果のひとつひとつについて、その表題が出力されます。


<?php
require_once "Services/Yahoo/Search.php";

try {
    $search = Services_Yahoo_Search::factory("web");
    $search->setQuery("Steve Fossett");

    $results = $search->submit();

    echo "結果の総数: " . $results->getTotalResultsReturned() . "\n\n";

    foreach ($results as $result) {
        echo $result['Title'] . "\n";
    }

} catch (Services_Yahoo_Exception $e) {
    echo "エラー: " . $e->getMessage() . "\n";

    foreach ($e->getErrors() as $error) {
        echo "* " . $error . "\n";
    }
}
?>

デフォルトでは、一回のリクエストで 10 件ずつの結果が返されます。 setResultNumber() メソッドを使用することで、 この数を変更することが可能です。


<?php
require_once "Services/Yahoo/Search.php";

try {
    $search = Services_Yahoo_Search::factory("web");
    $search->setQuery("Steve Fossett");

    // 一度に 20 件ずつ結果を返します
    $search->setResultNumber(20);

    /* ... */
?>

例 59-2Web 検索: 結果の詳細

このコードは、Yahoo! Search に対してもう一度 Steve Fossett という言葉を問い合わせます。こんどは 最初に返される結果についての詳細が出力されます。


<?php
require_once "Services/Yahoo/Search.php";

try {
    $search = Services_Yahoo_Search::factory("web");
    $search->setQuery("Steve Fossett");

    $results = $search->submit();

    if ($results->getTotalResultsReturned() > 0) {
        $info = $results->current();

        echo "表題: " . $info['Title'] . "\n";
        echo "概要: " . $info['Summary'] . "\n";
        echo "URL: " . $info['Url'] . "\n";
        echo "クリッカブル URL: " . $info['ClickUrl'] . "\n";
        echo "最終更新日: " . $info['ModificationDate'] . "\n";
        echo "Mime 型: " . $info['MimeType'] . "\n";
    }
    
} catch (Services_Yahoo_Exception $e) {
    echo "エラー: " . $e->getMessage() . "\n";

    foreach ($e->getErrors() as $error) {
        echo "* " . $error . "\n";
    }
}
?>

例 59-3Web 検索: 結果のページ移動

この例では、Services_Yahoo の「ページ移動」 機能についてご覧いただきます。ページ移動機能とは、検索結果の一部分 (たとえば 20 件) が画面に表示され、それ以外の部分へ移動するための リンクが同時に表示されるような機能を意味します。簡単に言うと、 Yahoo の検索結果ページ の一番下の部分のようなものです。

TBD

注意 画像・ニュース・動画 あるいはローカル検索を行いたい場合は、 factory() のコール時に渡した引数 "web""image""news""video" あるいは "local" のいずれかに置き換えればいいだけです。

Yahoo! Content Analysis サービスの使用

以下の例では、Yahoo! が提供する Content Analysis Services を使用する方法を説明します。

例 59-4Term Extraction Service (用語抽出サービス)

Term Extraction サービスは、大量の文書から有意な単語や熟語を抽出し、 その一覧を返します。


<?php
require_once "Services/Yahoo/ContentAnalysis.php";

try {
    $search = Services_Yahoo_ContentAnalysis::factory("termExtraction");
    $search->setContext("Italian sculptors and painters of the "
        . "renaissance favored the Virgin Mary for inspiration.");
    $search->setQuery("madonna");

    $results = $search->submit();

    foreach ($results as $result) {
        echo $result . "\n";
    }

} catch (Services_Yahoo_Exception $e) {
    echo "エラー: " . $e->getMessage() . "\n";

    foreach ($e->getErrors() as $error) {
        echo "* " . $error . "\n";
    }
}
?>

setQuery() のコールは省略することもできます。 このメソッドでパラメータを設定することにより、エンジンが抽出作業を 行うのを助けることができますが、これは必須というわけではありません。

例 59-5Spelling Suggestion Service (スペル訂正サービス)

Spelling Suggestion サービスは、指定した用語についてのスペルの 修正候補を返します。

以下のコードは、"madnna" という用語について スペルの修正候補を Yahoo に問い合わせます。実際のところ このクエリは結果を 1 件だけしか返さないのですが、現時点では $results をループさせる以外にこの結果を 取得する方法はありません。


<?php
require_once "Services/Yahoo/ContentAnalysis.php";

try {
    $search = Services_Yahoo_ContentAnalysis::factory("spellingSuggestion");
    $search->setQuery("madnna");

    $results = $search->submit();

    foreach ($results as $result) {
        echo $result . "\n";
    }
} catch (Services_Yahoo_Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";

    foreach ($e->getErrors() as $error) {
        echo "* " . $error . "\n";
    }
}
?>