Google+ недавно выпускает разработчикам первую версию своего Api, которая фокусируется на общедоступных данных о профилях и их действиях: обновлениях статуса, реширингах и ссылках.
Я погрузился в Api и написал небольшой пример приложения, чтобы понять, как легко начать работу и что мы можем сделать с Api на данный момент. Весь код находится внизу этого поста.
Шаги
Процесс, который получает ваш первый запрос к API, не в один клик, но, поскольку он ориентирован на разработчиков, я думаю, нам удастся заставить его работать. Для сравнения, это не намного сложнее, чем тот же процесс в Facebook.
Вам следует:
- Зарегистрируйте приложение в своей учетной записи Google, получив необходимый ключ Api и секрет. Вы не принуждаетесь к общедоступному веб-серверу — вы можете просто использовать localhost или другое имя локального хоста; в последнем случае обязательно используйте что-то вроде example.com для проверки; укажите, что через / etc / hosts или ваш DNS виртуальный хост на 127.0.0.1.
- Загрузите клиентскую библиотеку (для Java, Python, Ruby, PHP, Objective-C, .NET) и образец страницы из начального проекта, где это применимо. В моем случае PHP я выбрал PHP, поэтому я скачал библиотеку плюс index.php и style.css из начального приложения ; вам не нужно следовать настройке библиотеки, если у вас уже есть index.php из начального приложения, которое содержит все, что вам нужно.
- Настройте index.php с вашими учетными данными приложения, ключом Api и так далее. Затем вы можете взломать с помощью var_dump (). Для других языков вам, возможно, придется самостоятельно создавать экземпляры классов из библиотеки.
Обратите внимание, что в исходной конфигурации вы будете использовать https по умолчанию, но это будет излишним для простого теста с localhost, если у вас еще нет экземпляра Apache, настроенного с сертификатом. Вы можете использовать http: // вместо https: // везде.
Как это работает?
Api охватывает информацию профиля ( Люди ) и публичные обновления ( Действия ). Тем не менее, вам нужно настроить OAuth 2.0 для доступа к информации текущего пользователя. Этот метод авторизации уже используется в Facebook и Twitter, и он становится стандартом, позволяя пользователю не делиться паролем своей социальной сети или конфиденциальной информацией учетной записи с каждым приложением.
Процесс работает следующим образом:
- Клиент Api создает ссылку на доверенной странице на plus.google.com , по которой должен перейти пользователь.
- Пользователь следует и разрешает использование своих данных по этой ссылке.
- Он перенаправляется обратно на ранее указанный вами URL-адрес, либо с кодом ошибки, либо с токеном доступа, который вы можете использовать для отправки запросов.
- Получив токен доступа, вы можете отправлять запросы в Api ; так как это специфичная для пользователя информация, она может быть сохранена в сеансе. После сохранения производится дальнейшее перенаправление на чистый URL-адрес вашего приложения.
Выход из системы просто заключается в удалении токена. Токен теоретически может быть отозван без вмешательства приложения, но я пока не могу найти менеджер авторизации в Google+.
В настоящее время Api имеет ограничение в 1000 запросов в день.
Специфичная для PHP информация
PHP Api предоставляет ассоциативные многоуровневые массивы в качестве извлеченных данных. Например, это мой профиль:
array(9) {
["kind"]=>
string(11) "plus#person"
["id"]=>
string(21) "111746708330132898280"
["displayName"]=>
string(14) "Giorgio Sironi"
...
В то время как Действия организованы в некоторые глобальные поля и ключ * items *, который содержит список:
array(8) {
["kind"]=>
string(17) "plus#activityFeed"
["selfLink"]=>
string(82) "https://www.googleapis.com/plus/v1/people/111746708330132898280/activities/public?"
["title"]=>
string(44) "Plus Public Activity Feed for Giorgio Sironi"
["updated"]=>
string(24) "2011-09-19T22:48:56.907Z"
["items"]=>
array(100) {
[32]=>
array(12) {
["kind"]=>
string(13) "plus#activity"
["title"]=>
string(100) "Reshared post from Tim O'Reilly This New York Times piece on the Amazon-California sales tax d..."
["published"]=>
string(24) "2011-09-05T19:14:06.508Z"
["url"]=>
string(63) "https://plus.google.com/111746708330132898280/posts/LzpB6wNJpoZ"
["object"]=>
array(9) {
["content"]=>
string(4031) "This New York Times piece on the Amazon-California sales tax dispute misses the long-term perspective..."
...
}
...
Для краткости я опустил много полей из этого дампа.
Конечно, вы можете и должны обернуть Api в адаптер , чтобы скрыть процедурную структурированность и передать данные, организованные в виде объектов.
Мой пример
Этот код в основном состоит из механизма OAuth, представленного в стартовом приложении PHP. Первоначально он предоставил список всех моих действий: все, что я опубликовал на своей стене как Публичный.
Я добавил некоторые манипуляции: упорядочение по убыванию длины поля [‘object’] [‘content’] . Обратите внимание, что общие записи имеют то же поле содержимого, что и оригинал, поэтому некоторые из публикаций Тима О’Рейли вышли на первое место.
Я удалил свои ключи Api, но этот сценарий не был изменен каким-либо другим способом из скриншотов, которые вы видите.
<?php
require_once 'google-api-php-client/src/apiClient.php';
require_once 'google-api-php-client/src/contrib/apiPlusService.php';
session_start();
$client = new apiClient();
$client->setApplicationName("Google+ PHP Starter Application");
// Visit https://code.google.com/apis/console to generate your
// oauth2_client_id, oauth2_client_secret, and to register your oauth2_redirect_uri.
$client->setClientId('...');
$client->setClientSecret('...');
$client->setRedirectUri('http://googleplussample.com/index.php');
$client->setDeveloperKey('...');
$client->setScopes(array('https://www.googleapis.com/auth/plus.me'));
$plus = new apiPlusService($client);
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['access_token'] = $client->getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
if (isset($_SESSION['access_token'])) {
$client->setAccessToken($_SESSION['access_token']);
}
if ($client->getAccessToken()) {
$me = $plus->people->get('me');
$optParams = array('maxResults' => 100);
$activities = $plus->activities->listActivities('me', 'public', $optParams);
$items = $activities['items'];
uasort($items, function($first, $second) {
if (strlen($first['object']['content']) > strlen($second['object']['content'])) {
return -1;
}
if (strlen($first['object']['content']) < strlen($second['object']['content'])) {
return 1;
}
return 0;
});
$activities['items'] = $items;
// The access token may have been updated lazily.
$_SESSION['access_token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
}
?>
<!doctype html>
<html>
<head><link rel='stylesheet' href="style.css" /></head>
<body>
<header><h1>Google+ Sample App</h1></header>
<div class="box">
<?php if(isset($me) && isset($activities)): ?>
<div class="me">
<a rel="me" href="<?php echo $me['url'] ?>"><?php print $me['displayName'] ?></a>
<div><img src="<?php echo $me['image']['url'];?>?sz=82" /></div>
</div>
<div class="activities">Your Activities:
<?php foreach($activities['items'] as $activity): ?>
<div class="activity">
<a href="<?php print $activity['url'] ?>"><?php print $activity['title'] ?></a>
<?php print $activity['object']['content'] ?>
</div>
<?php endforeach ?>
</div>
<?php endif ?>
<?php
if(isset($authUrl)) {
print "<a class='login' href="$authUrl">Connect Me!</a>";
} else {
print "<a class='logout' href="?logout">Logout</a>";
}
?>
</div>
</body>
</html>