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>