Лучший способ кешировать результаты Open Graph из Facebook?

Мой сайт запрашивает у Facebook счетчик акций через cURL:

http://graph.facebook.com/?ids=MY_SITE_URL

Тем не менее, я часто нахожу, что я достиг ограничение скорости. Какой самый лучший механизм для кэширования этих данных и отображения их на странице? Мой сайт не использует базу данных, и глупо создавать ее только для этой цели.

Спасибо!

2

Решение

Да, memcache или Redis — хороший вариант.

Другой способ — использовать функциональность пакетного API Facebook. Он будет выполнять несколько запросов одновременно, в результате в одном запросе вы можете найти общий ресурс более одного URL.
https://developers.facebook.com/docs/graph-api/making-multiple-requests/

Второй вариант — вы можете создать глобальный массив в php. например,

$globalArray = array();

Затем вы можете создать ключ для каждого URL-адреса Share Count и затем сохранить результат, полученный из API. например,

$globalArray['url'] = $resultFromAPI;

Таким образом, вы можете хранить данные, пока не обновите страницу.

Третий вариант — создать сеанс для каждого URL-адреса подсчета общего ресурса, сохранить в нем значение и очистить сеанс при выходе пользователя из системы.

Затем каждый раз, когда вы выбираете общий ресурс для определенного URL, сначала проверяйте, есть ли у вас значение для этого URL или нет? например,

if(isset($_SESSION['url']) && !empty($_SESSION['url']){
$count = $_SESSION['url'];
}else{
// fetch through facebook graph API
}

Если вы используете Zend Framework, то Zend Registry также является хорошим вариантом, он будет работать так же, как сессии PHP.

Если вы хотите получить актуальную информацию, вам нужно вызвать Graph API. Но вы могли бы построить логику, которая извлекает данные только через один час. Я имею в виду, что вы можете очищать сеанс каждый час для этих URL-адресов общего доступа и снова сохранять данные в этих переменных сеанса.

Надеюсь, поможет.

3

Другие решения

Одним из способов может быть создание временного файла с именем файла в качестве хэша URL-адреса путем преобразования URL-адреса в хэш-код и на основе временной метки файла, работающего с обновлением кеша или удалением кеша с истекшим сроком действия.

//Pseudo Code
urlHash = Hash(url)

if urlHash path exists:
if check_valid_timestamp:
fetch_file()
endif

if dont have data:
get_data_from_url()
create_and_store_in_file()
endif

show_result()
1

Попробуйте добавить токен доступа к приложению к вашему запросу. В идеале это должно решить ваши проблемы с ограничением скорости. Дайте ему попытку:

http://graph.facebook.com/?ids=MY_SITE_URL&access_token={app_id}|{app_secret}

Например, вы можете использовать Redis в качестве кэша и EXPIRE 3600 ключей (в данном случае, может быть, md5-хэш URL-адреса), содержащих данные результатов Graph API, для кэширования данных в течение одного часа …

Увидеть

1

Вы можете использовать memcache или redis для того же. Кэширование данных каждого пользователя вместе с другими деталями согласно требованию. Например, вы можете использовать отдельные идентификаторы или URL в качестве ключа кэша.

0

Я не мастер или программист высокого уровня. Однажды у меня была похожая проблема, хотя не с фейсбуком.

Итак, что я сделал, я сохранил файл на сервере, где я сохранил метку времени и текущий счетчик. [Я считаю, что вы можете создавать файлы на своем сервере.] И когда пришел каждый запрос, я проверял текущую метку времени с помощью метки времени. в файле. Так что если бы разница составляла более 30 минут [вы можете установить свой предел произвольно], я отправил бы запрос API еще раз и обновил бы файл с новой отметкой времени и счетчиком. Наоборот, если разница составляла менее 30 минут, я делал подсчет в файле и отображал его, а не отправлял запрос API.

Это очень простой и эффективный способ. Но я не знаю, если это то, что вы ищете, и это решит вашу проблему.

0
По вопросам рекламы [email protected]