только свобода — только рок: 20 лет, 7 месяцев, 13 дней. 🔥🔥
|
|
| Обзор и подключение |
Базовый URL
Код: https://af.net.ru/api.php
Формат запроса
Все запросы выполняются к одному эндпоинту. Метод передаётся параметром method:
Код: GET https://af.net.ru/api.php?method=METHOD_NAME
POST https://af.net.ru/api.php?method=METHOD_NAME
Обязательные заголовки
| Заголовки запроса |
X-API-Key | Обязателен | Ключ вашего приложения. Получить в AdminCP → REST API. |
X-Auth-Token | Для user-методов | Токен пользователя, полученный через user.login. |
Content-Type | Для POST | application/x-www-form-urlencoded |
Формат ответа
API всегда возвращает JSON с HTTP-заголовком Content-Type: application/json. |
| Аутентификация |
API использует двухуровневую аутентификацию.
Уровень 1 — API Key (обязателен для всех запросов)
Каждое приложение получает уникальный API Key. Передаётся в заголовке:
Код: X-API-Key: ваш_ключ_приложения
API Key управляется в AdminCP → REST API. У каждого ключа есть права (read, write, moderate, admin) и лимит запросов в минуту.
Уровень 2 — User Token (для методов уровня user/moderator/admin)
Для действий от лица пользователя нужно сначала получить токен:
Код: POST /api.php?method=user.login
X-API-Key: ваш_ключ
username=логин&password=пароль
В ответе вернётся:
Код: {
"token": "abc123...",
"expires_at": 1778400000,
"user": { "userid": 42, "username": "Vasya", ... }
}
Далее передавайте токен в заголовке:
Код: X-Auth-Token: abc123...
Токен действителен 30 дней. После истечения нужно повторить user.login.
Уровни доступа методов
| Уровень | Требует X-Auth-Token | Описание |
public | Нет | Достаточно X-API-Key |
user | Да | Любой авторизованный пользователь |
moderator | Да | Пользователь должен быть модератором |
admin | Да | Пользователь должен иметь доступ к AdminCP |
|
| Формат ответов |
Все ответы API имеют одинаковую JSON-структуру.
Успешный ответ (HTTP 200)
Код: {
"field1": "value1",
"field2": 42
}
Данные возвращаются напрямую, без обёртки.
Ответ с ошибкой
Код: {
"error": {
"code": 401,
"message": "Invalid or missing API Key."
}
}
HTTP-статус ответа соответствует коду ошибки в теле. |
| Коды ошибок |
| HTTP код | Значение | Причина |
200 | OK | Запрос выполнен успешно |
400 | Bad Request | Отсутствуют обязательные параметры |
401 | Unauthorized | Неверный или отсутствующий API Key / токен пользователя |
403 | Forbidden | Недостаточно прав у ключа или пользователя |
404 | Not Found | Метод не найден |
405 | Method Not Allowed | Неверный HTTP-метод (напр. GET вместо POST) |
429 | Too Many Requests | Превышен rate limit. Заголовок Retry-After: 60 |
500 | Internal Server Error | Внутренняя ошибка сервера |
|
| Rate Limiting |
Каждое приложение имеет лимит запросов в минуту (rate limit), заданный в настройках ключа.
По умолчанию: 120 запросов/мин.
При превышении лимита API вернёт:
Код: HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later."
}
}
Подождите Retry-After секунд и повторите запрос.
Счётчик сбрасывается каждые 60 секунд. |
| Справочник методов |
test.hello
| HTTP | GET |
| Уровень | public |
| Параметры | — |
| Описание | Проверка соединения. Возвращает название форума и текущий timestamp. |
Код: curl -X GET "https://af.net.ru/api.php?method=test.hello" \
-H "X-API-Key: ВАШ_КЛЮЧ"
Код: {
"message": "Hello from the vBulletin REST API!",
"forum_title": "Альтернативный Форум",
"current_user": "Guest",
"timestamp": 1775803196
}
forums.list
| HTTP | GET |
| Уровень | public |
| Параметры | — |
| Описание | Список форумов, доступных текущему пользователю (или гостю). |
Код: curl -X GET "https://af.net.ru/api.php?method=forums.list" \
-H "X-API-Key: ВАШ_КЛЮЧ"
Код: {
"forums": [
{ "forumid": 1, "title": "...", "parentid": 0, "threads": 42, "posts": 1337 },
...
],
"total": 25
}
user.login
| HTTP | POST |
| Уровень | public |
| Параметры POST | username (string), password (string) |
| Описание | Аутентификация пользователя. Возвращает токен для последующих запросов. |
Код: curl -X POST "https://af.net.ru/api.php?method=user.login" \
-H "X-API-Key: ВАШ_КЛЮЧ" \
-d "username=Vasya&password=секрет"
Код: {
"token": "a1b2c3d4...",
"expires_at": 1778400000,
"user": { "userid": 42, "username": "Vasya", "usergroupid": 2, "email": "..." }
}
user.me
| HTTP | GET |
| Уровень | user |
| Параметры | — |
| Описание | Данные текущего авторизованного пользователя. |
Код: curl -X GET "https://af.net.ru/api.php?method=user.me" \
-H "X-API-Key: ВАШ_КЛЮЧ" \
-H "X-Auth-Token: ВАШ_ТОКЕН"
Код: {
"userid": 42, "username": "Vasya", "email": "...",
"usergroupid": 2, "posts": 150, "joindate": 1600000000
}
user.logout
| HTTP | POST |
| Уровень | user |
| Параметры | — |
| Описание | Инвалидирует текущий токен пользователя. |
Код: curl -X POST "https://af.net.ru/api.php?method=user.logout" \
-H "X-API-Key: ВАШ_КЛЮЧ" \
-H "X-Auth-Token: ВАШ_ТОКЕН"
Код: { "message": "Logged out successfully." } |
| Примеры кода |
PHP (cURL)
Код:
<?php
define('API_BASE', 'https://af.net.ru/api.php');
define('API_KEY', 'ВАШ_КЛЮЧ');
function api_get(string $method, string $token = ''): array {
$ch = curl_init(API_BASE . '?method=' . $method);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array_filter([
'X-API-Key: ' . API_KEY,
$token ? 'X-Auth-Token: ' . $token : '',
]),
]);
return json_decode(curl_exec($ch), true);
}
function api_post(string $method, array $data, string $token = ''): array {
$ch = curl_init(API_BASE . '?method=' . $method);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_HTTPHEADER => array_filter([
'X-API-Key: ' . API_KEY,
$token ? 'X-Auth-Token: ' . $token : '',
]),
]);
return json_decode(curl_exec($ch), true);
}
// Логин
$auth = api_post('user.login', ['username' => 'Vasya', 'password' => 'секрет']);
$token = $auth['token'];
// Данные пользователя
$me = api_get('user.me', $token);
echo $me['username'];
// Список форумов
$forums = api_get('forums.list');
foreach ($forums['forums'] as $f) {
echo $f['title'] . "\n";
}
Python (requests)
Код:
import requests
API_BASE = "https://af.net.ru/api.php"
API_KEY = "ВАШ_КЛЮЧ"
headers = {"X-API-Key": API_KEY}
# Логин
r = requests.post(API_BASE, params={"method": "user.login"},
headers=headers, data={"username": "Vasya", "password": "секрет"})
token = r.json()["token"]
auth_headers = {**headers, "X-Auth-Token": token}
# Данные пользователя
me = requests.get(API_BASE, params={"method": "user.me"}, headers=auth_headers).json()
print(me["username"])
# Список форумов
forums = requests.get(API_BASE, params={"method": "forums.list"}, headers=headers).json()
for f in forums["forums"]:
print(f["title"])
JavaScript (fetch)
Код:
const API_BASE = "https://af.net.ru/api.php";
const API_KEY = "ВАШ_КЛЮЧ";
async function apiGet(method, token = null) {
const headers = { "X-API-Key": API_KEY };
if (token) headers["X-Auth-Token"] = token;
const r = await fetch(`${API_BASE}?method=${method}`, { headers });
return r.json();
}
async function apiPost(method, data, token = null) {
const headers = { "X-API-Key": API_KEY, "Content-Type": "application/x-www-form-urlencoded" };
if (token) headers["X-Auth-Token"] = token;
const r = await fetch(`${API_BASE}?method=${method}`, {
method: "POST",
headers,
body: new URLSearchParams(data),
});
return r.json();
}
// Логин
const { token } = await apiPost("user.login", { username: "Vasya", password: "секрет" });
// Профиль
const me = await apiGet("user.me", token);
console.log(me.username);
// Форумы
const { forums } = await apiGet("forums.list");
forums.forEach(f => console.log(f.title));
|
|
Powered by vBulletin® Version 3.8.11 PL4; Copyright ©2000 - 2026, Jelsoft Enterprises Ltd; Оператор обработки ПДн - ИП Алексеев А.С.; ИНН: 333411310227; ОГРН: 307333419200050; тел. +7 (4922) 49-42-22, legal@smalta.net;
Часовой пояс GMT +3, время: 08:15.
|
Любые сообщения на Альтернативном Форуме — являются субъективным отражением реальности, написавших их авторов и публикуются без предварительной модерации. Администрация форума не принимает на себя ответственность за содержание таких материалов. В рамках функционирования форума осуществляется хранение ограниченного набора данных: имя пользователя, адрес электронной почты, IP-адрес (в момент входа) и cookie для поддержки сессии. Метаданные пользователей обрабатываются и направляются в уполномоченные органы только при наличии официального запроса в порядке, установленном законодательством РФ. В случае выявления противоправного контента, пожалуйста, направляйте уведомление через кнопку «Жалоба» или форму обратной связи.
|
|
|