В доменів є інформаційна 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,
        /* Час початку гри у форматі unix time */
        "end_time_f": 1658923200,
        /* Час завершення гри у форматі unix time */
        "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 бота

  • uk/info_api.txt
  • Востаннє змінено: 2026/09/20 07:04
  • (зовнішнє редагування)