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