Інформаційна 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, /* Час початку гри у форматі 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 бот
Отримати інформацію про зміни на сайті також можна за допомогою Інформаційного Telegram бота