Буквально неделю назад Facebook отказался от поддержки старых функций API. Не большая утрата, вот только теперь не работают две основные функции, по которым люди массово определяли количество шеров, лайков и даже число комментов на отдельный URL.
Если вы пользовались функциями вроде:
https://api.facebook.com/method/links.getStats?urls=http://cnn.com&format=json
http://api.facebook.com/method/fql.query?query=select%20like_count%20from%20link_stat%20where%20url=%27http://cnn.com&format=json
Теперь по этим адресам выводится ошибка REST API is deprecated for versions v2.1 and higher (12).
Можно предположить, что теперь не реально доставать число лайков и шеров в Facebook определенной страницы. К счастью, это не так. Уже давно Facebook начал переходить с api.facebook.com к graph.facebook.com, с которого можно было получать всю информацию. Вот только теперь появился ряд ограничений, из-за которых вы не получите всей той информации. В данный момент можно получить только число шеров (shares), причем, по моим наблюдениям, оно представляет собой сумму лайков и публикаций страницы. Для этого достаточно перейти по адресу и получить JSON результата:
https://graph.facebook.com/?ids=URL
Например, для страницы http://mz.kiev.ua/blog/api-serpstat-7-scripts.html, в момент написания этого материала выдавался следующий результат:
{
"http://mz.kiev.ua/blog/api-serpstat-7-scripts.html": {
"og_object": {
"id": "914937608618084",
"description": "u0418u043du0442u0435u0440u0435u0441u043du0430u044f u0441u0442u0430u0442u044cu044f u043fu043e u0442u0435u043cu0435 'API Serpstat u2013 7 u043fu043eu043bu0435u0437u043du044bu0445 u043au0435u0439u0441u043eu0432 u043fu043e u0438u0441u043fu043eu043bu044cu0437u043eu0432u0430u043du0438u044e + u0441u043au0440u0438u043fu0442u044b'. u0410 u0442u0430u043a u0431u043bu043eu0433 u0435u0449u0435 u043du0430 u0440u0430u0437u0440u0430u0431u043eu0442u043au0435 =)",
"title": "API Serpstat u2013 7 u043fu043eu043bu0435u0437u043du044bu0445 u043au0435u0439u0441u043eu0432 u043fu043e u0438u0441u043fu043eu043bu044cu0437u043eu0432u0430u043du0438u044e + u0441u043au0440u0438u043fu0442u044b : MZ.kiev.ua",
"type": "website",
"updated_time": "2016-08-25T07:01:18+0000"
},
"share": {
"comment_count": 0,
"share_count": 49
},
"id": "http://mz.kiev.ua/blog/api-serpstat-7-scripts.html"
}
}
Кроме числа шеров страницы и не очень верного количества комментариев выводится еще много дополнительной информации, вроде тайтла и мета-дискрипшина. Для любителей массово парсить данные из FB можно преобразовать запрос и вывести только нужную инфу. Например, вот так:
http://graph.facebook.com/?id=URL&fields=id,share,og_object{engagement}
В итоге получается следующий результат
{
"id": "http://mz.kiev.ua/blog/api-serpstat-7-scripts.html",
"share": {
"comment_count": 0,
"share_count": 49
},
"og_object": {
"engagement": {
"count": 49,
"social_sentence": "49 people like this."
},
"id": "914937608618084"
}
}
Для некоторых страниц еще отображается количество лайков и комментариев в Facebook. Для этого нужно добавить два параметра в og_object: likes.limit(0).summary(true) и comments.limit(0).summary(true). Так при запросе:
http://graph.facebook.com/?id=http://cnn.com&fields=id,share,og_object{engagement,comments.limit(0).summary(true),likes.limit(0).summary(true)}
выведется результат:
{
"id": "http://cnn.com",
"share": {
"comment_count": 0,
"share_count": 2383455
},
"og_object": {
"engagement": {
"count": 2383455,
"social_sentence": "2.3M people like this."
},
"comments": {
"data": [
],
"summary": {
"order": "chronological",
"total_count": 55
}
},
"likes": {
"data": [
],
"summary": {
"total_count": 2026
}
},
"id": "379786107965"
}
}
Но стоит учитывать, что значения total_count это приблизительные значения. В Facebook это описывают следующим образом:
К сожалению, это не единственная беда. При работе с API Facebook есть строгие ограничения. Вы не сможете просто так массово парсить число лайков на множество страниц. Уже через 10-20 запросов вы начнете получать сообщения об достижении ограничений. Их можно обойти создав свое приложение в Facebook и использовать его access_token.
Для этого нужно зайти на https://developers.facebook.com/apps/ и создать приложение с доступом к API. Если не ошибаюсь, то даже всего, что отмечено по-умолчанию, достаточно.
Затем нужно перейти https://developers.facebook.com/tools/explorer/ и получить App Token как показано на скриншоте:
После этого вы должны в урлы запросов добавить переменную access_token с со своим токеном. Теперь запрос будет выглядеть следующим образом:
https://graph.facebook.com/?id=http://cnn.com&fields=id,share,og_object{engagement,comments.limit(0).summary(true),likes.limit(0).summary(true)}&access_token=ВАШ_ТОКЕН
И можно работать. Конечно, для приложений тоже есть лимиты, но не такие суровые. Для проверки я попробовал массово получить число шеров в Facebook для 1000 страниц без всяких задержек в 1 поток. Получилось без проблем. Но на форумах пишут, что для нового приложения дается порядка 2400 запросов в сутки.
Более детально про лимиты можно почитать вот тут:
https://developers.facebook.com/docs/graph-api/advanced/rate-limiting
Надеюсь эта статья поможет вам массово получать число Facebook shares на страницы.
Если знаете более правильные способы, то прошу отписать мне в Facebook, т.к. не уверен, что этот выход оптимальный для 10k+ урлов.