Аутентификация
Все методы требуют передачи в запросе GET (Один из видов токена)
- botToken — токен бота
- secretKey — секретный ключ
Базовый путь: /v1/bot/user/
Пример: как спарсить всех пользователей
Чтобы получить всех пользователей бота, нужно обходить список по страницам: вызывать index с limit и offset, пока в ответе есть записи. Лимит на одну страницу — не более 500 записей.
Алгоритм
- Опционально вызвать count с теми же фильтрами — узнать общее количество.
- Задавать
limit(например, 500) и увеличиватьoffsetнаlimitпосле каждого запроса. - Повторять запросы, пока
dataне вернёт пустой массив или массив корочеlimit.
Пример
$baseUrl = 'https://your-api.com/v1/bot/user';
$botId = 1;
$limit = 500;
$allUsers = [];
$offset = 0;
do {
$payload = [
'bot_id' => $botId,
'botToken' => 'YOUR_BOT_TOKEN',
'secretKey' => 'YOUR_SECRET_KEY',
'limit' => $limit,
'offset' => $offset,
];
$ch = curl_init($baseUrl . '/index');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response, true);
if (empty($json['result'])) {
throw new RuntimeException($json['message'] ?? 'API error');
}
$chunk = $json['data'] ?? [];
$allUsers = array_merge($allUsers, $chunk);
$offset += $limit;
} while (count($chunk) === $limit);
// $allUsers — массив всех пользователей
import requests
BASE_URL = 'https://your-api.com/v1/bot/user'
BOT_ID = 1
LIMIT = 500
def fetch_all_users():
session = requests.Session()
session.headers.update({'Content-Type': 'application/json'})
payload = {
'bot_id': BOT_ID,
'botToken': 'YOUR_BOT_TOKEN',
'secretKey': 'YOUR_SECRET_KEY',
'limit': LIMIT,
'offset': 0,
}
all_users = []
offset = 0
while True:
payload['offset'] = offset
response = session.post(f'{BASE_URL}/index', json=payload)
response.raise_for_status()
data = response.json()
if not data.get('result'):
raise RuntimeError(data.get('message', 'API error'))
chunk = data.get('data') or []
all_users.extend(chunk)
if len(chunk) < LIMIT:
break
offset += LIMIT
return all_users
if __name__ == '__main__':
users = fetch_all_users()
print(f'Всего пользователей: {len(users)}')
const BASE_URL = 'https://your-api.com/v1/bot/user';
const BOT_ID = 1;
const LIMIT = 500;
const body = {
bot_id: BOT_ID,
botToken: 'YOUR_BOT_TOKEN',
secretKey: 'YOUR_SECRET_KEY',
limit: LIMIT,
offset: 0
};
const allUsers = [];
async function fetchAllUsers() {
let offset = 0;
let hasMore = true;
while (hasMore) {
body.offset = offset;
const response = await fetch(`${BASE_URL}/index`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
const json = await response.json();
if (!json.result) {
throw new Error(json.message || 'API error');
}
const chunk = json.data || [];
allUsers.push(...chunk);
hasMore = chunk.length === LIMIT;
offset += LIMIT;
}
return allUsers;
}
fetchAllUsers().then(users => {
console.log('Всего пользователей:', users.length);
});
Пример с предварительным count (узнать общее число)
// Сначала получаем количество
const countResponse = await fetch(`${BASE_URL}/count`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
bot_id: BOT_ID,
botToken: 'YOUR_BOT_TOKEN',
secretKey: 'YOUR_SECRET_KEY'
})
});
const countJson = await countResponse.json();
const total = parseInt(countJson.data, 10);
// Дальше цикл по offset до total (или пока data не пустой)
Важно: сохраняйте одни и те же фильтры в count и в index, иначе число и список могут не совпадать. Между запросами при большом объёме данных можно делать небольшую паузу (например, 100–200 ms), чтобы не перегружать API.
Формат ответов
- Успех:
{ "result": true, "data": <данные> } - Ошибка:
{ "result": false, "message": "<текст ошибки>" }(или аналог черезApiHelper::errorNew())