При каждом заходе на php страничку сайта происходит обращение к некому сервису через их API для получения некого массива информации. Но у сервиса ограниченное количество обращений по API в сутки для одного аккаунта. Заметил что я очень быстро израсходовал все доступные обращения к сервису по API, хотя переходов на сайт было гораздо меньше чем обращений к сервису, даже с учётом всех поисковых и не только ботов. То-есть на сайт перешло например ~100 человек, а запросов к сервису ~500.
Вот код обращения:
//Запись определённых ключей из массива в переменные
$key1= getData()['Key1'];
$key2= getData()['Key2'];
$key3= getData()['Key3'];
$key4= getData()['Key4'];
$key5= getData()['Key5'];
$key6= getData()['Key6'];
//Отправка запроса к сервису и получение массива информации
function getData() {
return curl('https:/api.example.com/json_array');
}//Функцию curl сюда вставлять не буду, там обычный curl запрос
//название там другое, тут указал curl для примера
//Далее как то манипулирую с этими данными...
Только сейчас в момент написания вопроса понял что сделал глупость, надо было в одну переменную вынести функцию, а уже потом с этой переменной брать информацию.
$myarray = getData();
$key1= $myarray['Key1'];
$key2= $myarray['Key2'];
$key3= $myarray['Key3'];
$key4= $myarray['Key4'];
$key5= $myarray['Key5'];
$key6= $myarray['Key6'];
Я решил попробовать сделать так, если я уже обращался к сервису, сохранять массив в cookie и потом уже во всех других случаях читать этот массив из cookie и использовать его когда опять понадобиться эта информация из массива, чтобы постоянно не обращаться к сервису.
function getData() {
if (isset($_COOKIE['arrayData']) && !empty($_COOKIE['arrayData'])) {
return unserialize($_COOKIE['arrayData']);
} else {
$arrayData = curl('https:/api.example.com/json_array');
setcookie('arrayData', serialize($arrayData));
return curl('https:/api.example.com/json_array');
//И тут оказывается глупость сделал, два раза curl запрос сделал правильнее наверное так:
//return $arrayData;
}
}
Я решил сделать только через куки, могу ещё добавить по такой же аналогии сохранение в сессию. Но проблема вот в чём. Для обычных людей возможно это и прокатило бы, но на сайт заходят очень много всяких поисковых ботов/роботов и другой ботовой нечисти , которые заразы берут и инициализируют функцию с запросом к этому сервису.
И как я понимаю, у некоторых ботов отключены куки и/или сессии (вот скриншот -> ага, не разрешается ссылки оставлять =(), и для ботов этот способ не сработает, так как после каждого нового обновления страницы куки у них будут чистые и запрос будет отправляться снова и снова =(.
Подскажите пожалуйста новичку, как в данной ситуации правильнее (если возможно, желательно более простой вариант) кэшировать эти запросы к сервису от новых посетителей, чтобы этих запросов было по минимуму, то-есть в идеале чтобы для одного нового посетителя всего 1 раз отправился запрос на получение массива информации а дальше информация должна браться только откуда угодно из кэша, чтобы даже если какой то робот или другая нечисть обновляла страницу очень много раз запрос не отправлялся каждый раз по новой а кэшировался при первом посещении страницы и при следующем посещении брался из кэша. Время хранения этого кэша можно чтобы было хоть до бесконечности, при условии что это одно и то же устройство.
Кто ответит по теме - большое спасибо и плюс вам в карму!
P.S. Кстати интересно, я правильно понимаю, что если я буду получать массив с сайта через file_get_contents или через curl разницы например в скорости в данном примере не будет?
И правильно я понимаю, если я инициализирую например 5 переменных которые обращаются к этой одной функции, то тогда функция выполняется 5 раз и получается делается 5 запросов?