@ilyasadkin

Как настроить кэширование информации о текущем курсе валюты с сайта cbr?

Здравствуйте.
Возникла такая ситуация, что сайт cbr блокирует частые запросы к их ресурсу, соответственно возникла необходимость кэшировать полученные результаты (раз в 2-3 часа).
Собственно, сам код:
<?php
  $date = date("d/m/Y"); 
  $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; 
  $content = file_get_contents($link); 
  $dom = new domDocument("1.0", "cp1251"); 
  $dom->loadXML($content); 
  $root = $dom->documentElement; 
  $childs = $root->childNodes; 
  $data = array(); 
  for ($i = 0; $i < $childs->length; $i++) {
    $childs_new = $childs->item($i)->childNodes; 
    for ($j = 0; $j < $childs_new->length; $j++) {
      $el = $childs_new->item($j);
      $code = $el->nodeValue;
      if ($code == "EUR") $data[] = $childs_new; 
    }
  }
  for ($i = 0; $i < count($data); $i++) {
    $list = $data[$i];
    for ($j = 0; $j < $list->length; $j++) {
      $el = $list->item($j);
      if ($el->nodeName == "Name");
      elseif ($el->nodeName == "Value") echo $el->nodeValue."";
    }
  }
?>


Поскольку в php я не так селен, как в дизайне, обращаюсь именно сюда.
Интересует вопрос, как правильно реализовать кэширование?
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 4
@kegebinem
А чем вас не устраивает удобный и бесплатный API того же курса валют с крупнейшего в РФ игрока в этой сфере - РосБизнесКонсалтинг
Ответ написан
Rema1ns
@Rema1ns
и так сойдет
самый простой вариант, создать файл, в первой строке указать время когда он станет не актуальным, обратись к банку, забрали курсы, записали.

При следующем обращении чекаете файлик, в нем проверяете актуальность времени, если время вышло, обращаетесь к сайту и перезаписываете файлик. Если время не вышло, то забираете информацию из него.

Примерно так, в целом можно найти какую нибудь библиотечку с кешером легковесную и юзать ее
Ответ написан
maksym1991
@maksym1991
WordPress adept
Что-то похожее реализовано - с помощью функций set_transient() и get_transient()
Ответ написан
Комментировать
@AlexndrNovikov
Solution Architect in Spiral Scout
Убедиться, что подключен Memcached (или подключить)
И в коде
$m = new Memcached();
$m->addServer('localhost', 11211);
if(($data = $m->get('someKey')) === false) {
// do some actions do get data from remote source
// place your code here, store result in $data variable
$m->set('someKey', $data, 60*60*2);
}
return $data;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы