четверг, 3 февраля 2011 г.

Отображаем число подписчиков на кнопке Google buzz

В поставляемых Google'ом кнопках подписки нет возможности отобразить текущее число подписчиков.

Решив этот минус исправить, сделал себе такую вот кнопку для желающих подписаться на мой Buzz (туда транслируется данный блог, а также пощу некоторые менее формальные сообщения):


Здесь скриншот, собственно кнопка - в правой колонке на блоге (это на всякий случай, для читателей по RSS и через Buzz). Если кто-то хочет себе такую же, в этом посте объясняю, как это сделать.

Код для кнопки

Для создания подобной кнопки служит следующий html-код:

<script type="text/javascript" src="http://services.paccbet.ru/buzzfollowers.php5?userid=googleUserId&format=js"></script>

<p><a id="subscribebuzz" target="_blank" title="Подписаться на Google Buzz" class="google-buzz-button" href="http://www.google.com/profiles/googleUserId" data-button-style="follow">Google Buzz</a></p>
</div>

<script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script>

<script type="text/javascript">
  if (buzz_followers)
  {
    var a = document.getElementById('subscribebuzz');
    a.text = 'Buzz: ' + buzz_followers + ' followers';
  }
</script>

Этот код нужно положить куда-нибудь в разметку вашего блога или сайта, и подменить googleUserId на ваш Google Id, как его получить наглядно показано на скриншоте:

Реализация

Если кому-то интересно, реализация данного решения основана на следующем вызове Google API:
https://www.googleapis.com/buzz/v1/people/googleUserId/@groups/@followers?max-results=0

В результате, возвращается следующий xml:
<response gd:kind="buzz#peopleFeed" xmlns="http://portablecontacts.net/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005">
  <startIndex>
    0
  </startIndex>
  <itemsPerPage>
    0
  </itemsPerPage>
  <totalResults>
    26
  </totalResults>
</response>

Где 26 - количество подписчиков.

Поскольку результат нужно парзить, я написал простенький php-скрипт (сильно не пинать, когда я последний раз писал на php, это была 3я версия :)...):

<?php
 header('Content-Type: text/plain');
 
 $userid = $_GET['userid'];
    if (!preg_match("/^[0-9a-zA-Z\.\-_]+$/", $userid)) die("Bad userid!");
 
 $format = $_GET['format'];
 if ($format == '') $format = 'text';
 if ($format != 'image' && $format != 'text' && $format != 'js') die("Bad format!");
 
    $contents = file_get_contents('https://www.googleapis.com/buzz/v1/people/' . $userid . '/@groups/@followers?max-results=0');
 $xml = simplexml_load_string($contents);
 $followers = (string)$xml->totalResults;
 
 if ($format == 'text')
 {
  header('Content-Type: text/plain');
  echo $followers;
 }
 else if ($format == 'js')
 {
  header('Content-Type: application/x-javascript');
  echo "var buzz_followers = " . $followers . ";\n";
 }
 else
 {
  header ('Content-type: image/png');
  $im = imagecreate(10+strlen($followers)*6, 24) or die('Cannot Initialize new GD image stream');
  $bg = imagecolorallocate($im, 255, 255, 255);
  $text_color = imagecolorallocate($im, 0, 0, 0);
  imagestring($im, 2, 5, 5, $followers, $text_color);
  imagepng($im);
  imagedestroy($im);
 }
 
?>

Этот скрипт я залил на свой сайт services.paccbet.ru (этот сайт уже много лет работает, хостинг платный, так что можете пользоваться - без проблем).

P.S. Забыл сказать, Google Buzz (или Живая лента) - это очень удобная штука. Особенно для тех, кто пользуется почтой gmail и её веб-интерфейсом. Так что присоединяйтесь.

Комментариев нет:

Отправить комментарий

Внимание! Реклама и прочий спам будут беспощадно удаляться.