Получение Google Search Analytics с помощью библиотеки google-api-php-client

Я все еще новичок в любом API, поэтому нужна помощь. Насколько я понимаю, служба "Веб-мастера" в google-api- Библиотека php-client позволяет мне получать такие данные, как CTR, Clicks и т. д.

Я скачал файлы lib с github и поместил их на локальный хост. Затем в Google Developers Console я создал проект (не очень понимаю, для чего? Этот проект не содержит никакой информации о сайте, какая поисковая информация мне нужна). И после этого создал серверный ключ для проекта (через "Добавить учетные данные" в Google Developers Console, не вводя для него никакого ip). API Google Search Console включен. Я являюсь полноправным пользователем своего сайта (я вижу его в Google Search Console). Также у меня есть учетная запись Google, конечно, и я вошел в систему.

Мой исходный файл, созданный в папке 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, поэтому почти ничего в нем не понимаю.


person Boolean_Type    schedule 08.10.2015    source источник
comment
ключ API используется для общедоступных API, которые вы пытаетесь получить с помощью Oauth2. github.com/google/google- api-php-client/blob/мастер/примеры/   -  person DaImTo    schedule 09.10.2015
comment
@DalmTo, ты имеешь в виду, что я должен использовать client_id, client_secret, redirect_uri вместо ключа API? И не лучше ли это сделать на примере по вашей ссылке, если я хочу получить данные поиска?   -  person Boolean_Type    schedule 09.10.2015
comment
Да, вам нужно использовать идентификатор клиента и секрет клиента, который является Oauth2, вместо ключа API, который не является Oauth2. У меня нет примера Oauth2 с данными поиска, вы можете прочитать это руководство и отредактировать его, как только поймете, как это работает.   -  person DaImTo    schedule 09.10.2015
comment
Можете ли вы помочь мне с пониманием? Вы сказали, что ключ API || Используется OAuth 2.0. Но здесь в 1-й таблице я увидел, что в некоторых случаях используется ключ && OAuth 2. Что это за случаи? Спасибо.   -  person Boolean_Type    schedule 10.10.2015


Ответы (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>

Токен доступа периодически истекает.

person Boolean_Type    schedule 10.10.2015
comment
Пожалуйста, как вы нашли всю документацию для работы с этим клиентом Google? Я ничего не могу найти. В гугле - только показывают как пользоваться сервисом Книги, а где документация по сервису вебмастеров? - person Upsilon42; 11.05.2017
comment
@ Upsilon42 Возможно, это будет вам полезно: github.com/google/google-api -php-client и developers.google.com/webmaster-tools/ - person Boolean_Type; 11.05.2017
comment
Спасибо за этот быстрый ответ Boollean! Но я уже посещал эти ссылки. Я скачал php-клиент, и в их примере это только для службы «Книги», мне нужна служба консоли поиска. И другая ссылка os для java, я использую php. Откуда вы узнали, как использовать, например, Google_Service_Webmasters_SearchAnalyticsQueryRequest и всю эту программу, которую вы сделали? - person Upsilon42; 11.05.2017
comment
@ Upsilon42 Я не помню, как именно, но помню, что это было сложно. Но сегодня я нашел документы с примеры . Не пробовал, но выглядит не так страшно, как 2 года назад. - person Boolean_Type; 06.12.2017
comment
Мы попробовали этот код. Мы получили следующую ошибку: Ошибка при вызове POST https://www.googleapis.com/webmasters/v3/sites/http%3A%2F%2Fwww.mysite.in/searchAnalytics/query: (403) У пользователя недостаточно прав для сайта 'mysite.in'. См. также: support.google.com/webmasters/answer/2451999. - person Vetrivel Pandiyarajan; 10.08.2018