1
我試圖讓Google的簡單查詢示例(關閉GitHub)工作,不幸的是確實缺乏成功......我得到的是退出代碼255。Google API的問題PHP簡單查詢的例子
我確定問題出在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控制檯的遠程工作人員,因此必須依靠發誓提供了正確密鑰的老闆!
嗨rowanrh,這個問題類似於http://stackoverflow.com/questions/25343617/google-php-api-failed-to-open-stream?我試圖解決這個問題,似乎沒有得到答案。我在Linux服務器上運行它,所以DLL的東西不起作用。我還沒有嘗試設置時區。你會有更多的建議嗎? – ashwinjv
@Ashwin:我不確定這是否有幫助,但它的價值:PHP必須配置爲允許HTTPS(在Windows中,這意味着取消PHP配置中php_openssl擴展的註釋)。如果你有zlib問題,我建議你禁止zlib(在PHP配置中)。通過搜索Google提供的模塊「zlib」 – user173847
,您可以找到對zlib的調用。我試過了,看起來太麻煩了。我轉移到使用python谷歌API並設置我的服務器來這樣做。由於我更喜歡python,因此我能夠創建我的請求並獲得我期待的結果。謝謝你的幫助。 – ashwinjv