rating-chgk-info-0.3.6.3: Client for rating.chgk.info API and CSV tables (documentation in Russian)

Copyright(c) Mansur Ziiatdinov 2018-2019
LicenseBSD-3
Maintainerchgk@pm.me
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

RatingChgkInfo

Contents

Description

Клиент для REST API сайта рейтинга (rating.chgk.info) и функциональности, которой нет в REST API, но которая доступна через экспорт CSV. Также содержит REST-сервер для дополнительной функциональности, доступной через CSV

Документация по типам параметров и возвращаемых значений находится в RatingChgkInfo.Types

Документация по функциям для работы с REST API находится в RatingChgkInfo.Api

Документация по функциям для работы с CSV находится в RatingChgkInfo.NoApi

В следующем большом релизе планируется заменить в части типов для REST API списки значений на множества (Set), например, для составов команд и т.п. Это должно повысить безопасность библиотеки, и не должно ухудшить возможности работы.

Пример использования:

-- Немного наших библиотек
import RatingChgkInfo.Types
import RatingChgkInfo.Api

-- И немного стандартных библиотек
import Control.Monad (forM, void)
import Control.Monad.IO.Class (liftIO)
import Data.List (nub)
import Data.Time (LocalTime(..),fromGregorian,midnight)

-- Точка входа в приложение
main :: IO ()

-- Функция runRatingApi запускает работу клиента, это позволяет разделять эффекты
main = void $ runRatingApi $ do

  -- Получим список всех очных турниров за 2018 год

  let s2018 = LocalTime (fromGregorian 2018 1 1) midnight
      e2018 = LocalTime (fromGregorian 2019 1 1) midnight

  -- Функция tournaments получает одну страницу турниров, а функция getAllItems
  -- оборачивает подобные функции, чтобы пройтись по всем страницам.
  -- Далее из этого списка выбираются очные турниры 2018 года
  tourns <- filter (\t -> trs_typeName t == Casual &&
                          trs_dateStart t >= s2018 &&
                          trs_dateEnd t <= e2018) <$>
            getAllItems tournaments

  -- Проходимся по полученному списку
  ts <- forM tourns $ \t -> do

    -- API сайта рейтинга выдаёт строки в качестве идентификаторов, а нам нужны числа
    let ident = apiIdToInt (trs_idtournament t)

    -- Получаем результаты турнира
    res <- tournamentResults ident

    -- Возвращаем названия команд-участниц
    pure (map tr_current_name res)

  -- Выводим, сколько уникальных названий было по всем турнирам
  liftIO (print (length (nub ts)))
Synopsis

Библиотека API

Сервер дополнительного API

extraRatingApiDesc :: Swagger Source #

Генерируемое из кода описание в формате Swagger

extraRatingApiApp :: Application Source #

Приложение, которое запускает сервер API

extraRatingApiMain :: IO () Source #

Запуск сервера дополнительного API