Данная программа извлекает данные курса из API, предоставленным на сайте APILayer. Выкладывает эти данные в базу данных типа SQLite. После эти данные идут на создание графика, который после загрузится в свободный доступ на ресурсе imgBB.
программа реализованна через следующие функции:
- Обработка запроса API из APILayer
- Загрузка данных в БД и их обработка в программе
- Создание графиков курса изменения доллара в течении конкретного промежутка времени
- Отправка графиков на imgBB
Чтобы получить API нужно зарегистрироваться на сайте APILayer либо через почту, либо через гугл или github. После регистрации ищем вкладку Fixer API, где мы и получим наш API токен. Прежде чем писать код, ознакомьтесь с документацией, в котором есть примеры, как выглядит простой код на языке Go.
Поскольку нам нужны изменения курса доллара за небольшой промежуток времени, то воспользуемся запросом типа "/latest". В документации есть пример запроса на языке go
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.apilayer.com/fixer/latest?symbols=RUB&base=USD"
client := &http.Client {}
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("apikey", "TOKEN_API")
if err != nil {
fmt.Println(err)
}
res, err := client.Do(req)
if res.Body != nil {
defer res.Body.Close()
}
body, err := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}
В итоге мы получаем json код
{
"base": "USD",
"date": "2023-03-30",
"rates": {
"RUB": 77.166992
},
"success": true,
"timestamp": 1680179583
}
среди этих данных нам нужно достать только RUB. Для этого мы пишем структуру, по которой мы будем снимать данные, в данном случае нам надо достать:
"rates": {
"RUB": 77.166992
}
Следовательно, описываем структуры, действуем по принципу "изнутри наружу" (да-да я мастер придумывать имена), т.е. сначала зададим структуру для "RUB"
:
type Rates struct {
RUB float64 `json:"RUB"`
}
И после этого мы задаем структуру для "rates"
:
type Response struct {
Rates Rates `json:"rates"`
}
действуя из примера кода предоставленным на сайте, нам остается только заполнить данные через структуры.
Перед работой с БД из данного репозитория, вам нужно создать таблицу в файле "Current.db"
, для этого в консоли в режиме sqlite3 вписать следующие команды:
.open Current.db
CREATE TABLE exchange_rates(
id INTEGER PRIMARY KEY,
currency TEXT,
rate DECIMAL,
created_at DATE);
.exit
В случае если у вас уже есть таблица, но вы хотите заново её заполнить новыми данными, то перед CREATE TABLE
пропишите DROP TABLE exchange_rates;
Для создании графиков используется библиотека gonum.org/v1/plot.
Перед использованием программы надо скачать утилиту gnuplot
, ибо на основе этой утилиты и рисуются графики.
пример графика:
Для работы с данным ресурсом надо зарегистрироваться и получить API ключ.
Картинку надо преобразовать в бинарный файл и запихнуть в форму запроса, а сам запрос мы открываем через метод POST
.