Как кэшировать вызов facebook graph api

#php #facebook #api #facebook-graph-api #caching

#php #Facebook #API #facebook-graph-api #кэширование

Вопрос:

Я создал функцию для получения лайков для моей страницы facebook, используя graph api. Однако ограничение скорости уровня продолжает достигаться, поскольку оно вызывается при каждом запросе.

Как бы мне кэшировать это, чтобы оно не выполняло вызов каждый раз?

Код, который я сейчас использую, является:

 function fb_like_count() {
        $id = '389320241533001';
        $access_token = 'access token goes here';
    $json_url ='https://graph.facebook.com/v3.2/'.$id.'?fields=fan_countamp;access_token='.$access_token;
    $json = file_get_contents($json_url);
    $json_output = json_decode($json);
    if($json_output->fan_count) {
        return like_count_format($json_output->fan_count);
    } else{
        return 0;
    }
}
  

Ответ №1:

В PHP существует множество механизмов кэширования, которые вы можете использовать в зависимости от размера вашего проекта. Я бы посоветовал вам проверить memcached или Redis . Это механизмы кэширования в памяти, которые работают довольно быстро и помогут вам повысить производительность. Вы можете прочитать больше о том, как реализовать memcached здесь или для redis здесь.

Второй и более простой способ — это использовать кэширование файлов. Это работает следующим образом: Вы отправляете запрос на Facebook API , и когда возвращается ответ, вы сохраняете его в файл. Когда вы хотите отправить второй ответ, вы можете сначала проверить, есть ли какое-либо содержимое в вашем файле, и если есть, вы можете вернуть его непосредственно в свое приложение, в противном случае вы отправите запрос на Facebook API

Простая интеграция выглядит следующим образом

 if (file_exists($facebook_cache_file) amp;amp; (filemtime($facebook_cache_file) > (time() - 60 * 15 ))) {
   // Cache file is less than 15 minutes old but you can change this. 
   $file = file_get_contents($facebook_cache_file); // this holds the api data
} else {
   // Our cache is out-of-date, so load the data from our remote server,
   // and also save it over our cache for next time.
   $response = getFacebookData() // get data from facebook and save into file
   file_put_contents($facebook_cache_file, $response, LOCK_EX);
}
  

В любом случае я бы посоветовал вам использовать любую PHP библиотеку для создания файлового кэша.

Ниже вы можете найти некоторые из них, на которые может быть интересно взглянуть: