Статьи

Практический Google+ Api

Google+ недавно выпускает разработчикам первую версию своего Api, которая фокусируется на общедоступных данных о профилях и их действиях: обновлениях статуса, реширингах и ссылках.

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

Шаги

Процесс, который получает ваш первый запрос к API, не в один клик, но, поскольку он ориентирован на разработчиков, я думаю, нам удастся заставить его работать. Для сравнения, это не намного сложнее, чем тот же процесс в Facebook.
Вам следует:

  1. Зарегистрируйте приложение в своей учетной записи Google, получив необходимый ключ Api и секрет. Вы не принуждаетесь к общедоступному веб-серверу — вы можете просто использовать localhost или другое имя локального хоста; в последнем случае обязательно используйте что-то вроде example.com для проверки; укажите, что через / etc / hosts или ваш DNS виртуальный хост на 127.0.0.1.
  2. Загрузите клиентскую библиотеку (для Java, Python, Ruby, PHP, Objective-C, .NET) и образец страницы из начального проекта, где это применимо. В моем случае PHP я выбрал PHP, поэтому я скачал библиотеку плюс index.php и style.css из начального приложения ; вам не нужно следовать настройке библиотеки, если у вас уже есть index.php из начального приложения, которое содержит все, что вам нужно.
  3. Настройте index.php с вашими учетными данными приложения, ключом Api и так далее. Затем вы можете взломать с помощью var_dump (). Для других языков вам, возможно, придется самостоятельно создавать экземпляры классов из библиотеки.

Обратите внимание, что в исходной конфигурации вы будете использовать https по умолчанию, но это будет излишним для простого теста с localhost, если у вас еще нет экземпляра Apache, настроенного с сертификатом. Вы можете использовать http: // вместо https: // везде.

Как это работает?

Api охватывает информацию профиля ( Люди ) и публичные обновления ( Действия ). Тем не менее, вам нужно настроить OAuth 2.0 для доступа к информации текущего пользователя. Этот метод авторизации уже используется в Facebook и Twitter, и он становится стандартом, позволяя пользователю не делиться паролем своей социальной сети или конфиденциальной информацией учетной записи с каждым приложением.

Процесс работает следующим образом:

  1. Клиент Api создает ссылку на доверенной странице на plus.google.com , по которой должен перейти пользователь.
  2. Пользователь следует и разрешает использование своих данных по этой ссылке.
  3. Он перенаправляется обратно на ранее указанный вами URL-адрес, либо с кодом ошибки, либо с токеном доступа, который вы можете использовать для отправки запросов.
  4. Получив токен доступа, вы можете отправлять запросы в 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>