私はこれが私の馬鹿げた間違いのように感じていますが、 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->???
ドキュメンテーションはそこにある必要がありますが、明白な場所にはありません...
(Update 1/21/17:実際、これらのドキュメントは私にはあまり役に立ちませんでしたが、参考までに残しておきます)
Phpdocを使用して、Google apiclient
のAPIドキュメントを生成しました。私はリポジトリを作り、 phpdocsとgithub上のライブラリ を置きました。 phpdocsはここで参照できます 。
うまくいけば、それは誰かに役立つでしょう。残念ながら、ドキュメントを使用しても、適切な使用法を解明できません。 hugeであるため、まだgoogle apiclient-servicesパッケージのドキュメントを生成していませんが、(githubページのディスク制限によっては)必要に応じてそれを実行できます。
私を正しい軌道に乗せてくれた@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 APIクライアントライブラリPHP(Beta) のWebサイトで言及されていますが、クリックして掘り下げる必要があります。以下の最後のものは欠落します:
これは、上記の例よりも現実的な例です。それはまだ非常に単純ですが、多くの説明コメントを付けて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;
}
}
Google_Service
ではなくGoogle_Service_Customsearch
を使用する必要があります
$service = new Google_Service_Customsearch($client);
その後:
$results = $service->cse->listCse($searchTerm, $optParams);