Добрый день. К сожалению у FB есть лимиты, примерно 50 запросов счетчика на странице - далее на 5 минут бан, далее можно еще 10 счетчиков (share) получить - потом снова бан.
Возможно ли указать access_token для FB - чтобы не было проблем в получении данных.
У нас есть страница статистики популярности (backend) статей и вот тут вся проблема с FB:
После превышения лимита:
Нехитрыми вычислениями:
https://graph.facebook.com/?id=http://mysite.ru/blabla.html
{ "error": { "message": "(#4) Application request limit reached", "type": "OAuthException", "is_transient": true, "code": 4, "fbtrace_id": "Hhk+484x4d2" } }
Но если:
https://graph.facebook.com/?id=http://mysite.ru/blabla.html&access_token=234432236120051|-ybZh52352357axbBwVZDeY
(токен изменен на неверный).
{ "og_object": { "id": "10150272954075222", "description": "\u041d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0451", "title": "\u042f\u043d\u0434\u0435\u043a\u0441", "type": "website", "updated_time": "2016-09-19T06:19:07+0000" }, "share": { "comment_count": 0, "share_count": 27470 }, "id": "http://yandex.ru" }
Я попробовал задать такую конструкцию:
$app_fb_token = 'access_token='.$fb_app_token;; $fb_app_url = $myurltosite.'&'.$app_fb_token; $fb_app_url = urldecode($fb_app_url);
Но не сработала:
echo "<div class='ya-share2' data-services='vkontakte,facebook,odnoklassniki,moimir,gplus' data-url:facebook='{$fb_app_url}' data-url='{$myurltosite}' data-size='m' data-counter=''></div>";
На данный момент мне приходится доп. парсить:
$app_fb_token = 'access_token='.$fb_app_token;; $fb_app_url = $myurltosite.'&'.$app_fb_token; $fb_app_url = urldecode($fb_app_url); $myfbcountrezerv = "https://graph.facebook.com/?id={$fb_app_url}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $myfbcountrezerv); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2" ); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $fbsharegetapi = curl_exec($ch); curl_close($ch); $fbsharegetapi = file_get_contents($myfbcountrezerv); } $myfbcountrezervdec = json_decode($fbsharegetapi, true); $myfbcount = $myfbcountrezervdec['share']['share_count']; echo $myfbcount;
Все работает так.