info_api

У доменов есть информационная API, с помощью которой можно полоучить инофрмацию обо всех активных и предстоящих играх на домене в формате JSON. Это полезно для разработки сторонних сервисов, дублирующих информацию о домене в другие места (Telegram, сайты и т.п.), и для собственных страниц домена, которые рисуют свою афишу.

api_games_list.php

Пример запроса: https://game.qeng.org/api_games_list.php?v=2

Набор полей в ответе задаёт GET-параметр v.

  • Без v — версия 1: ответ, который API отдавала всегда, вместе со списками команд (teams) и авторов (authors). Старые запросы с json=1 — это она; менять её мы не будем, и параметр fields в ней не читается.
  • v=2 — всё, кроме teams и authors. Эти два списка собираются отдельными запросами к базе на каждую игру, а нужны далеко не всем: если они вам не нужны, ответ так получается заметно дешевле и быстрее.

Незнакомый номер версии считается последним известным, а не ошибкой.

GET-параметр fields перечисляет через запятую, какие именно поля нужны. Работает начиная с v=2.

  • Список задаёт набор целиком, а не добавку к набору версии.
  • Поле id есть в ответе всегда, просить его не нужно.
  • Порядок в запросе не важен — поля в ответе идут в своём обычном порядке.
  • Незнакомые имена просто пропускаются, ошибкой это не считается.

Пример: афише домена хватает названия, времени и рейтинга. https://game.qeng.org/api_games_list.php?v=2&fields=name,start_time_f,end_time_f,rating,me

[{Игра}, {Игра}, ...]

Здесь Игра - это объект следующего вида:

{
        "id": 3287,
        /* ID игры */
        "start_time": "2022-07-25 15:00:00",
        /* Время начала игры в читабельном формате */
        "end_time": "2022-07-27 15:00:00",
        /* Время окончания игры в читабельном формате */
        "start_time_f": 1658750400,
        /* Время начала игры в формате unixtime*/
        "end_time_f": 1658923200,
        /* Время окончания игры в формате unixtime */
        "name": "QD10:  Операция болт или другие приключения гаечки",
        /* Название игры. Спецсимволы в формате HTML entity, например " */
        "type": 1,
        /* Тип игры:
        0: Штурм
        1: Линейка
        2: Таймер
        */
        "kind": 1,
        /* Вид игры:
        0: other
        1: green
        2: yellow
        3: red
        4: virtual
        */
        "single": false,
        /* Одиночная или командная:
        false: Командная
        true: Одиночная
        */
        "description": "PS: следите за обновлениями.<\/strong><\/p>\r\n",
         /* Описание игры*/
        "authors": [
            /* Список авторов. Только по запросу: fields=authors */
            {
                "uid": "2130",
                /* ID игрока */
                "username": "StelZ"
                /* Ник игрока */
            }
        ],
        "teams": [
            /* Список команд, подавших заявки на игру. Для одиночных игр - список игроков, подавших заявки.
               Только по запросу: fields=teams */
            {
                "id": "201",
                /* ID команды*/
                "name": "911 Team",
                /* Название команды*/
                "status": "0"
                /* Статус заявки:
                "0": Подали заявку
                "1": Приняты в игру
                "2": Приняты для теста
                */
            },
            {
                "id": "200",
                "name": "Nostra sQuadra",
                "status": "0"
            },
        ],
        "rating": {
            /* Оценка игры игроками - то же число, что на странице отзывов.
               null, если игру ещё никто не оценил. Только по запросу: fields=rating */
            "average": 4.5,
            /* Средняя оценка в звёздах, от 0.5 до 5 */
            "n": 12,
            /* Сколько игроков оценило */
            "n_reviews": 3
            /* Сколько из них написало отзыв */
        },
        "me": {
            /* Как дела в этой игре у того, кто спрашивает.
               null, если он не вошёл на сайт или в этой игре не участвует.
               Только по запросу: fields=me */
            "team_id": 201,
            /* Последняя активная команда: та, за которую он в этой игре играл
               последний раз. В одиночной игре это сам игрок, и тут его ID */
            "team_name": "911 Team",
            /* Её название, а в одиночной игре - имя самого игрока */
            "score": 340,
            /* Баллы этой команды - та же сумма, что игрок видит у себя в игре:
               с бонусами и штрафами. Может быть отрицательной */
            "status": "playing"
            /* Как далеко она в игре зашла:
            "playing": есть задание в работе
            "finished": в игре была, заданий в работе не осталось
            "not_started": заявка есть, игру ещё не начинала
            */
        }
    }

Поле me считается для того, кто прислал запрос, поэтому со страницы домена его надо запрашивать обычным fetch() с того же домена — тогда браузер сам приложит к запросу куки, и движок узнает игрока. Ответ с этим полем кэшировать нельзя, и заголовки об этом движок ставит сам.

Состояния «finished» по времени тут не бывает: список отдаёт только игры, которые ещё не кончились.

Получить информацию об изменениях на сайте также можно с помощью Информационного Telegram бота

  • info_api.txt
  • Последние изменения: 2026/09/20 07:03
  • (внешнее изменение)