Copyright | (c) Mansur Ziiatdinov 2018-2019 |
---|---|
License | BSD-3 |
Maintainer | chgk@pm.me |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Клиент для 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
- module RatingChgkInfo.Types
- module RatingChgkInfo.NoApi
- module RatingChgkInfo.Api
- generateJavascript :: Text
- extraRatingApiDesc :: Swagger
- extraRatingApiApp :: Application
- extraRatingApiMain :: IO ()
Библиотека API
module RatingChgkInfo.Types
module RatingChgkInfo.NoApi
module RatingChgkInfo.Api
generateJavascript :: Text Source #
Текст js-скрипта
Сервер дополнительного API
extraRatingApiDesc :: Swagger Source #
Генерируемое из кода описание в формате Swagger
extraRatingApiApp :: Application Source #
Приложение, которое запускает сервер API
extraRatingApiMain :: IO () Source #
Запуск сервера дополнительного API