Documentation
¶
Overview ¶
Package parser предоставляет функциональность для получения и парсинга курсов валют с сайта ЦБ РФ
Package parser предоставляет функциональность для парсинга курсов валют с сайта ЦБ РФ ¶
Package parser предоставляет функциональность для парсинга XML курсов валют с сайта ЦБ РФ
Index ¶
Constants ¶
const ( // CBRURL - базовый URL XML API ЦБ РФ для получения курсов валют CBRURL = "https://www.cbr.ru/scripts/XML_daily.asp" // DefaultTimeout - таймаут для HTTP запросов DefaultTimeout = 10 * time.Second // MaxRetries - максимальное количество повторных попыток при ошибке MaxRetries = 3 // BaseRetryDelay - базовая задержка для exponential backoff (1s, 2s, 4s) BaseRetryDelay = 1 * time.Second // UserAgent - User-Agent для HTTP запросов UserAgent = "CurRate-Go/1.2 (Windows; Go; XML)" )
HTTP константы
Variables ¶
var ( ErrHTTPFailed = errors.New("HTTP request failed") ErrInvalidStatus = errors.New("invalid HTTP status code") ErrMaxRetries = errors.New("max retries exceeded") )
Ошибки HTTP клиента
var ( ErrInvalidRate = errors.New("invalid rate format") ErrInvalidNominal = errors.New("invalid nominal format") )
Ошибки парсинга
var ( ErrInvalidXML = errors.New("invalid XML structure") ErrNoXMLRates = errors.New("no exchange rates found in XML") ErrInvalidXMLRate = errors.New("invalid rate format in XML") ErrXMLTooLarge = errors.New("XML response exceeds size limit") )
Ошибки XML парсинга
Functions ¶
func FetchLatestRates ¶
FetchLatestRates получает последние актуальные курсы валют с сайта ЦБ РФ ctx - контекст для отмены запроса Использует текущую дату (время.Now()) для запроса Возвращает *models.RateData с курсами валют или ошибку
Пример использования:
rates, err := parser.FetchLatestRates(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Printf("EUR курс: %.4f\n", rates.Rates[models.EUR].Rate)
func FetchRates ¶
FetchRates получает курсы валют с сайта ЦБ РФ на указанную дату ctx - контекст для отмены запроса date - дата, на которую нужно получить курсы валют Возвращает *models.RateData с курсами валют или ошибку
Пример использования:
date := time.Date(2025, 12, 20, 0, 0, 0, 0, time.UTC)
rates, err := parser.FetchRates(ctx, date)
if err != nil {
log.Fatal(err)
}
fmt.Printf("USD курс: %.4f\n", rates.Rates[models.USD].Rate)
Types ¶
type ValCurs ¶
type ValCurs struct {
XMLName xml.Name `xml:"ValCurs"`
Date string `xml:"Date,attr"`
Name string `xml:"name,attr"`
Valutes []Valute `xml:"Valute"`
}
ValCurs представляет корневой элемент XML ответа ЦБ РФ Пример: <ValCurs Date="20.12.2025" name="Foreign Currency Market">
type Valute ¶
type Valute struct {
ID string `xml:"ID,attr"`
NumCode string `xml:"NumCode"`
CharCode string `xml:"CharCode"`
Nominal string `xml:"Nominal"` // Строка для обработки некорректных значений без падения всего парсинга
Name string `xml:"Name"`
Value string `xml:"Value"` // Строка, так как ЦБ использует запятую
}
Valute представляет информацию об одной валюте в XML ответе Пример:
<Valute ID="R01235">
<NumCode>840</NumCode>
<CharCode>USD</CharCode>
<Nominal>1</Nominal>
<Name>Доллар США</Name>
<Value>80,7220</Value>
</Valute>