Skip to content

Парсинг API из APILayer и составления диаграммы на языке go

License

Notifications You must be signed in to change notification settings

reinbowARA/API-GO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Курс доллара в рублях

Данная программа извлекает данные курса из API, предоставленным на сайте APILayer. Выкладывает эти данные в базу данных типа SQLite. После эти данные идут на создание графика, который после загрузится в свободный доступ на ресурсе imgBB.

Как программа работает

программа реализованна через следующие функции:

Обработка запроса API из APILayer

Чтобы получить 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, ибо на основе этой утилиты и рисуются графики.

пример графика:

drawing

Отправка графиков на imgBB

Для работы с данным ресурсом надо зарегистрироваться и получить API ключ.

Картинку надо преобразовать в бинарный файл и запихнуть в форму запроса, а сам запрос мы открываем через метод POST.

мои графики в imgBB

About

Парсинг API из APILayer и составления диаграммы на языке go

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages