Сервер можно не поднимать
В Pull API webhook URL не указывается. Результаты не приходят входящим POST, пользователь сам забирает их через API.
Pull API позволяет запускать парсинг, проверять статус и забирать результат напрямую через запросы к api.atomparser.io, без своего сервера и входящего webhook.
В Pull API webhook URL не указывается. Результаты не приходят входящим POST, пользователь сам забирает их через API.
Парсинг запускается, останавливается и проверяется запросами к api.atomparser.io, а готовый результат доступен через /parse/results.
Secret берется из API-раздела в боте. Лимит: 6 запросов в минуту на все endpoints API.
Основные endpoints для Pull API:
Запуск: POST https://api.atomparser.io/start_parse
Остановка: POST https://api.atomparser.io/stop_parse
Статус: GET https://api.atomparser.io/parse/status
Результаты: GET https://api.atomparser.io/parse/results
Secret: SECRET
Пример запуска парсинга и получения результата через Pull API:
import asyncio
import aiohttp
user_id = "USER_ID"
secret = "SECRET"
async def main():
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.atomparser.io/start_parse",
json={
"user_id": user_id,
"secret": secret
}
) as resp:
data = await resp.read()
print(data)
while True:
await asyncio.sleep(15)
async with session.get(
"https://api.atomparser.io/parse/results",
params={
"user_id": user_id,
"secret": secret
}
) as resp:
data = await resp.read()
print(data)
asyncio.run(main())
Если пользователю нужен webhook и свой сервер, можно подключить локальный endpoint. В этом режиме Telegram-бот будет отправлять json с результатами парсинга на указанный адрес.
Сервер должен принять входящий запрос от Telegram-бота и сохранить полученный json.
После запуска локальный адрес нужно сделать доступным по публичному URL через ngrok или Cloudflare Tunnel, чтобы бот мог отправить запрос.
Публичный URL туннеля нужно вставить в раздел API внутри бота. После этого бот сможет присылать файл на указанный endpoint.
Ниже базовый пример локального endpoint, который принимает POST-запрос от Telegram-бота, сохраняет тело как json и отвечает статусом 200 OK.
Создайте папку проекта и установите Express.
npm init -y
npm install express
Этот маршрут принимает json и сохраняет его как json.
const express = require("express");
const fs = require("fs");
const app = express();
app.use(express.json({ limit: "10mb" }));
app.post("/atom", (req, res) => {
fs.writeFileSync(
"json",
JSON.stringify(req.body, null, 2)
);
res.status(200).json({ ok: true });
});
app.listen(3000, () => {
console.log("Server running on http://localhost:3000/atom");
});
После запуска локальная точка приёма будет доступна на порту 3000.
node server.js
Для теста и быстрой настройки подойдут туннель-сервисы. Пользователь получает публичный URL и вставляет его в боте в поле API endpoint.
# Вариант 1: ngrok
ngrok http 3000
# Вариант 2: Cloudflare Tunnel
cloudflared tunnel --url http://localhost:3000
После запуска сервис выдаст публичный адрес. В бота нужно вставить endpoint в таком формате:
https://your-name.ngrok-free.app/atom
https://random-name.trycloudflare.com/atom
Когда endpoint уже добавлен, в боте появляется блок с тремя важными значениями: webhook для получения json, endpoint запуска и secret для старта парсинга.
Пользователь копирует secret из этого меню и использует его в теле POST-запроса. Без корректного secret запуск парсинга не пройдет.
Сначала пользователь задает endpoint для получения результата, затем отдельно отправляет команду на start_parse, чтобы запустить процесс.
Ниже готовый пример. Пользователь подставляет свой USER_ID и SECRET из меню бота и отправляет запрос на https://api.atomparser.io/start_parse.
Это основной пример ручного запуска парсинга через API.
curl -X POST "https://api.atomparser.io/start_parse" \
-H "Content-Type: application/json" \
-d '{
"user_id": "USER_ID",
"secret": "SECRET"
}'
USER_ID подставить ID пользователя, а
вместо SECRET секрет из меню, которое бот показывает после добавления
endpoint.