API вики

Открытый API только для чтения: статьи, история, поиск и свежие правки в JSON. Для ботов, виджетов, приложений и всего, что придумаете.

Только чтениеТо же, что видит гость: живые страницы и принятые правки. Черновики и правки на проверке не отдаются.
Без ключаРегистрация не нужна. Есть лимит запросов в минуту на адрес, как у самого сайта.
Из браузераЛюбой сайт может звать API напрямую: ответы с Access-Control-Allow-Origin: *.

Базовый адрес

https://beta.filian.wiki/api/v1

Все пути ниже от него. Полное описание для генераторов клиентов: openapi.json

Что есть

ЗапросЧто отдаётПараметры
GET /Вики и список адресов API
GET /pagesЖивые страницы по адресу, страницами по 50 (до 200)ns locale limit after
GET /pages/{path}Страница: текст Markdown, готовый HTML, категории, переводы, последняя правкаlocale format=markdown|html|both
GET /pages/{path}/historyПринятые правки страницы, новые сверхуlocale limit before
GET /revisions/{id}Одна принятая правка целиком
GET /searchПоиск статей по названию и тексту, с выдержкамиq locale all limit offset
GET /recentСвежие правки по всей викиlocale limit before
GET /categories/{key}Страницы в категорииlimit after

Попробовать

Ссылки ниже открывают настоящие ответы этой вики:

curl

curl -s "https://beta.filian.wiki/api/v1/pages/shylily" | jq '.title, .revision.created_at'

JavaScript

const res = await fetch("https://beta.filian.wiki/api/v1/search?q=" + encodeURIComponent("shylily"));
const { items } = await res.json();
for (const hit of items) console.log(hit.title, hit.url);

Ответ

Даты в UTC, в формате RFC 3339. Все ссылки в ответах полные, а HTML уже с абсолютными адресами, его можно вставлять куда угодно.

{
  "path": "shylily",
  "title": "…",
  "locale": "ru",
  "url": "…",
  "revision": { "id": "…", "created_at": "…", "author": { "name": "…" } },
  "categories": [{ "key": "…", "name": "…", "url": "…" }],
  "translations": [{ "locale": "…", "title": "…", "url": "…" }],
  "markdown": "…",
  "license": "https://beta.filian.wiki/license"
}

Постранично

У списков есть поле next. Передайте его в after (страницы, категории) или before (история, свежие правки), чтобы получить следующую часть. Когда next пустой, дальше ничего нет.

{ "items": [ … ], "next": "…" }
GET /pages?after=…
GET /pages/{path}/history?before=…

Ошибки

Ошибка всегда приходит в одном виде:

{ "error": { "code": "not_found", "message": "no such page" } }
HTTPКогда
400Неверный параметр: в message написано, какой
404Нет такой страницы, правки или категории
429Слишком часто: подождите столько секунд, сколько в Retry-After

Правила