Экспорт курсов обмена валют в банках Белозерске в xml.

Вы можете разместить на своем сайте таблицу с курсами обмена валют в банках вашего города. Сайт KOVALUT.RU предлагает данные в формате XML о курсах валют в банках Белозерска и курсах валют Центрального Банка России (ЦБ).

Внимание! Использование информации, представленной в XML формате, допускается только при условии, что непосредственно над или под блоком с информацией о курсах валют на вашей странице будет указана ссылка на источник информации. Гиперссылка должна указывать на страницу сайта KOVALUT.RU с курсами валют в Белозерске:

https://kovalut.ru/kurs/belozersk/

Загрузить таблицу с курсами валют в банках Белозерска в формате XML можно с адреса:

https://informer.kovalut.ru/webmaster/xml-table.php?kod=3503

Ниже располагаются: пример содержания XML; описание формата XML; пример PHP скрипта.

Содержание XML данных выглядит так:


<?xml version="1.0" encoding="utf-8"?>
<Exchange_Rates>
  <Actual_Rates>
    <Bank>
      <Name>Сбербанк России</Name>
      <Url>http://kovalut.ru/sberbank-rossii/belozersk/</Url>
      <USD>
        <Buy>66,20</Buy>
        <Sell>69,30</Sell>
      </USD>
      <EUR>
        <Buy>74,73</Buy>
        <Sell>78,20</Sell>
      </EUR>
      <ChangeTime>13.11.2018 20:14</ChangeTime>
    </Bank>
  </Actual_Rates>
  <Not_Actual_Rates/>
  <City>
    <Name>Белозерск</Name>
    <Url>https://kovalut.ru/kurs/belozersk/</Url>
    <Simple_Date>13 ноября 2018</Simple_Date>
    <Digital_Date>13.11.2018</Digital_Date>
    <USD>
      <Buy>66,20</Buy>
      <Sell>69,30</Sell>
    </USD>
    <EUR>
      <Buy>74,73</Buy>
      <Sell>78,20</Sell>
    </EUR>
  </City>
  <Central_Bank_RF>
    <USD>
      <New>
        <Digital_Date>14.11.2018</Digital_Date>
        <Exch_Rate>67.6812</Exch_Rate>
      </New>
      <Old>
        <Digital_Date>13.11.2018</Digital_Date>
        <Exch_Rate>67.5238</Exch_Rate>
      </Old>
    </USD>
    <EUR>
      <New>
        <Digital_Date>14.11.2018</Digital_Date>
        <Exch_Rate>76.0737</Exch_Rate>
      </New>
      <Old>
        <Digital_Date>13.11.2018</Digital_Date>
        <Exch_Rate>76.0926</Exch_Rate>
      </Old>
    </EUR>
  </Central_Bank_RF>
</Exchange_Rates>

Описание формата XML:

Actual_Rates Контейнер с банками, у которых на текущий момент есть свежая информация о курсах валют:
  Bank Контейнер с информацией о банке:
   Name Наименование банка
   Url Ссылка на информацию о банке в городе на сайте KOVALUT.RU
   USD информация о курсах доллара:
    Buy курс покупки доллара в банке
    Sell курс продажи доллара в банке
   EUR информация о курсах евро:
    Buy курс покупки евро в банке
    Sell курс продажи евро в банке
   ChangeTime Время (местное) изменения курсов банка
Not_Actual_Rates Контейнер с банками у которых на текущий момент информация о курсах валют устарела
City Контейнер с информацией о городе, для которого предоставляются курсы валют в банках:
  Name наименование города
  Url ссылка на сайт с курсами валют в городе
  Simple_Date дата курсов валют в текстовом формате
  Digital_Date дата курсов валют в цифровом формате
  USD информация о курсах доллара:
    Buy лучший курс покупки доллара в банках города
    Sell лучший курс продажи доллара в банках города
  EUR информация о курсах евро:
    Buy лучший курс покупки евро в банках города
    Sell лучший курс продажи евро в банках города
Central_Bank_RF информация о курсах валют Центрального Банка России (ЦБ):
  USD информация о курсах доллара:
    New информация о новом (последнем по времени) курсе ЦБ:
      Digital_Date дата курсов валют в цифровом формате
      Exch_Rate курс обмена ЦБ
    Old информация о старом (предпоследнем по времени) курсе ЦБ:
      Digital_Date дата курсов валют в цифровом формате
      Exch_Rate курс обмена ЦБ
  EUR информация о курсах евро:
    New информация о новом (последнем по времени) курсе ЦБ:
      Digital_Date дата курсов валют в цифровом формате
      Exch_Rate курс обмена ЦБ
    Old информация о старом (предпоследнем по времени) курсе ЦБ:
      Digital_Date дата курсов валют в цифровом формате
      Exch_Rate курс обмена ЦБ

Пример php скрипта, осуществляющего загрузку XML с сайта KOVALUT.RU и последующий вывод курсов в виде HTML таблицы:


<?php
/*
PrintXML-Table ver 1.01 от 6 февраля 2012 года
Данный скрипт загружает курсы валют банков в формате XML с сайта
КОВ.РФ и выводит их в виде HTML таблицы. При этом загрузка новых
курсов с сайта КОВ.РФ происходит с использование кэширования.
Курсы загружаются с сайта, только если время модификации файла
kov_3503.xml на Вашем сервере устарело на определенную величину
($Reload_Period). В противном случае курсы извлекаются непосредственно
из файла kovt_3503.xml. Такое кэширование ускорит загрузку Вашей страницы.

Если периодическая загрузка XML файла 'kovt_3503.xml' с сайта KOVALUT.RU будет
осуществляться сторонними средствами, то функции:
  Load_XML_From_Kov_RF()
  Get_Kov_XML()
  GetFileTime()
можно убрать из программы и еще нужно будет заменить строку:
  $Kov_XML_Str = Get_Kov_XML();
на строку:
  $Kov_XML_Str = file_get_contents('kovt_3503.xml');
*/
#Инициализируем глобальные переменные
#если Ваш сайт работает в кодировке UTF-8.
$Site_Encoding 'UTF-8';
#если Ваш сайт работает в кодировке Windows-1251.
#$Site_Encoding = 'Windows-1251';
$Kov_City_Kod '3503'#Код города на сайте KOVALUT.RU
#$Reload_Period - время в секундах, по истечении которого необходимо
#обновлять  файл kovt_3503.xml с курсами валют.
$Reload_Period 300;
#$Work_Dir - Рабочий каталог. в нем сохраняются загруженный kovt_3503.xml
$Work_Dir './';

Kov_Main();

#Kov_Main - отображает курсы валют на Вашем Сайте.
function Kov_Main()
#Загружаем XML с курсами валют в строкувую переменную $Kov_XML_Str
  
$Kov_XML_Str Get_Kov_XML();
  if (
$Kov_XML_Str
  { 
#Создаем XML элемент на основе загруженной выше строки
    
$XML = new SimpleXMLElement($Kov_XML_Str);
    
#Печатаем XML элемент, загруженный с сайта KOVALUT.RU
    
if ($XML
    { 
#Print_Kov_XML($XML);
      
PrintTableInformer($XML);
    }
  }
}

# PrintTableInformerBody - Печатает тело таблицы с курсами обмена валют
#Аргуметы
#$XML = контейнер, в котором содержаться курсы валют банков для печати
function PrintTableInformerBody($XML)
{ global 
$StyleArr$Site_Encoding;
  for (
$BI 0$BI sizeof($XML->Bank); $BI++) # Перебираем все банки города
  #для печати строк с курсами обмена валют
  
$BankName = ($Site_Encoding == 'UTF-8') ? $XML->Bank[$BI]->Name mb_convert_encoding($XML->Bank[$BI]->Name$Site_Encoding"UTF-8");
    
$BGColor = ($BI 2) ? '' " background-color: {$StyleArr['grrow']};"
    print 
"<tr align=\"center\" style = \"color: {$StyleArr['KursCol']};{$BGColor}\">\n";
    if (
$XML->Bank[$BI]->Url == '')
    { print 
"<td align=\"left\" style=\"padding-left: 5px; height: 30px;\">{$BankName}</td>\n";
    }
    else
    { print 
"<td align=\"left\" style=\"padding-left: 5px; height: 30px;\"><a style=\"color: {$StyleArr['BRefCol']};\" href=\"{$XML->Bank[$BI]->Url}\">{$BankName}</a></td>\n";
    }
    print 
"<td>{$XML->Bank[$BI]->USD->Buy}</td><td>{$XML->Bank[$BI]->USD->Sell}</td>\n";
    print 
"<td>{$XML->Bank[$BI]->EUR->Buy}</td><td>{$XML->Bank[$BI]->EUR->Sell}</td>\n";
    
#Печатаем время обновления 
    
print "<td style=\"padding-right: 5px; font-size: 12px;\">{$XML->Bank[$BI]->ChangeTime}</td>\n";
    print 
"</tr>\n";
  } 
}
                   
#PrintTableInformer печатает информер с табличкой в которой есть курсы
#всех банков города
function PrintTableInformer($XML)
{ global 
$StyleArr$Kov_City_Kod$Site_Encoding;
  if (
$Site_Encoding == 'UTF-8')
  { 
#Перекодировка не требуется. Просто загружаем переменные данными из XML
    
$CityName $XML->City->Name;
    
$CityDate $XML->City->Simple_Date;
  }
  else
  { 
#Перекодируем текстовые значения из кодировки UTF-8 в кодировку,
    #установленную на сайте:
    
$CityName mb_convert_encoding($XML->City->Name$Site_Encoding"UTF-8");
    
$CityDate mb_convert_encoding($XML->City->Simple_Date$Site_Encoding"UTF-8");
  }
  print <<<END_OF_RECORD10
<div>
<table style="border-collapse: collapse;">
 <tr>
  <td align="center" colspan="6">
   <h1 style="line-height: normal; font-style: italic; margin: 0px 0px 0px;">
{$CityName}</h1>
   
{$CityDate}
  </td>
 </tr>
 <tr> <td align="center" colspan="6">&nbsp;</td> </tr>
 <tr align="center" style="background-color: #e0e0e0;">
  <th rowspan="2">Банк</th>
  <th colspan="2">Доллар</th>
  <th colspan="2">Евро</th>
  <th rowspan="2">Время <br /> обновления</th>
 </tr>
 <tr align="center" style="background-color: #e0e0e0;">
  <th>покупка&nbsp;</th>
  <th>продажа&nbsp;</th>
  <th>покупка&nbsp;</th>
  <th>продажа&nbsp;</th>
</tr>
END_OF_RECORD10;
  
#Устанавливаем цвета в таблице для актуальных курсов
  
$StyleArr['grrow'] = '#c0c0c0'#Цвет фона нечетного столбца
  
$StyleArr['b-k'] = '#e00000'#Цвет цифр у лучших курсов
  
$StyleArr['BRefCol'] = '#00f'#Цвет ссылки на банк
  
$StyleArr['KursCol'] = '#000'#Цвет букв в строке с курсами банков
  
PrintTableInformerBody($XML->Actual_Rates); #Печатаем актуальные курсы
  
if (sizeof($XML->Not_Actual_Rates->Bank) >= 1)
  { 
#Если есть банки устаревшими курсами
    
print '<tr><th colspan="6">Ниже расположены устаревшие курсы валют:</th></tr>';
    
#Устанавливаем цвета в таблице для устаревших курсов
    
$StyleArr['grrow'] = '#e0e0e0'#Цвет фона нечетного столбца
    
$StyleArr['b-k'] = '#808080'#Цвет цифр у лучших курсов
    
$StyleArr['BRefCol'] = '#808080'#Цвет ссылки на банк
    
$StyleArr['KursCol'] = '#808080'#Цвет букв в строке с курсами банков
    #Печатаем банки с неправильной датой курсов
    
PrintTableInformerBody($XML->Not_Actual_Rates);
  }
  print 
"<tr><td colspan=\"6\" align=\"center\">Источник курсов валют: <a style = \"color: #000000;\" href=\"http://kovalut.ru/index.php?kod={$Kov_City_Kod}\">KOVALUT.RU</a></td></tr>";
  print 
"</table>\n</div>";
}

#Get_FileTime - возвращает время модификации файла если он существует.
#Возвращает 0, если файла не существует. 
function GetFileTime($filename)
{ return ((
file_exists($filename)) ? filemtime($filename) : 0);
}

#Get_Kov_XML - возвращает строку, содержащую XML c курсами валют 
#Курсы загружаются из файла kovt_3503.xml, если время модификации
#файла еще не устарело. Если время модификации файла устарело - 
#XML c курсами извлекается с сайта и сохраняется в файле kovt_3503.xml 
function Get_Kov_XML()
{ global 
$Work_Dir$Kov_City_Kod$Reload_Period;
  
$buf =''#В данную переменную будет загружен XML с курсами валют
  #Создаем переменную с именем файла, в котором будет хранится
  #XML с курсами валют:
  
$XML_File_Name "{$Work_Dir}kovt_{$Kov_City_Kod}.xml"
  
#Проверяем, устарело ли время модификации файла kovt_3503.xml.
  
if (time() > (GetFileTime($XML_File_Name) + $Reload_Period)) 
  { 
#Сразу изменяем время модификации файла, чтобы минимизировать
    #число лишних параллельных загрузок XML с сайта
    
touch($XML_File_Name);
    
#Загружаем XML c сайта KOVALUT.RU:
    
$buf Load_XML_From_Kov_RF();
    
#Проверяем, удалось ли загрузить XML с сайта:
    
if ($buf)
    { 
#Загрузить с сайта получилось. Сохраняем XML с сайта в файл
      
file_put_contents($XML_File_Name$buf);
    }  
  }
  if (!
$buf)
  { 
#XML не был загружен с сайта (или не получилось или 
    #время модификации файла kovt_3503.xml еще не устарело).
    #Загружаем XML с курсами валют из файла.
    
$buf file_get_contents($XML_File_Name);
  }
  return(
$buf);
}

#Load_XML_From_Kov_RF - возвращает строку, содержащую XML c курсами
#валют с сайта KOVALUT.RU В случае, если правильные XML данные загрузить
#не удалось - возвращается пустая строка.
function Load_XML_From_Kov_RF()
{ global 
$Kov_City_Kod;
  
$Kov_Site 'http://informer.kovalut.ru'#Адрес сайта, с которого нужно загружать xml
  #Расположение скрипта, возвращающего XML с курсами:
  
$Kov_XML_Loc '/webmaster/xml-table.php?kod='.$Kov_City_Kod;
  
#$Kov_XML_Loc = '/webmaster/getxml.php?kod='.$Kov_City_Kod;
  
$buf =''#В данную переменную будет считан XML с курсами валют 
  
$OldErrorReportLevel error_reporting(0);
  
#Открываем соединение с сайтом KOVALUT.RU по порту 80 и  таймаутом 10 секунд.
  
$buf file_get_contents($Kov_Site.$Kov_XML_Loc);
  if (!
$buf)
  { 
#Здесь можно обрабатывать ошибку, если не удалось установить
    #соединение с сайтом KOVALUT.RU.
    #echo "$errstr ($errno)<br />\n";
  

  else
  { 
#$XMLTempl - шаблон правильных XML данных.
    
$XMLTempl "\A<\\x3Fxml version=\"1.0\" encoding=\"utf-8\"\\x3F>\n<Exchange_Rates>.+?<\/Exchange_Rates>\Z";
    
#Проверяем, соответствуют ли загруженные данные - шаблону правильных XML данных
    
if (!preg_match("/$XMLTempl/is"$buf$matches))
    { 
#Не удалось загрузить правильные XML данные. Возвращаем пустую строку.
      
$buf '';
    }  
  }
  
#Восстанавливаем изначальный уровень сообщений об ошибках
  
error_reporting($OldErrorReportLevel);
  return(
$buf);
}
?>


Результатом работы данной программы будет следующее:

Белозерск

13 ноября 2018
 
Банк Доллар Евро Время
обновления
покупка  продажа  покупка  продажа 
Сбербанк России 66,2069,30 74,7378,20 13.11.2018 20:14
Источник курсов валют: KOVALUT.RU