Copyright | (c) Mansur Ziiatdinov 2018-2019 |
---|---|
License | BSD-3 |
Maintainer | chgk@pm.me |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Функции здесь повторяют те запросы, которые доступны в API сайта рейтинга. Те
функции, которые недоступны через API, реализованы в NoApi
.
Кроме того, есть вспомогательная функция getAllItems
для удобства.
Synopsis
- type RatingClient = ClientM
- runRatingApi :: RatingClient a -> IO (Either ClientError a)
- players :: Maybe Int -> RatingClient (Items Player)
- player :: PlayerId -> RatingClient [Player]
- playerTeams :: PlayerId -> RatingClient [PlayerTeam]
- playerLastTeam :: PlayerId -> RatingClient [PlayerTeam]
- playerTeam :: PlayerId -> Int -> RatingClient [PlayerTeam]
- playerTournaments :: PlayerId -> RatingClient (SeasonMap PlayerSeason)
- playerLastTournament :: PlayerId -> RatingClient PlayerSeason
- playerTournament :: PlayerId -> Int -> RatingClient PlayerSeason
- playerRatings :: PlayerId -> RatingClient [PlayerRating]
- playerLastRating :: PlayerId -> RatingClient PlayerRating
- playerRating :: PlayerId -> Int -> RatingClient PlayerRating
- teams :: Maybe Int -> RatingClient (Items Team)
- team :: TeamId -> RatingClient [Team]
- teamBaseRecaps :: TeamId -> RatingClient (SeasonMap TeamBaseRecap)
- teamLastBaseRecap :: TeamId -> RatingClient TeamBaseRecap
- teamBaseRecap :: TeamId -> Int -> RatingClient TeamBaseRecap
- teamTournaments :: TeamId -> RatingClient (SeasonMap TeamTournament)
- teamLastTournament :: TeamId -> RatingClient TeamTournament
- teamTournament :: TeamId -> Int -> RatingClient TeamTournament
- teamRatings :: TeamId -> RatingClient [TeamRating]
- teamRatingA :: TeamId -> RatingClient TeamRating
- teamRatingB :: TeamId -> RatingClient TeamRating
- teamRating :: TeamId -> Int -> RatingClient TeamRating
- tournaments :: Maybe Int -> RatingClient (Items TournamentShort)
- tournament :: TournamentId -> RatingClient [Tournament]
- tournamentResults :: TournamentId -> RatingClient [TournamentResult]
- tournamentResultsTown :: TournamentId -> Int -> RatingClient [TournamentResult]
- tournamentResultsRegion :: TournamentId -> Int -> RatingClient [TournamentResult]
- tournamentResultsCountry :: TournamentId -> Int -> RatingClient [TournamentResult]
- tournamentTeamResult :: TournamentId -> TeamId -> RatingClient [TourResult]
- tournamentRecaps :: TournamentId -> RatingClient [RecapTeam]
- tournamentRecap :: TournamentId -> TeamId -> RatingClient [RecapPlayer]
- tournamentControversials :: TournamentId -> RatingClient [Controversial]
- tournamentAppeals :: TournamentId -> RatingClient [Appeal]
- teamSearch :: Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Bool -> Maybe Int -> RatingClient (Items Team)
- playerSearch :: Maybe Text -> Maybe Text -> Maybe Text -> Maybe Int -> RatingClient (Items Player)
- tournamentSearch :: Maybe TournamentType -> Maybe Int -> Maybe Int -> RatingClient (Items TournamentShort)
- getAllItems :: (Maybe Int -> RatingClient (Items a)) -> RatingClient [a]
Работа с API
type RatingClient = ClientM Source #
Синоним типа для реэкспорта. Монада, в которой возможно выполнять запросы к REST API сайта рейтинга
:: RatingClient a | Набор команд, работающих с API сайта рейтинга |
-> IO (Either ClientError a) | Результат работы, либо ошибка |
Запуск клиента API сайта рейтинга
Все запросы внутри RatingClient
используют один и тот же менеджер соединений
Информация об игроках
:: Maybe Int | Номер страницы в результате |
-> RatingClient (Items Player) | Список игроков, по 1000 элементов |
Список всех игроков
Запрос /players
:: PlayerId | Идентификатор игрока |
-> RatingClient [Player] | Информация об игроке, список из единственного элемента |
Информация об игроке
API NOTE. Результат должен быть Player
, а не список игроков из одного элемента
Запрос /players/:id
О командах игроков
:: PlayerId | Идентификатор игрока |
-> RatingClient [PlayerTeam] | Список команд игрока |
Команды, в базовых составах которых играл игрок
Запрос /players/:id/teams
:: PlayerId | Идентификатор игрока |
-> RatingClient [PlayerTeam] | Список команд игрока |
Команды, в базовый состав которых игрок входит в текущем сезоне
Запрос /players/:id/teams/last
:: PlayerId | Идентификатор игрока |
-> Int | Идентификатор сезона |
-> RatingClient [PlayerTeam] | Список команд игрока |
Команды, в базовый состав которых игрок входил в указанном сезоне
Запрос /players/:id/teams/:season
О турнирах игроков
:: PlayerId | Идентификатор игрока |
-> RatingClient (SeasonMap PlayerSeason) | Турниры игрока по сезонам |
Турниры, которые отыграл игрок, по сезонам
Запрос /players/:id/tournaments
:: PlayerId | Идентификатор игрока |
-> RatingClient PlayerSeason |
Турниры, которые игрок отыграл в текущем сезоне
Запрос /players/:id/tournaments/last
:: PlayerId | Идентификатор игрока |
-> Int | Идентификатор сезона |
-> RatingClient PlayerSeason |
Турниры, которые игрок отыграл в указанном сезоне
Запрос /players/:id/tournaments/:season
О рейтингах игроков
:: PlayerId | Идентификатор игрока |
-> RatingClient [PlayerRating] | Список рейтингов игрока, порядок не определён |
Рейтинги игрока
Запрос /players/:id/rating
:: PlayerId | Идентификатор игрока |
-> RatingClient PlayerRating |
Рейтинг игрока в последнем релизе
API NOTE. Работает не всегда: например, для 54345 в декабре 2018 ничего не возвращало (off-by-one error?)
Запрос /players/:id/rating/last
:: PlayerId | Идентификатор игрока |
-> Int | Идентификатор релиза |
-> RatingClient PlayerRating |
Рейтинг игрока в указанном релизе
Запрос /players/:id/rating/:release
Информация о командах
:: Maybe Int | Номер страницы в результате |
-> RatingClient (Items Team) | Команды по 1000 элементов |
Список всех команд
Запрос /teams
:: TeamId | Идентификатор команды |
-> RatingClient [Team] | Команда, список из единственного элемента |
Информация о команде
API NOTE: должна быть команда, а не список из команд
Запрос /teams/:id
Базовые составы
:: TeamId | Идентификатор команды |
-> RatingClient (SeasonMap TeamBaseRecap) | Базовые составы по сезонам |
Базовые составы команды
Запрос /teams/:id/recaps
:: TeamId | Идентификатор команды |
-> RatingClient TeamBaseRecap |
Базовый состав команды в последнем сезоне
Запрос /teams/:id/recaps/last
:: TeamId | Идентификатор команды |
-> Int | Идентификатор сезона |
-> RatingClient TeamBaseRecap |
Базовый состав команды в указанном сезоне
Запрос /teams/:id/recaps/:season
Отыгранные турниры
:: TeamId | Идентификатор команды |
-> RatingClient (SeasonMap TeamTournament) | Турниры команды по сезонам |
Турниры, отыгранные командой
Запрос /teams/:id/tournaments
:: TeamId | Идентификатор команды |
-> RatingClient TeamTournament |
Турниры, отыгранные командой в последнем сезоне
Запрос /teams/:id/tournaments/last
:: TeamId | Идентификатор команды |
-> Int | Идентификатор сезона |
-> RatingClient TeamTournament |
Турниры, отыгранные командой в указанном сезоне
Запрос /teams/:id/tournaments/:season
Рейтинги
:: TeamId | Идентификатор команды |
-> RatingClient [TeamRating] | Список рейтингов команды, порядок не определён |
Рейтинги команды
Запрос /teams/:id/rating
:: TeamId | Идентификатор команды |
-> RatingClient TeamRating |
Последний рейтинг команды по формуле A
API NOTE. Работает не всегда: для 1 ничего не возвращает (off-by-one error?)
Запрос /teams/:id/rating/a
:: TeamId | Идентификатор команды |
-> RatingClient TeamRating |
Последний рейтинг команды по формуле B
API NOTE. Работает не всегда: для 1 ничего не возвращает (off-by-one error?)
Запрос /teams/:id/rating/b
:: TeamId | Идентификатор команды |
-> Int | Идентификатор релиза |
-> RatingClient TeamRating |
Рейтинг команды в указанном релизе
Запрос /teams/:id/rating/:release
Информация о турнирах
:: Maybe Int | Номер страницы ( |
-> RatingClient (Items TournamentShort) | Информация о турнирах по 1000 элементов |
Список всех турниров
Запрос /tournaments
:: TournamentId | Идентификатор турнира |
-> RatingClient [Tournament] | Единственный элемент списка - турнир |
Информация о турнире
API NOTE: должен быть турнир, а не список турниров
Запрос /tournaments/:id
Результаты турнира
:: TournamentId | Идентификатор турнира |
-> RatingClient [TournamentResult] | Результаты по командам, порядок не определён |
Результаты турнира
Запрос /tournaments/:id/list
tournamentResultsTown Source #
:: TournamentId | Идентификатор турнира |
-> Int | Идентификатор города |
-> RatingClient [TournamentResult] | Результаты по командам, порядок не определён |
Результаты турнира для команд города
Запрос /tournaments/:id/list/town/:town
tournamentResultsRegion Source #
:: TournamentId | Идентификатор турнира |
-> Int | Идентификатор региона |
-> RatingClient [TournamentResult] | Результаты по командам, порядок не определён |
Результаты турнира для команд региона
Запрос /tournaments/:id/list/region/:region
tournamentResultsCountry Source #
:: TournamentId | Идентификатор турнира |
-> Int | Идентификатор страны |
-> RatingClient [TournamentResult] | Результаты по командам, порядок не определён |
Результаты турнира для команд страны
Запрос /tournaments/:id/list/country/:country
:: TournamentId | Идентификатор турнира |
-> TeamId | Идентификатор команды |
-> RatingClient [TourResult] | Список результатов по турам |
Результат указанной команды на турнире
Запрос /tournaments/:id/results/:team
Составы на турнире
:: TournamentId | Идентификаторр турнира |
-> RatingClient [RecapTeam] |
Составы команд на турнире
Запрос /tournaments/:id/recaps
Since: 0.3.6.4
:: TournamentId | Идентификатор турнира |
-> TeamId | Идентификатор команды |
-> RatingClient [RecapPlayer] | Список игроков с флагами К/Б/Л |
Составы указанной команды на турнире
Запрос /tournaments/:id/recaps/:team
Спорные и апелляции
tournamentControversials Source #
:: TournamentId | Идентификатор турнира |
-> RatingClient [Controversial] | Спорные |
Спорные на турнире
Запрос /tournaments/:id/controversials
Since: 0.3.6.3
:: TournamentId | Идентификатор турнира |
-> RatingClient [Appeal] | Апелляции |
Апелляции на турнире
Запрос /tournaments/:id/appeals
Since: 0.3.6.3
Различные способы поиска
В функции поиска передаётся несколько значений типа 'Maybe a'. Если соответствующее значение установлено, по этому параметру производится поиск. Если установлено несколько значений, они объединяются при помощи логической связки И.
:: Maybe Text | Название (name) |
-> Maybe Text | Город (town) |
-> Maybe Text | Регион (region_name) |
-> Maybe Text | Страна (country_name) |
-> Bool | Играла в текущем сезоне (active_this_season) |
-> Maybe Int | Номер страницы в результате |
-> RatingClient (Items Team) | Список команд по 1000 элементов |
Поиск по командам
Запрос /teams/search
:: Maybe Text | Фамилия |
-> Maybe Text | Имя |
-> Maybe Text | Отчество |
-> Maybe Int | Номер страницы в результате |
-> RatingClient (Items Player) | Список игроков по 1000 элементов |
Поиск по игрокам
Запрос /players/search
:: Maybe TournamentType | Тип турнира |
-> Maybe Int | Находится ли турнир в архиве (0 - не находится, 1 - находится) |
-> Maybe Int | Номер страницы в результате |
-> RatingClient (Items TournamentShort) |
Поиск по турнирам
Запрос /tournaments/search
Вспомогательные функции
:: (Maybe Int -> RatingClient (Items a)) | Запрос с разбиением на страницы |
-> RatingClient [a] | Список всех элементов |
Получение всех элементов из запроса с разбиением по страницам
В функции предполагается, что сайт рейтинга, как и указано в документации, разбивает ответ на куски по 1000 элементов