- Краулеры: smart_crawler.py, regional_crawler.py - Аудит: audit_orel_to_excel.py, audit_chukotka_to_excel.py - РКН проверка: check_rkn_registry.py, recheck_unclear_rkn.py - Отчёты: create_orel_horizontal_report.py - Обработка: process_all_hotels_embeddings.py - Документация: README.md, DB_SCHEMA_REFERENCE.md
9.2 KiB
9.2 KiB
🎯 ВАЛИДНЫЕ cURL ДЛЯ ИМПОРТА В n8n HTTP REQUEST NODE
📋 ОБЩАЯ ИНФОРМАЦИЯ
API URL: http://185.197.75.249:8004
Локально: http://localhost:8004
Статус: ✅ Работает (проверено 13.10.2025 19:37)
🔍 ЭНДПОИНТЫ
1️⃣ Проверка здоровья API
curl -X GET 'http://185.197.75.249:8004/health' \
-H 'Accept: application/json'
Ответ:
{
"status": "healthy",
"natasha": "ready"
}
2️⃣ Извлечение сущностей (УПРОЩЁННЫЙ - для n8n)
⭐ РЕКОМЕНДУЕТСЯ ДЛЯ n8n! ⭐
curl -X POST 'http://185.197.75.249:8004/extract_simple' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"text": "ИП Фролов С.А. находится по адресу г. Петропавловск-Камчатский, ул. Пограничная 39/1. Директор Иван Петров. ИНН: 8707003759, ОГРН: 1028700516476.",
"max_length": 5000
}'
Реальный ответ (протестировано):
{
"organizations": ["ИП"],
"persons": ["Иван Петров", "Фролов С.А."],
"locations": ["Петропавловск-Камчатский"],
"has_organizations": true,
"has_persons": true,
"has_locations": true,
"total": 4
}
3️⃣ Извлечение сущностей (ПОЛНЫЙ ФОРМАТ)
curl -X POST 'http://185.197.75.249:8004/extract' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"text": "Муниципальное предприятие «Чаунское районное коммунальное хозяйство». ИНН: 8707003759, ОГРН: 1028700516476. Юридический адрес: 689400, г. Певек, ул. Пугачева, 42",
"max_length": 5000
}'
Ответ включает:
{
"organizations": ["Муниципальное предприятие"],
"persons": [],
"locations": ["Певек", "Пугачева"],
"entities": [
{
"type": "ORG",
"text": "Муниципальное предприятие",
"start": 0,
"end": 25
},
{
"type": "LOC",
"text": "Певек",
"start": 110,
"end": 115
}
],
"total_entities": 4
}
🔧 КАК ИМПОРТИРОВАТЬ В n8n HTTP REQUEST NODE
Способ 1: Через Import from cURL
- В n8n добавь HTTP Request Node
- Нажми на кнопку "Import from cURL" (справа вверху в ноде)
- Вставь этот cURL:
curl -X POST 'http://185.197.75.249:8004/extract_simple' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"text": "ИП Фролов С.А. находится по адресу г. Петропавловск-Камчатский, ул. Пограничная 39/1. Директор Иван Петров.", "max_length": 5000}'
- n8n автоматически заполнит все поля ✅
Способ 2: Ручная настройка
Параметры HTTP Request Node:
| Поле | Значение |
|---|---|
| Method | POST |
| URL | http://185.197.75.249:8004/extract_simple |
| Authentication | None |
| Send Body | Yes (JSON) |
| Body Content Type | JSON |
Headers:
{
"Content-Type": "application/json",
"Accept": "application/json"
}
Body (JSON):
{
"text": "{{ $json.quote }}",
"max_length": 5000
}
💡 Где
{{ $json.quote }}- это данные из предыдущей ноды (текст для анализа)
📊 ПРИМЕР ИСПОЛЬЗОВАНИЯ В n8n WORKFLOW
Схема:
┌────────────────┐
│ PostgreSQL │ → Получить текст из БД (hotel_website_processed)
└────────┬───────┘
↓
┌────────────────┐
│ Code Node │ → Подготовить текст (cleaned_text)
└────────┬───────┘
↓
┌────────────────┐
│ HTTP Request │ → http://185.197.75.249:8004/extract_simple
│ (Natasha API) │
└────────┬───────┘
↓
┌────────────────┐
│ Code Node │ → Обработать результат (проверить has_organizations)
└────────────────┘
Код для подготовки данных (Code Node ПЕРЕД HTTP Request):
// Подготовка текста для Natasha API
const items = [];
for (const item of $input.all()) {
items.push({
json: {
hotel_id: item.json.hotel_id,
quote: item.json.cleaned_text || item.json.text || "",
criterion_id: item.json.criterion_id
}
});
}
return items;
Код для обработки ответа (Code Node ПОСЛЕ HTTP Request):
// Обработка ответа от Natasha API
const items = [];
for (const item of $input.all()) {
const organizations = item.json.organizations || [];
const persons = item.json.persons || [];
const locations = item.json.locations || [];
// Проверяем наличие нужных сущностей
const hasOrganizations = organizations.length > 0;
const hasPersons = persons.length > 0;
const hasLocations = locations.length > 0;
// Для критерия 1 (ИНН/ОГРН) проверяем организации
let ner_score = 0.0;
if (item.json.criterion_id === 1) {
ner_score = hasOrganizations ? 1.0 : 0.0;
}
// Для критерия 2 (Адрес) проверяем локации
else if (item.json.criterion_id === 2) {
ner_score = hasLocations ? 1.0 : 0.0;
}
items.push({
json: {
hotel_id: item.json.hotel_id,
criterion_id: item.json.criterion_id,
organizations: organizations,
persons: persons,
locations: locations,
ner_score: ner_score,
has_organizations: hasOrganizations,
has_persons: hasPersons,
has_locations: hasLocations,
total_entities: item.json.total || 0
}
});
}
return items;
🧪 ТЕСТИРОВАНИЕ
Тест 1: Проверка API
curl http://185.197.75.249:8004/health
Ожидаем: {"status":"healthy","natasha":"ready"}
Тест 2: Извлечение организации
curl -X POST http://185.197.75.249:8004/extract_simple \
-H 'Content-Type: application/json' \
-d '{"text": "ООО Рога и Копыта", "max_length": 5000}'
Ожидаем: {"organizations": ["ООО"], ...}
Тест 3: Извлечение адреса
curl -X POST http://185.197.75.249:8004/extract_simple \
-H 'Content-Type: application/json' \
-d '{"text": "г. Москва, ул. Ленина, д. 1", "max_length": 5000}'
Ожидаем: {"locations": ["Москва", "Ленина"], ...}
🔥 ГОТОВЫЙ cURL ДЛЯ КОПИРОВАНИЯ
Для критерия 1 (ИНН/ОГРН):
curl -X POST 'http://185.197.75.249:8004/extract_simple' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"text":"ИП Фролов С.А. ИНН: 8707003759, ОГРН: 1028700516476","max_length":5000}'
Для критерия 2 (Адрес):
curl -X POST 'http://185.197.75.249:8004/extract_simple' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"text":"Юридический адрес: 689400, г. Певек, ул. Пугачева, 42","max_length":5000}'
📝 ДОКУМЕНТАЦИЯ API
Swagger UI доступен по адресу:
- Локально:
http://localhost:8004/docs - Извне:
http://185.197.75.249:8004/docs
⚡ ПРОИЗВОДИТЕЛЬНОСТЬ
- Скорость: ~100-200ms на запрос
- Лимит текста: 5000 символов (настраивается через
max_length) - Параллельность: Поддерживает множество одновременных запросов
🐛 TROUBLESHOOTING
Ошибка: Connection refused
Решение: Проверь, что API запущен:
ps aux | grep natasha_ner_api
Если не запущен:
cd /root/engine/public_oversight/hotels
python3 -m uvicorn natasha_ner_api:app --host 0.0.0.0 --port 8004 --reload
Ошибка: 500 Internal Server Error
Решение: Проверь логи:
tail -f /root/engine/public_oversight/hotels/nohup.out
✅ ПРОВЕРЕНО
- ✅ API работает (13.10.2025 19:37)
- ✅ cURL валидный
- ✅ Протестирован на реальных данных
- ✅ Извлекает: организации, адреса, имена
- ✅ Готов для импорта в n8n
Автор: AI Assistant + Фёдор
Дата: 13 октября 2025
Версия: 1.0