Клиент Google API PHP-служба контактов
Я, после нескольких часов глубокой, глубокой боли, наконец, немного приблизился к конфигурации и использованию PHP-клиента API Google, используя в этом уроке (хотя на основе аналитики).
Итак, теперь я, наконец, auth себя, таким образом, который кажется законным и официальным. Моей естественной мыслью было, что существует contrib/Google_ContactsService.php
, но к моему удивлению, его нигде не найти amogst в 32 других классов обслуживания.
Я чувствую, что вернулся к царапинам. Есть ли способ я могу - законно и официально-получить контакты конкретных пользователей? (тонны учебников там, но все устаревшие и хакерские).
EDIT: я замечаю, что доступна более новая версия библиотеки здесь, но по-прежнему нет службы "контакты", которые можно найти в .../ Service / folder
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.';
3 ответов
с здесь:
к сожалению, API контактов является одним из старых GData, в то время как эта библиотека предназначена для новых API. Вы можете использовать часть OAuth библиотека для запроса области (https://www.googleapis.com/auth/contacts.readonly), и использовать маркер чтобы сделать запрос, но вам придется анализировать данные вручную. Зенд Framework имеет классы Zend_Gdata, которые могут сделать чтение результаты немного легче!
обновление, 28 марта 2018:
Я создал новый пакет для управления контактами Google на основе нового API Google People. Если вы начали новый проект, я бы рекомендовал вам использовать этот пакет вместо того, который упоминается в моем исходном сообщении ниже.
вы можете найти более подробную информацию здесь: https://github.com/rapidwebltd/php-google-people-api
Исходный Пост:
мне пришлось работать с это недавно и после обнаружения отсутствия службы контактов в официальном клиенте PHP Google я создал (MIT licensed) PHP-библиотеку для API контактов Google.
одна из целей-очень упростить процесс. Поэтому, чтобы ответить на ваш вопрос, после настройки библиотеки, следующий код-это все, что нужно для извлечения контактов.
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
я смог заставить это работать через новую библиотеку... в основном. Это не так гладко, как полная реализация услуг, очевидно, но это заставляет вещи двигаться.
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));
}
?>
и затем индекс.на 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));
}
?>
удачи! Прошло некоторое время с тех пор, как этот пост был обновлен, поэтому, если кто-то написал услугу, я хотел бы знать об этом. Тем временем, это должно заставить вас начать!