PHP-клиент Google API — служба контактов

Я, после нескольких часов глубокой, глубокой боли, наконец-то немного приблизился к настройке и использованию PHP-клиента Google API, используя это руководство (на основе Google Analytics).

Итак, теперь я, наконец, аутентифицирую себя таким образом, который кажется законным и официальным. Моей естественной мыслью было, что должен существовать contrib/Google_ContactsService.php, но, к моему удивлению, его нигде нет среди 32 других классов обслуживания.

Я чувствую, как вернуться к царапинам. Есть ли способ, которым я могу - законно и официально - получить контакты конкретных пользователей? (есть тонны руководств, но все они устаревшие и хакерские).

РЕДАКТИРОВАТЬ: я заметил, что здесь доступна более новая версия библиотеки, но там по-прежнему нет службы «Контакты», которую можно найти в .../Сервис/папка

EDIT: Мой прогресс. Последние строки не дают ответа от Google: 401. There was an error in your request. - Я думаю, это из-за отсутствия разрешения (я не спрашивал разрешения для контактов). Но как мне это сделать без "Google_ContactsService.php"? Я потерян. См. код:

<?php
session_start();

/**
 * Require the libaries
 */

    require_once 'assets/php/Google/Google_Client.php';
    require_once 'assets/php/Google/contrib/Google_AnalyticsService.php'; // from tutorial - I am supposed to get the Contacts Service, which is nowhere to find.

/**
 * Set up the Google_Client
 */

    $client = new Google_Client();
    $client->setAccessType('online'); // default: offline
    $client->setApplicationName($apiConfig['application_name']);
    $client->setClientId($apiConfig['oauth2_client_id']);
    $client->setClientSecret($apiConfig['oauth2_client_secret']);
    $client->setRedirectUri($apiConfig['oauth2_redirect_uri']);
    $client->setDeveloperKey($apiConfig['developer_key']); // API key

/**
 * $service implements the client interface, has to be set before auth call
 */

    $service = new Google_AnalyticsService($client);

/**
 * Log out
 */

    if (isset($_GET['logout'])) { // logout: destroy token
        unset($_SESSION['google_token']);
        exit('Logged out.');
    }

/**
 * Google auth code received
 *
 * Store access token
 */

    if (isset($_GET['code'])) { // we received the positive auth callback, get the token and store it in session
        $client->authenticate();
        $_SESSION['google_token'] = $client->getAccessToken();
    }

/**
 * Set auth token
 */

    if (isset($_SESSION['token'])) { // extract token from session and configure client
        $token = $_SESSION['token'];
        $client->setAccessToken($token);
    }

/**
 * If no token, redirect and auth
 */

    if (!$client->getAccessToken()) { // auth call to google
        $authUrl = $client->createAuthUrl();
        header("Location: ".$authUrl);
        exit;
    }

/**
 * Get contacts
 */

    $access_token = json_decode($client->getAccessToken())->access_token;

    $url = 'https://www.google.com/m8/feeds/contacts/default/full?alt=json&v=3.0&oauth_token='.$access_token;

    $response =  file_get_contents($url);

    exit($response);

    echo 'Hello, world.';

person FooBar    schedule 25.03.2014    source источник


Ответы (3)


Из здесь:

К сожалению, API контактов является одним из старых GData, а эта библиотека предназначена для более новых API. Вы можете использовать часть библиотеки OAuth для запроса области (https://www.googleapis.com/auth/contacts.readonly) и используйте токен для выполнения запроса, но вам придется анализировать данные вручную. В Zend Framework есть классы Zend_Gdata, которые могут немного упростить чтение результатов!

Я нашел пример использования старой библиотеки< /а>.

person Vinicius Pinto    schedule 25.03.2014

Обновление от 28 марта 2018 г.

Я создал новый пакет для управления контактами Google на основе нового API Google People. Если вы начинаете новый проект, я бы порекомендовал вам использовать этот пакет вместо упомянутого в моем исходном посте ниже.

Более подробную информацию можно найти здесь: https://github.com/rapidwebltd/php-google-people-api


Исходное сообщение:

Недавно мне пришлось поработать с этим, и, обнаружив отсутствие службы контактов в официальном PHP-клиенте Google, я создал PHP-библиотеку (с лицензией MIT) для API Google Contacts.

Одна из целей состоит в том, чтобы действительно упростить некоторые процессы. Итак, чтобы ответить на ваш вопрос, после настройки библиотеки следующий код — это все, что нужно для извлечения контактов.

require_once '../../../vendor/autoload.php';
use rapidweb\googlecontacts\factories\ContactFactory;
$contacts = ContactFactory::getAll();
if (count($contacts)) {
    echo 'Test retrieved '.count($contacts).' contacts.';
} else {
    echo 'No contacts retrieved!';
}

Библиотеке нужно немного поработать, но она хорошо работает для базового поиска, создания и обновления контактов. Его также можно установить через composer, если это необходимо. Просто добавьте следующее в свой composer.json и запустите composer update.

{
  "require": {
       "rapidwebltd/php-google-contacts-v3-api": "dev-master"
   }
}

Дополнительные инструкции по настройке и примеры доступны на GitHub.

Ссылка на GitHub: https://github.com/rapidwebltd/php-google-contacts-v3-api

person DivineOmega    schedule 30.07.2015

Я смог заставить это работать через новую библиотеку... в основном. Конечно, это не так гладко, как полная реализация Сервиса, но это заставляет все двигаться вперед.

Git библиотеку, как указано в сообщениях выше. Я начал с примеров здесь: https://developers.google.com/api-client-library/php/auth/web-app

oauth2callback.php (обратите внимание, что полный путь к нему должен быть указан в разделе APIs & Auth/Credentials вашей консоли разработчика, иначе ваши вызовы не будут выполнены):

<?php

set_include_path(get_include_path() . PATH_SEPARATOR . '/data/www/unity/html/lib');  # The path where I git got google-api-php-client
require_once 'google-api-php-client/src/Google/autoload.php';

$APPPATH = "/Applications/GFContacts";

session_start();

$client = new Google_Client();
$client->setAuthConfigFile('accountinfo.json'); # JSON config file downloaded from the credentials page of my project https://console.developers.google.com/project
$client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . $APPPATH . '/oauth2callback.php');
$client->addScope("https://www.googleapis.com/auth/contacts.readonly");

if (! isset($_GET['code'])) {
  $auth_url = $client->createAuthUrl();
  header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . $APPPATH;
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

?>

И затем index.php:

<?php

set_include_path(get_include_path() . PATH_SEPARATOR . '/data/www/unity/html/lib');  # The path where I git got google-api-php-client

require_once 'google-api-php-client/src/Google/autoload.php';
$APPPATH = "/Applications/GFContacts"; # relative path from server root

session_start();

$client = new Google_Client();
$client->setAuthConfigFile('accountinfo.json'); # JSON config file downloaded from the credentials page of my project https://console.developers.google.com/project
$client->addScope("https://www.googleapis.com/auth/contacts.readonly");

# Allow a param 'logout' to remove the access token - sometimes doing this helps debug issues
if (isset($_REQUEST['logout'])) {
    unset($_SESSION['access_token']);
    $client->revokeToken();

    print "You're logged out of Google";

    exit;
}

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {

    $access_token = json_decode($_SESSION['access_token'])->access_token;

    $client->setAccessToken($_SESSION['access_token']);

    $req = new Google_Http_Request("https://www.google.com/m8/feeds/contacts/default/full");
    $val = $client->getAuth()->authenticatedRequest($req);

    // The contacts api only returns XML responses.
    $response = json_encode(simplexml_load_string($val->getResponseBody()));
    print "<pre>" . print_r(json_decode($response, true), true) . "</pre>"; 

} else {
    $redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . $APPPATH . '/oauth2callback.php';
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

?>

Удачи! Прошло некоторое время с тех пор, как этот пост был обновлен, поэтому, если кто-то написал Сервис, я хотел бы узнать об этом. Между тем, это должно помочь вам начать!

person Tim Curtin    schedule 13.07.2015