web-dev-qa-db-ja.com

使用方法PHP Googleカスタム検索エンジンのクライアント

私はこれが私の馬鹿げた間違いのように感じていますが、 google-api-php-client を使用して簡単な検索を行う方法を理解できません。私の目標は、私のサイトのGoogle検索エンジンに対して単純なキーワードクエリを実行することです。

私はAPIキー、Google検索エンジンを作成し、APIクライアントのリリースをダウンロードしましたが、 PHPクライアントのGoogleサイト にはクライアントの使用方法に関するドキュメントがないようです 関連する例のみ これまでに見つけたのは、特にGoogleの書籍サービスを検索することです。問題は、例が示すように、検索サービスによって検索結果の種類が異なり、Google_Serviceから結果を取得する方法に関するドキュメントが見つからないということです。

このように簡単な検索を設定できると思いますが、実際に結果を取得する方法がわかりません。

include_once __DIR__ . '/vendor/autoload.php';
...
public function __construct($searchTerm) {
    $client = new Google_Client();
    $client->setApplicationName("My_First_Search");
    $client->setDeveloperKey(self::GCSE_API_KEY);
    $service = new Google_Service($client);
    $optParams = array('filter' => $searchTerm);
    $results = $service->???

ドキュメンテーションはそこにある必要がありますが、明白な場所にはありません...

更新(1/14/17)

(Update 1/21/17:実際、これらのドキュメントは私にはあまり役に立ちませんでしたが、参考までに残しておきます)

Phpdocを使用して、Google apiclientのAPIドキュメントを生成しました。私はリポジトリを作り、 phpdocsとgithub上のライブラリ を置きました。 phpdocsはここで参照できます

うまくいけば、それは誰かに役立つでしょう。残念ながら、ドキュメントを使用しても、適切な使用法を解明できません。 hugeであるため、まだgoogle apiclient-servicesパッケージのドキュメントを生成していませんが、(githubページのディスク制限によっては)必要に応じてそれを実行できます。

16
doub1ejack

私を正しい軌道に乗せてくれた@gennadiyに感謝します。結果を取得するために->cse->listCse()を使用するという彼の提案がなければ、おそらく私はあきらめて別のライブラリーを探しに行ったでしょう。幸いなことに、このライブラリを使用するために必要なことはこれでほぼすべてです。

簡単な例

検索の実行は非常に簡単です。基本的には次のようになります。

include_once __DIR__ . '/vendor/autoload.php';

$GCSE_API_KEY = "nqwkoigrhe893utnih_gibberish_q2ihrgu9qjnr";
$GCSE_SEARCH_ENGINE_ID = "937592689593725455:msi299dkne4de";

$client = new Google_Client();
$client->setApplicationName("My_App");
$client->setDeveloperKey($GCSE_API_KEY);
$service = new Google_Service_Customsearch($client);
$optParams = array("cx"=>self::GCSE_SEARCH_ENGINE_ID);    
$results = $service->cse->listCse("lol cats", $optParams);

結果オブジェクトはIteratorを実装しているため、次のようにループできます。

foreach($results->getItems() as $k=>$item){
    var_dump($item);
}

Googleの前提条件

ただし、このライブラリを使用するには、最初にいくつかのGoogleの設定を行う必要があります。これらは最終的に Google APIクライアントライブラリPHP(Beta) のWebサイトで言及されていますが、クリックして掘り下げる必要があります。以下の最後のものは欠落します:

  1. カスタム検索エンジンが必要になります。インターネット上のカスタム検索エンジンへの参照のほとんどは、 ではないプログラムによる検索を試みている。あなたはそれを必要とし、それらはここで簡単に設定できます: https://cse.google.com/cse/all
  2. Googleプロジェクトが必要になります。繰り返しますが、どこに行くべきかわかっていれば、簡単にセットアップできます: https://console.developers。 google.com/apis/dashboard
  3. APIキー(別名、開発者キー)が必要になります。まだ持っていない場合は、ここに移動して新しいキーを作成してください。 https://console.developers.google.com/apis/credentialsenter image description here
  4. プロジェクトでGoogleカスタム検索を有効にする必要があります。この時点でGoogleにクエリを実行できますが、次の場合はエラー応答が返されることがあります。プロジェクトでGoogleカスタム検索をまだ有効にしていません。ダッシュボードに移動して、青色の[APIを有効にする]リンクをクリックし、Googleカスタム検索を検索して有効にします。 https://console.developers.google.com/apis/dashboardenter image description here

完全にコメントされた例

これは、上記の例よりも現実的な例です。それはまだ非常に単純ですが、多くの説明コメントを付けて2つの異なる方法で何か新しいものを説明することは常にいいことです。

<?php

include_once __DIR__ . '/vendor/autoload.php';

/**
 * Retrieves a simple set of google results for a given plant id.
 */
class GoogleResults implements IteratorAggregate {

    // Create one or more API keys at https://console.developers.google.com/apis/credentials
  const GCSE_API_KEY = "nqwkoigrhe893utnih_gibberish_q2ihrgu9qjnr";

    /* The search engine id is specific to each "custom search engine"
     * you have configured at https://cse.google.com/cse/all     

     * Remember that you must have enabled Custom Search API for the project that
     * contains your API Key.  You can do this at the following url:
     * https://console.developers.google.com/apis/api/customsearch.googleapis.com/overview?project=vegfetch-v01&duration=PT1H    

     * If you fail to enable the Custom Search API before you try to execute a search
     * the exception that is thrown will indicate this.  */
    const GCSE_SEARCH_ENGINE_ID = "937592689593725455:msi299dkne4de";

    // Holds the GoogleService for reuse
    private $service;

    // Holds the optParam for our search engine id
    private $optParamSEID;

    /**
     * Creates a service object for our Google Custom Search.  The API key is 
     * permiently set, but the search engine id may be changed when performing 
     * searches in case you want to search across multiple pre-prepared engines.
     * 
     * @param string $appName       Optional name for this google search
     */
    public function __construct($appName = "My_Search") {

        $client = new Google_Client();

        // application name is an arbitrary name
        $client->setApplicationName($appName);

        // the developer key is the API Key for a specific google project
        $client->setDeveloperKey(self::GCSE_API_KEY);

        // create new service
        $this->service = new Google_Service_Customsearch($client);

        // You must specify a custom search engine.  You can do this either by setting
        // the element "cx" to the search engine id, or by setting the element "cref"
        // to the public url for that search engine.
        // 
        // For a full list of possible params see https://github.com/google/google-api-php-client-services/blob/master/src/Google/Service/Customsearch/Resource/Cse.php
        $this->optParamSEID = array("cx"=>self::GCSE_SEARCH_ENGINE_ID);

  }

    /**
     * A simplistic function to take a search term & search options and return an 
     * array of results.  You may want to 
     * 
     * @param string    $searchTerm     The term you want to search for
     * @param array     $optParams      See: For a full list of possible params see https://github.com/google/google-api-php-client-services/blob/master/src/Google/Service/Customsearch/Resource/Cse.php
     * @return array                                An array of search result items
     */
  public function getSearchResults($searchTerm, $optParams = array()){
        // return array containing search result items
        $items = array();

        // Merge our search engine id into the $optParams
        // If $optParams already specified a 'cx' element, it will replace our default
        $optParams = array_merge($this->optParamSEID, $optParams);

        // set search term & params and execute the query
        $results = $this->service->cse->listCse($searchTerm, $optParams);

        // Since cse inherits from Google_Collections (which implements Iterator)
        // we can loop through the results by using `getItems()`
        foreach($results->getItems() as $k=>$item){
            var_dump($item);
            $item[] = $item;
        }

        return $items;
  }
}
18
doub1ejack

Google_ServiceではなくGoogle_Service_Customsearchを使用する必要があります

$service = new Google_Service_Customsearch($client);

その後:

$results = $service->cse->listCse($searchTerm, $optParams);
6