通过“google-api-php-client”库检索 Google Search Analytics

Posted

技术标签:

【中文标题】通过“google-api-php-client”库检索 Google Search Analytics【英文标题】:Retrieving Google Search Analytics by "google-api-php-client" library 【发布时间】:2016-01-06 18:13:00 【问题描述】:

我仍然是任何 API 的初学者,所以需要帮助。 据我了解,google-api-php-client 库中的服务 "Webmasters" 允许我接收 CTRClicks 等数据。

我从 github 下载了 lib 文件并将其放入 localhost。然后在 Google Developers Console 我创建了项目(不太明白,为什么?这个项目不包含任何关于网站的信息,我需要哪些搜索信息)。然后为项目创建服务器密钥(通过 Google Developers Console 中的“添加凭据”,无需为其输入任何 ip)。 Google Search Console API 已启用。我是我网站的完整用户(我可以在 Google Search Console 中看到它)。我当然也有 Google 帐户,并且已登录。

我在 lib 的 examples 文件夹中创建的源文件,以及其他示例:

include_once "templates/base.php";    
require_once realpath(dirname(__FILE__) . '/../src/Google/autoload.php');

$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$apiKey = "AIzaSyCOJ56353XByxh8rCpfgfhgfhZzopSLUe"; // Value of server key, that I created in for my project ().

if (strpos($apiKey, "<") !== false) 
  echo missingApiKeyWarning();
  exit;

$client->setDeveloperKey($apiKey);

//here are my efforts
$service = new Google_Service_Webmasters($client);
var_dump($service->searchanalytics->query(
'http://sschesnok.com.ua',
 new Google_Service_Webmasters_SearchAnalyticsQueryRequest())); //I'm not sure about correctness of 2nd param

我看到错误:

<b>Fatal error</b>:  Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/webmasters/v3/sites?key=AIzaSyCOJXByxh8rCpfZzopSLUerl6LjWmziqhw: (401) Login Required' in    G:\server\www\gwt\gs\src\Google\Http\REST.php:110
Stack trace:
#0 G:\server\www\gwt\gs\src\Google\Http\REST.php(62):   Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 G:\server\www\gwt\gs\src\Google\Task\Runner.php(174): call_user_func_array(Array, Array)
#3 G:\server\www\gwt\gs\src\Google\Http\REST.php(46): Google_Task_Runner-&gt;run()
#4 G:\server\www\gwt\gs\src\Google\Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#5 G:\server\www\gwt\gs\src\Google\Service\Resource.php(237): Google_Client-&gt;execute(Object(Google_Http_Request))
#6 G:\server\www\gwt\gs\src\Google\Service\Webmasters.php(492): Google_Service_Resource-&gt;call('list', A in <b>G:\server\www\gwt\gs\src\Google\Http\REST.php</b> on line <b>110</b><br />

(401) Login Required - 我哪里错了?什么登录名和我需要通过什么地方?

第二个问题 - 我需要将什么作为第二个参数传递给 query 方法?

请帮我弄清楚:通过这个库检索搜索信息。我从未使用过任何 API,因此几乎一无所知。

【问题讨论】:

api 密钥用于您试图获取私有数据的公共 api 使用 Oauth2。 github.com/google/google-api-php-client/blob/master/examples/… @DalmTo,你的意思是,我必须使用 client_id、client_secret、redirect_uri 而不是 API 密钥?如果我想检索搜索数据,根据您的链接使用示例会更好吗? 是的,您需要使用 Oauth2 的客户端 ID 和客户端密码,而不是不是 Oauth2 的 api 密钥。我没有带有搜索数据的 Oauth2 示例,您可以阅读该教程并在了解其工作原理后对其进行编辑。 你能帮我理解吗? U 说,那个 API 密钥 ||使用 OAuth 2.0。但是here,在我看到的第一张表中,在某些情况下使用了密钥 && OAuth 2。这些案例是什么?谢谢。 【参考方案1】:

这是我的工作代码。我使用了这个库的dev-master 版本。

include_once "templates/base.php";
session_start();

require_once realpath(dirname(__FILE__) . '/../src/Google/autoload.php');

$client_id = '**********************.apps.googleusercontent.com';
$client_secret = '*******************';
$redirect_uri = 'http://localhost/gwt/gr/examples/user-example.php';

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->addScope("https://www.googleapis.com/auth/webmasters");

if (isset($_REQUEST['logout'])) 
  unset($_SESSION['access_token']);


if (isset($_GET['code'])) 
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
  header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));


if (isset($_SESSION['access_token']) && $_SESSION['access_token']) 
  $client->setAccessToken($_SESSION['access_token']);
 else 
  $authUrl = $client->createAuthUrl();


if ($client->getAccessToken()) 
  $_SESSION['access_token'] = $client->getAccessToken();

    $q = new \Google_Service_Webmasters_SearchAnalyticsQueryRequest();

    $q->setStartDate('2015-09-01');
    $q->setEndDate('2015-09-01');
    $q->setDimensions(['page']);
    $q->setSearchType('web');
    try 
       $service = new Google_Service_Webmasters($client);
       $u = $service->searchanalytics->query('http://sschesnok.com.ua', $q);
       echo '<table border=1>';
       echo '<tr>
          <th>#</th><th>Clicks</th><th>CTR</th><th>Imp</th><th>Page</th><th>Avg. pos</th>';
          for ($i = 0; $i < count($u->rows); $i++) 
            echo "<tr><td>$i</td>";
            echo "<td>$u->rows[$i]->clicks</td>";
            echo "<td>$u->rows[$i]->ctr</td>";
            echo "<td>$u->rows[$i]->impressions</td>";
            echo "<td>$u->rows[$i]->keys[0]</td>";
            echo "<td>$u->rows[$i]->position</td>";

            /* foreach ($u->rows[$i] as $k => $value) 
                //this loop does not work (?)
             */
            echo "</tr>";
                       
        echo '</table>';
      catch(\Exception $e ) 
        echo $e->getMessage();
       


<div class="request">
<?php 
    if (isset($authUrl)) 
      echo "<a class='login' href='" . $authUrl . "'>Connect Me!</a>";
     else 
      echo <<<END
     <form id="url" method="GET" action="$_SERVER['PHP_SELF']">
       <input name="url" class="url" type="text">
       <input type="submit" value="Shorten">
     </form>
     <a class='logout' href='?logout'>Logout</a>
END;

?>
</div>

访问令牌定期过期。

【讨论】:

请问,您是如何找到所有文档以便与该 Google 客户端合作的?我什么也找不到。在 Google - 他们只展示了如何使用 Books 服务,但是 webmaters 服务的文档在哪里? @Upsilon42 也许,这对你有帮助:github.com/google/google-api-php-client 和 developers.google.com/webmaster-tools/… 感谢布尔的快速回答!但是我已经访问了这些链接。我下载了 php 客户端,在他们的示例中它仅适用于 Books 服务,我需要搜索控制台服务。另一个链接 os 用于 java,我使用 php。例如,您是如何知道如何使用 Google_Service_Webmasters_SearchAnalyticsQueryRequest 以及您所做的所有程序的? @Upsilon42 我不记得具体是怎么做到的,但请记住,这很困难。但是今天我找到了 docs with examples 。我没试过,但看起来不像 2 年前那么可怕。 我们尝试了此代码 .. 我们收到以下错误 调用 POST googleapis.com/webmasters/v3/sites/http%3A%2F%2Fwww.mysite.in/… 时出错:(403) 用户对站点“mysite.in”没有足够的权限。另见:support.google.com/webmasters/answer/2451999.

以上是关于通过“google-api-php-client”库检索 Google Search Analytics的主要内容,如果未能解决你的问题,请参考以下文章

通过 google-api-php-client 来自 Youtube API 的 accessNotConfigured 错误 (403)

使用 gmail-api 和 google-api-php-client 发送电子邮件

空批次在使用 google-api-php-client 的 DoubleClick Search API 中遇到错误

10月31日V1被取消后,如何继续使用PHP客户端库'googleapis / google-api-php-client'访问'Youtube Analytics API&#

使用服务帐户通过 PHP API 访问 BigQuery 时出现“无效凭据”

谷歌api php客户端