Facebook: как посчитать количество лайков

Владимир | | JavaScript, Web разработка.

facebook like share

Некоторое время назад, если не ошибаюсь, в феврале 2012 года, разработчики Facebook решили заменить кнопку Share button на Like button. В документации появилась информация о том, что «Share button» не рекомендуется для использования (depricated). И 7 ноября 2012 года переход был завершен. Естественно, разработчики опубликовали подробную инструкцию по переходу на новый виджет.

С точки зрения обычных пользователей не изменилось практически ничего. Как и раньше, для того, чтобы поделиться информацией, нужно просто кликнуть на кнопку.

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

Раньше значение счетчика можно было получить с помощью следующего запроса:

$.getJSON('http://graph.facebook.com/' + encodeURI(page_url)
        + '&callback=?', function(response) {
    if (response.shares !== undefined) {
        fb_counter = response.shares;
    }
    $('#facebook_count').html(response.shares);
});

Этот код я взял из своей же статьи «JavaScript XSS: получение данных от facebook и вконтакте», которую опубликовал почти полтора года назад. Самое интересное, что этот код работает и, например, для главной страницы Google возвращает такой ответ:

{
    "id": "http://google.com",
    "shares": 5290503
}

И тут возникает вопрос: «А что именно показывает значение shares? Входит ли в него количество лайков, отправленных через новый виджет?»

Получить более подробную информацию можно с помощью FQL (Facebook Query Language). Этот язык запросов очень похож на SQL и позволяет указывать, какую именно информацию мы хотим получить. Кроме того, на официальном сайте есть достаточно подробная документация. Также для тестирования запросов есть очень удобный инструмент – Graph API Explorer.

Для нашего случая запрос будет выглядеть так:

select share_count, like_count, comment_count, total_count from link_stat where url="http://google.com"

Как видите, действительно очень похоже на SQL. link_stat – название таблицы, share_count, comment_count, like_count, total_count – названия полей. Полный список полей можно посмотреть здесь.

Результат выполнения этого запроса будет следующий:

{
  "data": [
    {
      "share_count": 3152140, 
      "comment_count": 1132001, 
      "like_count": 1006562, 
      "total_count": 5290703
    }
  ]
}

Как видите, значение shares из предыдущего примера совпадает с total_count в который входит сумма share_count, comment_count и like_count.

Т.е. получается, что старый вариант кода выводит число, в которое входит количество комментариев, оставленных для данной страницы. Это, конечно, не большая проблема, особенно если учесть, что значение счетчика увеличивается 🙂 , но всё-таки хочется получить корректные цифры.

Поэтому код из моего предыдущего примера можно переписать следующим образом:

$.getJSON('https://graph.facebook.com/fql?q=select like_count, share_count from link_stat where url="' + encodeURI(page_url) + '"'
        + '&callback=?', function(response) {
    var count = 0;
    if (response.data !== undefined) {
        if (response.data[0].like_count !== undefined) {
            count += response.data[0].like_count;
        }
        if (response.data[0].share_count !== undefined) {
            count += response.data[0].share_count;
        }
    }
    fb_counter.html(count);
});

Т.е. мы складываем значения like_count и share_count. Вполне возможно, что эта операция не имеет смысла для новых страниц, т.к. у них share_count всегда будет равно нулю. Но для сайтов, которые существуют больше года, терять share_count не желательно.

Также здесь предполагается, что переменная page_url содержит адрес страницы (включая http://) для которой нужно получить значение счетчика, а fb_counter – элемент страницы в котором нужно показать полученное значение.

Как видите, использовать FQL несложно. И «вытянуть» можно довольно много интересной информации. Например, можно в конце статьи вывести счетчик комментариев facebook или ещё что-нибудь придумать 😉

В заключение хочу поделить ссылкой на бесплатные шаблоны кнопок для социальных сетей (Facebook, Twitter и Google+), которые можно использовать для создания собственных счётчиков.

Успехов!