Word Counter Pro

Анализируйте документы и считайте слова с определением языка

Статус API ключа: Не установлен

Загрузить документ

Перетащите файлы сюда

или нажмите для выбора

Поддерживаемые форматы: TXT, PDF, DOC, DOCX, CSV, XLSX, XLS, ODT, RTF, PPTX, PPT
Максимальный размер файла: 50 МБ

Анализ текста напрямую

Настройки API

Текущий API ключ
Информация

Для использования API требуется:

  1. Получить API ключ и токен от администратора
  2. Вставить их в поля выше
  3. Сохранить настройки
  4. Все запросы будут отправляться с заголовками X-API-Key и X-API-Token
Внимание: Не передавайте ваш секретный токен третьим лицам!

Документация API

CORS Настроен

API поддерживает кросс-доменные запросы (Cross-Origin Resource Sharing)

Разрешенные домены:

  • http://localhost:3000
  • http://127.0.0.1:3000
  • http://31.31.196.9:5555

Разрешенные методы:

GET POST PUT DELETE OPTIONS
Base URL: http://31.31.196.9:5555 | Все ответы в формате JSON | Требуется аутентификация | CORS: Включен
Аутентификация

Все запросы к API (кроме /health) требуют заголовков аутентификации:

X-API-Key: ваш_api_ключ
X-API-Token: ваш_секретный_токен
Без корректных заголовков получите ошибку 401
POST
Загрузка файла
/api/upload

Форма: file (multipart/form-data)

CORS: Разрешен

Пример успешного ответа 200:

{
  "status": "success",
  "filename": "document.pdf",
  "word_count": 1250,
  "language": "English",
  "language_code": "en",
  "character_count": 7850,
  "text_preview": "This is a sample text from the document..."
}

Пример запроса:

POST /api/upload
Content-Type: multipart/form-data
X-API-Key: wc_...
X-API-Token: ...

Body (form-data):
  file: [бинарные данные файла]
POST
Анализ текста
/api/count-words

JSON: {"text": "ваш текст здесь"}

CORS: Разрешен

Пример ответа 200:

{
  "word_count": 42,
  "language": "Russian",
  "language_code": "ru",
  "character_count": 210,
  "text_preview": "Привет мир! Это тестовый текст для анализа..."
}

Пример запроса:

POST /api/count-words
Content-Type: application/json
X-API-Key: wc_...
X-API-Token: ...

{
  "text": "Hello world! Привет мир!"
}
POST
Пакетная обработка
/api/batch-process

Форма: files[] (несколько файлов)

CORS: Разрешен

Пример успешного ответа 200:

{
  "results": [
    {
      "filename": "file1.docx",
      "word_count": 500,
      "language": "English",
      "character_count": 2500,
      "text_preview": "Document content preview...",
      "status": "success"
    },
    {
      "filename": "file2.pdf",
      "word_count": 750,
      "language": "Russian",
      "character_count": 4200,
      "text_preview": "Текст документа...",
      "status": "success"
    }
  ],
  "total_files": 2,
  "total_words": 1250
}

Пример с ошибкой в файле:

{
  "filename": "corrupted.pdf",
  "error": "Error processing file: Invalid PDF format",
  "status": "error"
}
GET
Статус API
/api/status

Требует аутентификации

CORS: Разрешен

Пример ответа 200:

{
  "status": "active",
  "service": "Word Counter API",
  "version": "1.0.0",
  "domain": "http://31.31.196.9:5555",
  "authentication_required": true,
  "cors_enabled": true,
  "cors_allowed_origins": [
    "http://localhost:3000",
    "http://127.0.0.1:3000",
    "http://31.31.196.9:5555"
  ],
  "your_api_key_info": {
    "name": "User's API Key",
    "api_key": "wc_...",
    "secret_token": "***hidden***",
    "created_at": "2024-01-01T12:00:00",
    "expires_at": "2025-01-01T12:00:00",
    "is_active": true,
    "usage_count": 15,
    "last_used": "2024-03-15T10:30:00"
  }
}
GET
Health Check
/health

Публичный endpoint, не требует аутентификации

CORS: Разрешен

Пример ответа 200:

{
  "status": "healthy",
  "service": "Word Counter API",
  "version": "1.0.0",
  "domain": "http://31.31.196.9:5555/",
  "authentication_required": true,
  "cors_enabled": true,
  "cors_allowed_methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "OPTIONS"
  ],
  "timestamp": "2024-03-15T10:30:00.123456"
}
GET
Поддерживаемые форматы
/api/supported-formats

Требует аутентификации

CORS: Разрешен

Пример ответа 200:

{
  "supported_formats": [
    "txt", "pdf", "doc", "docx", 
    "csv", "xlsx", "xls", "odt",
    "rtf", "pptx", "ppt"
  ],
  "max_file_size_mb": 16,
  "require_api_key": true
}
Диагностические эндпоинты
Диагностика файла POST
/api/diagnose-file

Форма: file (multipart/form-data)

Не требует аутентификации

Пример ответа:

{
  "filename": "document.docx",
  "file_size_bytes": 12345,
  "file_size_mb": 0.012,
  "extension": "docx",
  "is_allowed": true,
  "tests": {
    "is_valid_zip": true,
    "zip_contents": 15,
    "extraction_success": true,
    "extracted_length": 1250,
    "extraction_result": "Текст документа..."
  }
}
Raw проверка файла POST
/api/test-raw

Форма: file (multipart/form-data)

Не требует аутентификации

Пример ответа:

{
  "filename": "document.docx",
  "size_read": 5000,
  "hex_start": "504b0304...",
  "ascii_start": "PK...",
  "is_likely_docx": true
}
Ошибки API
Ошибка 401 401 (Аутентификация)
{
  "error": "API key and token required",
  "status": "error"
}
Ошибка 400 400 (Некорректный запрос)
{
  "error": "No file part",
  "status": "error"
}
Ошибка 400 400 (Неподдерживаемый формат)
{
  "error": "File type not allowed",
  "status": "error"
}
Ошибка 500 500 (Серверная ошибка)
{
  "error": "Internal server error",
  "status": "error"
}
Примеры кода с CORS
import requests
import json

# Конфигурация
API_KEY = "wc_ваш_ключ"
API_TOKEN = "ваш_секретный_токен"
BASE_URL = "http://31.31.196.9:5555"

headers = {
    "X-API-Key": API_KEY,
    "X-API-Token": API_TOKEN,
    # CORS headers автоматически обрабатываются сервером
}

# 1. Health check (без аутентификации, CORS разрешен)
response = requests.get(f"{BASE_URL}/health")
print("API Health:", response.json())

# 2. Загрузка файла с CORS
with open("document.pdf", "rb") as f:
    files = {"file": f}
    response = requests.post(
        f"{BASE_URL}/api/upload",
        headers=headers,
        files=files
    )
    
    if response.status_code == 200:
        result = response.json()
        print("Word count:", result["word_count"])
    elif response.status_code == 401:
        print("CORS/Auth error: Проверьте API ключ и домен")

# 3. Проверка CORS настроек
response = requests.get(f"{BASE_URL}/api/status", headers=headers)
data = response.json()
print("CORS enabled:", data.get("cors_enabled"))
print("Allowed origins:", data.get("cors_allowed_origins"))
// Конфигурация
const API_KEY = "wc_ваш_ключ";
const API_TOKEN = "ваш_секретный_токен";
const BASE_URL = "http://31.31.196.9:5555";

const headers = {
    "X-API-Key": API_KEY,
    "X-API-Token": API_TOKEN,
    // CORS headers не нужны - сервер автоматически добавляет их
};

// 1. Health check (без аутентификации)
async function checkHealth() {
    try {
        const response = await fetch(`${BASE_URL}/health`);
        const data = await response.json();
        console.log('Health check:', data);
        return data;
    } catch (error) {
        console.error('CORS error:', error);
    }
}

// 2. Анализ текста с CORS
async function analyzeText(text) {
    try {
        const response = await fetch(`${BASE_URL}/api/count-words`, {
            method: 'POST',
            headers: {
                ...headers,
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ text }),
            // mode: 'cors' - по умолчанию
        });
        
        if (response.ok) {
            return await response.json();
        } else if (response.status === 401) {
            throw new Error('CORS/Auth error: Проверьте домен и API ключ');
        }
    } catch (error) {
        console.error('Fetch error:', error);
        throw error;
    }
}

// 3. Проверка CORS поддержки
async function checkCorsSupport() {
    const response = await fetch(`${BASE_URL}/api/status`, { headers });
    const data = await response.json();
    console.log('CORS enabled:', data.cors_enabled);
    console.log('Allowed origins:', data.cors_allowed_origins);
    return data;
}
# 1. Проверка CORS headers (OPTIONS запрос)
curl -X OPTIONS \
  -H "Origin: http://localhost:3000" \
  -H "Access-Control-Request-Method: POST" \
  -H "Access-Control-Request-Headers: X-API-Key, X-API-Token" \
  "http://31.31.196.9:5555/api/upload" \
  -v

# 2. Health check с проверкой CORS
curl -X GET \
  -H "Origin: http://localhost:3000" \
  "http://31.31.196.9:5555/health" \
  -v

# 3. Запрос с аутентификацией и CORS
curl -X POST \
  -H "Origin: http://localhost:3000" \
  -H "X-API-Key: wc_ваш_ключ" \
  -H "X-API-Token: ваш_секретный_токен" \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello world!"}' \
  "http://31.31.196.9:5555/api/count-words" \
  -v

# 4. Проверка CORS конфигурации API
curl -X GET \
  -H "X-API-Key: wc_ваш_ключ" \
  -H "X-API-Token: ваш_секретный_токен" \
  "http://31.31.196.9:5555/api/status"

# 5. Загрузка файла с CORS
curl -X POST \
  -H "Origin: http://localhost:3000" \
  -H "X-API-Key: wc_ваш_ключ" \
  -H "X-API-Token: ваш_секретный_токен" \
  -F "file=@document.pdf" \
  "http://31.31.196.9:5555/api/upload" \
  -v
import React, { useState } from 'react';
import axios from 'axios';

const API_BASE = 'http://31.31.196.9:5555';
const API_KEY = 'wc_ваш_ключ';
const API_TOKEN = 'ваш_секретный_токен';

// Создаем axios instance с CORS поддержкой
const apiClient = axios.create({
    baseURL: API_BASE,
    headers: {
        'X-API-Key': API_KEY,
        'X-API-Token': API_TOKEN,
        'Content-Type': 'application/json',
    },
    // CORS настройки
    withCredentials: false, // Не отправлять cookies
});

function WordCounterApp() {
    const [text, setText] = useState('');
    const [result, setResult] = useState(null);
    const [loading, setLoading] = useState(false);

    // Проверка health status с CORS
    const checkHealth = async () => {
        try {
            const response = await axios.get(`${API_BASE}/health`);
            console.log('CORS health check:', response.data);
        } catch (error) {
            console.error('CORS error:', error);
        }
    };

    // Анализ текста
    const analyzeText = async () => {
        setLoading(true);
        try {
            const response = await apiClient.post('/api/count-words', {
                text: text
            });
            setResult(response.data);
        } catch (error) {
            if (error.response?.status === 401) {
                alert('CORS/Auth error: Проверьте API ключ и домен');
            } else if (error.response?.status === 0) {
                alert('CORS error: Домен не разрешен');
            }
            console.error('API error:', error);
        } finally {
            setLoading(false);
        }
    };

    // Загрузка файла
    const uploadFile = async (file) => {
        const formData = new FormData();
        formData.append('file', file);
        
        try {
            const response = await apiClient.post('/api/upload', formData, {
                headers: {
                    'Content-Type': 'multipart/form-data',
                },
            });
            setResult(response.data);
        } catch (error) {
            console.error('Upload error:', error);
        }
    };

    return (
        <div className="app">
            <h1>Word Counter API Client</h1>
            <button onClick={checkHealth}>
                Проверить CORS соединение
            </button>
            <!-- ... остальной компонент -->
        </div>
    );
}

export default WordCounterApp;
CORS Частые вопросы

CORS (Cross-Origin Resource Sharing) - это механизм, который позволяет веб-страницам с одного домена запрашивать ресурсы с другого домена. Наш API полностью поддерживает CORS для разрешенных доменов.

Разрешены следующие домены:
  • http://localhost:3000 (локальная разработка)
  • http://127.0.0.1:3000 (альтернативный localhost)
  • http://31.31.196.9:5555 (продакшен домен)

Чтобы добавить новый домен в CORS, нужно изменить настройки в бэкенде:
CORS(app, resources={
    r"/*": {
        "origins": ["http://новый-домен.com"],
        ...
    }
})

Возможные причины:
  1. Ваш домен не в списке разрешенных
  2. Используется HTTP вместо HTTPS или наоборот
  3. Порт не соответствует разрешенным
  4. Отсутствуют необходимые заголовки аутентификации

Используйте:
curl -X OPTIONS http://31.31.196.9:5555/api/upload -v
Или проверьте ответ от /api/status endpoint.

Диагностика файлов

Информация: Эти инструменты помогут диагностировать проблемы с загрузкой файлов. Они не требуют API ключа и предоставляют детальную информацию о файлах.
Диагностика файла
Загрузите файл для диагностики:
Перетащите файл сюда для диагностики

или нажмите для выбора

Информация о сервере
Проверка состояния API:
Проверка CORS:
Поддерживаемые форматы
Список поддерживаемых форматов:
TXT PDF DOC DOCX CSV XLSX XLS ODT RTF PPTX PPT

Максимальный размер файла: 50 МБ

Проверка форматов:
Частые проблемы и решения

Причина: Проблема с чтением структуры DOCX файла.
Решение:
  1. Используйте инструмент диагностики выше
  2. Проверьте, что файл не поврежден
  3. Попробуйте открыть файл в Word и сохранить заново
  4. Конвертируйте в PDF или TXT формат

Причина: Файл превышает лимит 50 МБ.
Решение:
  1. Сожмите файл (ZIP, RAR)
  2. Разделите файл на несколько частей
  3. Уменьшите размер документа

Причина: Файл имеет расширение не из списка поддерживаемых.
Решение:
  1. Используйте инструмент диагностики для проверки
  2. Конвертируйте файл в один из поддерживаемых форматов
  3. Переименуйте расширение (если уверены в формате)