Google API PHP简单查询示例存在问题

时间:2014-05-16 15:46:52

标签: php google-api google-api-php-client

我试图让Google简单查询示例(关闭GitHub)正常工作,遗憾的是肯定没有成功...我得到的是退出代码255.

我确定问题出在对Google服务器的调用中,因此在代码中添加了一个异常处理程序。该程序现在看起来像这样:

<?php
    /*
     * Copyright 2013 Google Inc.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    include_once "templates/base.php";
    echo pageHeader("Simple API Access");

    /************************************************
    Make a simple API request using a key. In this
    example we're not making a request as a
    specific user, but simply indicating that the
    request comes from our application, and hence
    should use our quota, which is higher than the
    anonymous quota (which is limited per IP).
     ************************************************/
    set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
    require_once 'Google/Client.php';
    require_once 'Google/Service/Books.php';

    /************************************************
    We create the client and set the simple API
    access key. If you comment out the call to
    setDeveloperKey, the request may still succeed
    using the anonymous quota.
     ************************************************/
    $client = new Google_Client();
    $client->setApplicationName("Client_Library_Examples");
    $apiKey = "******************************************";
    if ($apiKey == '<YOUR_API_KEY>') {
        echo missingApiKeyWarning();
    }
    $client->setDeveloperKey($apiKey);
    $service = new Google_Service_Books($client);

    /************************************************
    We make a call to our service, which will
    normally map to the structure of the API.
    In this case $service is Books API, the
    resource is volumes, and the method is
    listVolumes. We pass it a required parameters
    (the query), and an array of named optional
    parameters.
     ************************************************/
    $optParams = array('filter' => 'free-ebooks');


    // next line replaced with an exception handling block
    // $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);

    try{
        $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
        var_dump($results);
    } catch (Exception $e) {
        echo "call error: " .$e->getMessage()."\n";
        echo $e->getTraceAsString()."\n";
    }

    /************************************************
    This call returns a list of volumes, so we
    can iterate over them as normal with any
    array.
    Some calls will return a single item which we
    can immediately use. The individual responses
    are typed as Google_Service_Books_Volume, but
    can be treated as an array.
     ***********************************************/
    echo "<h3>Results Of Call:</h3>";

    // update to code (off StackOverflow)

    //foreach ($results as $item) {
    //  echo $item['volumeInfo']['title'], "<br /> \n";
    //}

    foreach($results->getItems() as $item){
        echo $item->volumeInfo->getTitle(), "<br /> \n";
    }

    /************************************************
    This is an example of deferring a call.
     ***********************************************/
    //$client->setDefer(true);
    //$optParams = array('filter' => 'free-ebooks');
    //$request = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
    //$results = $client->execute($request);
    //
    //echo "<h3>Results Of Deferred Call:</h3>";
    //foreach ($results as $item) {
    //  echo $item['volumeInfo']['title'], "<br /> \n";
    //}
    //
    echo pageFooter(__FILE__);

错误跟踪如下:

   call error: HTTP Error: Unable to connect: '0'
#0 C:\srv\GoogleApi\Google\IO\Abstract.php(117): 
   Google_IO_Stream->executeRequest(Object(Google_Http_Request))
#1 C:\srv\GoogleApi\Google\Http\REST.php(42):
   Google_IO_Abstract->makeRequest(Object(Google_Http_Request))
#2 C:\srv\GoogleApi\Google\Client.php(499): 
   Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#3 C:\srv\GoogleApi\Google\Service\Resource.php(195): 
   Google_Client->execute(Object(Google_Http_Request))
#4 C:\srv\GoogleApi\Google\Service\Books.php(2304): 
   Google_Service_Resource->call('list', Array, 'Google_Service_...')
#5 C:\srv\GoogleApi\simple-query.php(60): 
   Google_Service_Books_Volumes_Resource->listVolumes('Henry David Tho...', Array)
#6 {main}

<h3>Results Of Call:</h3>
Process finished with exit code 255

任何帮助都将不胜感激。

注意:这可能只是一个身份验证问题。我是一名无法访问Google控制台的远程工作人员,所以必须依赖发誓他提供了正确密钥的老板!

1 个答案:

答案 0 :(得分:0)

我实际上是GitHub上的rowanrh。在上面发布后 - 并且没有得到任何帮助 - 我决定在GitHub上复制帖子。

我刚刚通过更改以下PHP.ini设置解决了这个问题:

  1. 我设置(通过取消注释)extension = php_openssl.dll - “https”网址所必需的;和
  2. 我设置了时区。谷歌在时间上很挑剔,所以这可能会影响结果。
  3. 在IDE中测试后(我使用PhpStorm)我重新启动了Apache,一切都很顺利!