Некоторое время назад, если не ошибаюсь, в феврале 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+), которые можно использовать для создания собственных счётчиков.
Успехов!


