Быстрый старт
API Glitchmug — это JSON REST API по адресу https://api.glitchmug.com/v1 (тот же API доступен и по https://glitchmug.com/api/v1 — им пользуется сайт). Сайт — всего лишь его первый клиент: всё, что видно на сайте, можно получить через API.
- Читать опубликованные моды, игры, профили и коллекции можно без ключа.
- Для записи (создание модов, загрузка файлов, комментарии, вебхуки) нужен API-ключ.
1. Проверить, что API работает
- curl
- TypeScript
- Python
#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${GLITCHMUG_API:-https://api.glitchmug.com/v1}"
curl -fsS "$BASE_URL/health"
const baseUrl = process.env.GLITCHMUG_API ?? 'https://api.glitchmug.com/v1';
const res = await fetch(`${baseUrl}/health`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(await res.json());
import json
import os
import urllib.request
base_url = os.environ.get("GLITCHMUG_API", "https://api.glitchmug.com/v1")
with urllib.request.urlopen(f"{base_url}/health") as res:
print(json.load(res))
2. Получить список модов
Списки фильтруются параметрами запроса и листаются курсором. Подробнее — в разделе Пагинация и фильтры.
- curl
- TypeScript
- Python
#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${GLITCHMUG_API:-https://api.glitchmug.com/v1}"
# First page; pass page.nextCursor back as ?cursor= for the next one
curl -fsS "$BASE_URL/mods?game=deadlock&sort=downloads&limit=5"
const baseUrl = process.env.GLITCHMUG_API ?? 'https://api.glitchmug.com/v1';
type Page = { data: { id: string; title: string }[]; page: { nextCursor: string | null; hasMore: boolean } };
// Walk every page of a filtered list (stop after 3 pages here)
let cursor: string | null = null;
for (let i = 0; i < 3; i++) {
const q = new URLSearchParams({ game: 'deadlock', sort: 'downloads', limit: '5' });
if (cursor) q.set('cursor', cursor);
const res = await fetch(`${baseUrl}/mods?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const body = (await res.json()) as Page;
for (const m of body.data) console.log(m.id, m.title);
if (!body.page.hasMore) break;
cursor = body.page.nextCursor;
}
import json
import os
import urllib.parse
import urllib.request
base_url = os.environ.get("GLITCHMUG_API", "https://api.glitchmug.com/v1")
# Walk every page of a filtered list (stop after 3 pages here)
cursor = None
for _ in range(3):
query = {"game": "deadlock", "sort": "downloads", "limit": 5}
if cursor:
query["cursor"] = cursor
with urllib.request.urlopen(f"{base_url}/mods?{urllib.parse.urlencode(query)}") as res:
body = json.load(res)
for mod in body["data"]:
print(mod["id"], mod["title"])
if not body["page"]["hasMore"]:
break
cursor = body["page"]["nextCursor"]
3. Создать API-ключ
Войдите на glitchmug.com, откройте Настройки → API-ключи и создайте ключ. Секрет показывается один раз. Сохраните его в переменную окружения:
export GLITCHMUG_TOKEN=gm_xxxxxxxx_yyyyyyyy
4. Вызвать метод с авторизацией
- curl
- TypeScript
- Python
#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${GLITCHMUG_API:-https://api.glitchmug.com/v1}"
curl -fsS "$BASE_URL/me" \
-H "Authorization: Bearer $GLITCHMUG_TOKEN"
const baseUrl = process.env.GLITCHMUG_API ?? 'https://api.glitchmug.com/v1';
const res = await fetch(`${baseUrl}/me`, {
headers: { Authorization: `Bearer ${process.env.GLITCHMUG_TOKEN}` },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const me = await res.json();
console.log(me.username, me.permissions);
import json
import os
import urllib.request
base_url = os.environ.get("GLITCHMUG_API", "https://api.glitchmug.com/v1")
req = urllib.request.Request(
f"{base_url}/me",
headers={"Authorization": f"Bearer {os.environ['GLITCHMUG_TOKEN']}"},
)
with urllib.request.urlopen(req) as res:
me = json.load(res)
print(me["username"], me["permissions"])
Дальше
- Загрузка мода — весь путь от черновика до публикации.
- Вебхуки — уведомления о событиях вместо постоянных опросов.
- Справочник API — все методы и схемы (на английском).