parser

package
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 14, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package parser предоставляет функциональность для получения и парсинга курсов валют с сайта ЦБ РФ

Package parser предоставляет функциональность для парсинга курсов валют с сайта ЦБ РФ

Package parser предоставляет функциональность для парсинга XML курсов валют с сайта ЦБ РФ

Index

Constants

View Source
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

View Source
var (
	ErrHTTPFailed    = errors.New("HTTP request failed")
	ErrInvalidStatus = errors.New("invalid HTTP status code")
	ErrMaxRetries    = errors.New("max retries exceeded")
)

Ошибки HTTP клиента

View Source
var (
	ErrInvalidRate    = errors.New("invalid rate format")
	ErrInvalidNominal = errors.New("invalid nominal format")
)

Ошибки парсинга

View Source
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

func FetchLatestRates(ctx context.Context) (*models.RateData, error)

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

func FetchRates(ctx context.Context, date time.Time) (*models.RateData, error)

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)

func ParseXML

func ParseXML(r io.Reader, date time.Time) (*models.RateData, error)

ParseXML парсит XML ответ ЦБ РФ и возвращает данные о курсах валют r - io.Reader с XML контентом (может быть в кодировке windows-1251) date - дата курсов (используется для установки даты в ExchangeRate)

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>

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL