Узнаем число лайков и шеров страниц в Facebook после августовского обновления

Буквально неделю назад 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 это описывают следующим образом:

total_count represents the approximate number of nodes on the likes edge. The actual number of results returned might be different depending on privacy settings.

К сожалению, это не единственная беда. При работе с 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+ урлов.
 

Дата публикации: 00:00 26.08.2016
Сайт еще в разработке ;)