当前位置: 首页 > 知识库问答 >
问题:

如何将PHP客户端用于Google自定义搜索引擎

容磊
2023-03-14

我觉得这是我的一个愚蠢的错误,但我不知道如何使用google-api-php-客户端来做一个简单的搜索。我的目标是运行简单的关键字查询对谷歌搜索引擎为我的网站。

我已经创建了我的api密钥,一个google搜索引擎,并下载了一个api客户端版本,但是php客户端的google站点似乎没有任何关于如何使用客户端的文档,而且到目前为止,我发现的唯一一个相关示例专门搜索google的图书服务。问题是,这个例子意味着不同的搜索服务有不同的搜索结果类型,我找不到任何关于如何从Google\u服务检索结果的文档。

我想我可以像这样设置一个简单的搜索,但是我不知道如何实际检索结果。

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/21/17:实际上,这些文档并没有帮到我太多,但我会把它们留下仅供参考)

我使用phpdoc为googleapiclient生成api留档。我做了一个回购,把phpdocs和图书馆放在github上。phpdocs在这里可以浏览。

所以希望这会对某人有所帮助。不幸的是,即使有了这些文档,我也很难理解正确的用法。我还没有为GoogleApiclient服务包生成文档,因为它们太大了,但如果需要,我可以这样做(取决于github页面上的磁盘限制)。

共有3个答案

陆曜文
2023-03-14

listCse()函数(现在)只接受一个参数——API文档中提到的完整键数组(https://developers.google.com/custom-search/v1/reference/rest/v1/cse/list).

因此-阵列中至少必须包含cx和q密钥。

简宏义
2023-03-14

您必须使用的不是Google\u服务,而是Google\u服务

$service = new Google_Service_Customsearch($client);

然后:

$results = $service->cse->listCse($searchTerm, $optParams);
岳迪
2023-03-14

感谢@gennadiy让我走上正轨。没有他的建议使用-

执行搜索非常简单;它基本上看起来像这样:

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);

results对象实现了迭代器,因此我们可以按如下方式对其进行循环:

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

为了使用这个库,你必须先设置一些谷歌的东西。这些东西最终会在谷歌应用编程接口客户端库PHP(测试版)网站上提到,但是你必须点击周围

  1. 你需要一个自定义搜索引擎。不要被这样一个事实所迷惑,即互联网上大多数对自定义搜索引擎的引用都是针对那些不试图进行编程搜索的人的。你需要一个,它们很容易在这里设置:https://cse.google.com/cse/all
  2. 你需要一个谷歌项目。同样,当你知道去哪里时,设置很容易:https://console.developers.google.com/apis/dashboard
  3. 您将需要一个API密钥(又名开发者密钥)。如果您还没有密钥,请转到此处并创建一个新密钥:https://console.developers.google.com/apis/credentials在此处输入图像描述
  4. 您需要为您的项目启用谷歌自定义搜索。在这一点上,你可以向谷歌查询,但如果你还没有为你的项目启用谷歌自定义搜索,你可能会得到一个错误的响应。转到仪表板,单击蓝色的Enable API链接,搜索Google Custom Search并启用它。https://console.developers.google.com/apis/dashboard在此处输入图像描述

这是一个比上面的例子更现实的例子。它仍然非常简单,但是用两种不同的方式解释一些新的东西并附上许多解释性注释总是很好的。

<?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;
  }
}

 类似资料:
  • 我有一个在spring boot应用程序中创建弹性搜索索引的代码。目前使用的客户端是transport客户端,它现在根据弹性搜索文档进行折旧,现在被高级Rest客户端取代。 用于使用高级Rest客户端创建索引。我见过这个代码。 这里的fieldsMapping是一个json文件,它包含有关analyzer、tokenizer和filter的详细信息,并作为字符串传递给这个方法。我无法在java r

  • 这里有一个自定义api,可以使用传输客户端删除索引,使用admin删除import语句,并且工作正常。 我正在使用Java高级Rest客户端编写同样的代码,但在那里找不到合适的import语句。根据我所阅读的内容,admin不用于Java高级Rest客户端,因为它似乎已被弃用。 使用高级Rest客户端时应该使用新的导入。我可以用它创建索引,但找不到删除请求或响应的相同导入。 导入组织。elasti

  • 我正在尝试使用SearchContext、IndexSearcherHelperUtil和所有其他东西,为Liferay 7.3.5 GA6开发一个定制的web内容搜索portlet。 我有一些不同字段的DDM结构,从我在elasticsearch索引上看到的,这些字段在嵌套文档中被索引,如下所示: 这与我以前知道的旧方法不同,在旧方法中,自定义字段被索引为 现在我明白了 以下是代码: 这仍然是一

  • 我试图为Spring Cloud OpenFeign提供CloseableHttpClient。Spring Cloud Open Faign Documentation表示它支持CloeableHttpClient。Spring文档没有给出任何实际替换HTTP客户端的例子。 基本上,我将SSLContext提供给HTTP客户端,我想假装使用这个SSLContext加载的客户端。如何将这个Clos

  • 通过以下命令,我可以查看弹性搜索部署的endpoint,并且从Postman那里没有任何问题:GET https://:@d97215aee2.us-east-1.aws.found.io:9243 我也可以使用邮递员的这个命令创建索引...将https://el弹力:4yqimxfosz9mxpgy1fj7t5bu@d97218f74f6d48489b355dd7d665aee2.us-east

  • 问题内容: 我正在与socket.io聊天应用程序,我想用我的自定义客户端ID,而不是默认的(,)。连接时是否有任何发送自定义标识符的方式,或仅使用某种方式来跟踪每个ID的自定义名称?谢谢! 问题答案: 您可以在服务器上创建一个数组,并在其上存储自定义对象。例如,您可以存储Socket.io创建的ID和每个客户端发送到服务器的自定义ID: 在此示例中,您需要从每个客户端调用 storeClient