greeta commited on
Commit
aef4668
·
verified ·
1 Parent(s): 41c1cae

Delete README.md

Browse files
Files changed (1) hide show
  1. README.md +0 -429
README.md DELETED
@@ -1,429 +0,0 @@
1
- ---
2
- title: AI Scraper ФИПИ
3
- emoji: 🕷️
4
- colorFrom: blue
5
- colorTo: purple
6
- sdk: docker
7
- sdk_version: "docker"
8
- python_version: "3.11"
9
- app_file: app.py
10
- pinned: false
11
- ---
12
-
13
- # 🕷️ AI Scraper ФИПИ
14
-
15
- Сервис для автоматического сбора заданий с сайта ФИПИ (fipi.ru) с использованием AI-анализа на основе **ruBERT**.
16
-
17
- ---
18
-
19
- ## ✨ Возможности
20
-
21
- - 🕷️ **Автоматический парсинг** заданий с сайта ФИПИ
22
- - 🧠 **AI-классификация** заданий через ruBERT
23
- - 💾 **Сохранение в Supabase** с автоматическим обновлением
24
- - 🚀 **Деплой на Hugging Face Spaces**
25
- - 📊 **REST API** для доступа к заданиям
26
- - 🔍 **Поиск** по заданиям
27
- - 📈 **Статистика** и аналитика
28
-
29
- ---
30
-
31
- ## 📁 Структура
32
-
33
- ```
34
- ai-scraper/
35
- ├── app.py # Основное FastAPI приложение
36
- ├── scraper.py # Парсер сайта ФИПИ
37
- ├── rubert_client.py # Клиент для ruBERT API
38
- ├── supabase_client.py # Интеграция с Supabase
39
- ├── models.py # Pydantic модели
40
- ├── requirements.txt # Python зависимости
41
- ├── schema.sql # SQL схема для Supabase
42
- ├── Dockerfile # Docker конфигурация
43
- ├── hf_spaces_config.yaml # Конфиг для Hugging Face
44
- ├── .env.example # Шаблон переменных окружения
45
- └── README.md # Документация
46
- ```
47
-
48
- ---
49
-
50
- ## 🚀 Быстрый старт
51
-
52
- ### 1. Локальная разработка
53
-
54
- ```bash
55
- cd ai-scraper
56
-
57
- # Создайте виртуальное окружение
58
- python -m venv venv
59
-
60
- # Активируйте
61
- venv\Scripts\activate # Windows
62
- source venv/bin/activate # Linux/Mac
63
-
64
- # Установите зависимости
65
- pip install -r requirements.txt
66
-
67
- # Скопируйте .env.example в .env (опционально)
68
- cp .env.example .env
69
-
70
- # Заполните .env своими ключами
71
- # ИЛИ настройте переменные окружения в вашей системе
72
-
73
- # Запустите сервер
74
- uvicorn app:app --reload --host 0.0.0.0 --port 8000
75
- ```
76
-
77
- Откройте http://localhost:8000/docs для Swagger UI.
78
-
79
- ---
80
-
81
- ## ⚙️ Переменные окружения
82
-
83
- ### Для локальной разработки
84
-
85
- Скопируйте `.env.example` в `.env` и заполните своими значениями:
86
-
87
- ```env
88
- SUPABASE_URL=https://your-project.supabase.co
89
- SUPABASE_SERVICE_KEY=your-service-role-key
90
- RUBERT_URL=https://your-rubert.hf.space
91
- FIPI_BASE_URL=https://fipi.ru
92
- ```
93
-
94
- ### Для Hugging Face Spaces
95
-
96
- **Не нужно загружать `.env` файл!** Настройте переменные через интерфейс:
97
-
98
- 1. Откройте ваш Space
99
- 2. Перейдите в **Settings** → **Secrets**
100
- 3. Добавьте переменные:
101
- - `SUPABASE_URL`
102
- - `SUPABASE_SERVICE_KEY`
103
- - `RUBERT_URL` (опционально)
104
- - `FIPI_BASE_URL` (опционально)
105
-
106
- ---
107
-
108
- ## 🗄️ Настройка Supabase
109
-
110
- ### 1. Создайте проект
111
-
112
- Перейдите на [Supabase](https://supabase.com) и создайте новый проект.
113
-
114
- ### 2. Выполните SQL скрипт
115
-
116
- 1. Откройте [SQL Editor](https://supabase.com/dashboard/project/_/sql/new)
117
- 2. Скопируйте содержимое `schema.sql`
118
- 3. Нажмите **Run**
119
-
120
- ### 3. Получите ключи
121
-
122
- 1. Перейдите в **Settings** → **API**
123
- 2. Скопируйте:
124
- - **Project URL** → `SUPABASE_URL`
125
- - **service_role key** → `SUPABASE_SERVICE_KEY`
126
-
127
- ---
128
-
129
- ## 🧠 Настройка ruBERT
130
-
131
- ### Вариант 1: Использование существующего API
132
-
133
- Если у вас уже есть развернутый ruBERT (как в основном проекте):
134
-
135
- ```env
136
- RUBERT_URL=https://your-rubert-instance.hf.space
137
- ```
138
-
139
- ### Вариант 2: Развертывание ruBERT
140
-
141
- Создайте новый Space на Hugging Face с моделью ruBERT:
142
-
143
- 1. [RuBERT от DeepPavlov](https://huggingface.co/deepvk/rubert-base-cased)
144
- 2. Используйте шаблон Gradio или FastAPI
145
- 3. Добавьте эндпоинты `/api/analyze` и `/api/embedding`
146
-
147
- ---
148
-
149
- ## 🌐 Деплой на Hugging Face Spaces
150
-
151
- ### Шаг 1: Создайте Space
152
-
153
- 1. Перейдите на [Hugging Face Spaces](https://huggingface.co/spaces)
154
- 2. Нажмите **Create new Space**
155
- 3. Заполните:
156
- - **Space name**: `fipi-ai-scraper`
157
- - **License**: MIT
158
- - **SDK**: Docker
159
- - **Visibility**: Public или Private
160
-
161
- ### Шаг 2: Загрузите файлы
162
-
163
- ```bash
164
- # Инициализируйте git в папке ai-scraper
165
- cd ai-scraper
166
- git init
167
- git add .
168
- git commit -m "Initial commit"
169
-
170
- # Добавьте remote вашего Space
171
- git remote add origin https://huggingface.co/spaces/YOUR_USERNAME/fipi-ai-scraper
172
-
173
- # Push в Space
174
- git push -u origin main
175
- ```
176
-
177
- ### Шаг 3: Настройте переменные окружения
178
-
179
- **Важно:** Не загружайте `.env` файл в репозиторий!
180
-
181
- В Settings вашего Space добавьте в **Secrets**:
182
-
183
- | Variable | Value |
184
- |----------|-------|
185
- | `SUPABASE_URL` | https://your-project.supabase.co |
186
- | `SUPABASE_SERVICE_KEY` | ваш service key |
187
- | `RUBERT_URL` | https://your-rubert.hf.space |
188
- | `FIPI_BASE_URL` | https://fipi.ru |
189
-
190
- ⚠️ **Примечание:** Переменные окружения добавляются через интерфейс Hugging Face:
191
- **Settings** → **Repository secrets** → **New secret**
192
-
193
- ### Шаг 4: Дождитесь деплоя
194
-
195
- Space автоматически соберет Docker образ и запустит приложение.
196
-
197
- ---
198
-
199
- ## 📡 API Endpoints
200
-
201
- | Метод | Эндпоинт | Описание |
202
- |-------|----------|----------|
203
- | GET | `/` | Информация об API |
204
- | GET | `/api/health` | Проверка статуса сервиса |
205
- | GET | `/api/tasks` | Получить все задания |
206
- | GET | `/api/tasks/latest` | Последние добавленные задания |
207
- | GET | `/api/tasks/{task_id}` | Получить задание по ID |
208
- | GET | `/api/tasks/type/{type}` | Задания по типу |
209
- | GET | `/api/tasks/search?q=` | Поиск заданий |
210
- | POST | `/api/scrape` | Запустить парсинг ФИПИ |
211
- | POST | `/api/analyze` | AI анализ существующих заданий |
212
- | GET | `/api/stats` | Статистика по заданиям |
213
-
214
- ---
215
-
216
- ## 📝 Примеры использования
217
-
218
- ### Python
219
-
220
- ```python
221
- import requests
222
-
223
- BASE_URL = "https://your-space.hf.space"
224
-
225
- # Получить последние задания
226
- response = requests.get(f"{BASE_URL}/api/tasks/latest?limit=10")
227
- tasks = response.json()
228
- print(f"Найдено заданий: {len(tasks)}")
229
-
230
- # Запустить парсинг ФИПИ
231
- response = requests.post(f"{BASE_URL}/api/scrape")
232
- result = response.json()
233
- print(result["message"])
234
-
235
- # Поиск заданий
236
- response = requests.get(f"{BASE_URL}/api/tasks/search?q=сочинение")
237
- tasks = response.json()
238
-
239
- # Получить статистику
240
- response = requests.get(f"{BASE_URL}/api/stats")
241
- stats = response.json()
242
- print(f"Всего заданий: {stats['total_tasks']}")
243
- ```
244
-
245
- ### cURL
246
-
247
- ```bash
248
- # Health check
249
- curl https://your-space.hf.space/api/health
250
-
251
- # Получить задания
252
- curl https://your-space.hf.space/api/tasks/latest
253
-
254
- # Запустить скрапинг
255
- curl -X POST https://your-space.hf.space/api/scrape \
256
- -H "Content-Type: application/json" \
257
- -d '{"subject": "russian"}'
258
-
259
- # Поиск
260
- curl "https://your-space.hf.space/api/tasks/search?q=ЕГЭ"
261
- ```
262
-
263
- ---
264
-
265
- ## 🔧 Конфигурация
266
-
267
- ### Переменные окружения
268
-
269
- | Переменная | Описание | Пример |
270
- |------------|----------|--------|
271
- | `SUPABASE_URL` | URL проекта Supabase | `https://xxx.supabase.co` |
272
- | `SUPABASE_SERVICE_KEY` | Service role ключ Supabase | `eyJhbG...` |
273
- | `RUBERT_URL` | URL ruBERT API | `https://rubert.hf.space` |
274
- | `FIPI_BASE_URL` | Базовый URL ФИПИ | `https://fipi.ru` |
275
- | `PORT` | Порт приложения | `7860` |
276
- | `HOST` | Хост приложения | `0.0.0.0` |
277
-
278
- ---
279
-
280
- ## 🏗️ Архитектура
281
-
282
- ```
283
- ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
284
- │ FIPIScraper │────▶│ RuBERTClient │────▶│ SupabaseClient │
285
- │ (BeautifulSoup)│ │ (HTTP API) │ │ (Supabase JS) │
286
- └─────────────────┘ └──────────────────┘ └─────────────────┘
287
- │ │ │
288
- ▼ ▼ ▼
289
- fipi.ru ruBERT HF Supabase DB
290
- (парсинг) (AI анализ) (хранение)
291
- ```
292
-
293
- ### Поток данных
294
-
295
- 1. **Скрапинг**: `FIPIScraper` парсит задания с fipi.ru
296
- 2. **Анализ**: `RuBERTClient` анализирует текст задания
297
- 3. **Сохранение**: `SupabaseClient` сохраняет в базу данных
298
- 4. **API**: FastAPI предоставляет REST эндпоинты
299
-
300
- ---
301
-
302
- ## 🔒 Безопасность
303
-
304
- - ✅ **RLS (Row Level Security)** в Supabase
305
- - ✅ **Валидация данных** через Pydantic
306
- - ✅ **CORS** настроен для API
307
- - ✅ **Service Key** не экспонируется на клиенте
308
-
309
- ---
310
-
311
- ## 🛠️ Решение проблем
312
-
313
- ### "Supabase не настроен"
314
-
315
- Проверьте переменные окружения:
316
- ```bash
317
- echo $SUPABASE_URL
318
- echo $SUPABASE_SERVICE_KEY
319
- ```
320
-
321
- ### "RuBERT клиент не настроен"
322
-
323
- Убедитесь, что `RUBERT_URL` указан и API доступен:
324
- ```bash
325
- curl https://your-rubert.hf.space/api/health
326
- ```
327
-
328
- ### Ошибки при скрапинге
329
-
330
- Сайт ФИПИ может блокировать запросы. Попробуйте:
331
- - Изменить `User-Agent` в `scraper.py`
332
- - Использовать прокси
333
- - Добавить задержки между запросами
334
-
335
- ### Docker не собирается
336
-
337
- Проверьте логи:
338
- ```bash
339
- docker build -t fipi-scraper .
340
- docker run -p 7860:7860 fipi-scraper
341
- ```
342
-
343
- ### Configuration error / Missing .env
344
-
345
- **Это нормально!** Для Hugging Face Spaces:
346
- 1. Не загружайте `.env` в репозиторий
347
- 2. Настройте переменные через **Settings** → **Repository secrets**
348
- 3. Файл `.env.example` существует только для документации
349
-
350
- ---
351
-
352
- ## 📝 История изменений
353
-
354
- ### Март 2026 - Исправление парсера ФИПИ
355
-
356
- **Исправленные проблемы:**
357
- - ❌ Неверные URL-адреса (404 ошибки)
358
- - ❌ SSL ошибки для поддоменов
359
- - ❌ Некорректный парсинг заголовков
360
-
361
- **Результат:**
362
- - ✅ Найдено заданий: 0 → 12
363
- - ✅ Все запросы возвращают 200 OK
364
-
365
- Подробности в [FIXES.md](FIXES.md)
366
-
367
- ---
368
-
369
- ## 📊 Мониторинг
370
-
371
- ### Логи приложения
372
-
373
- ```bash
374
- # Логи в Hugging Face Space
375
- # Settings → Logs
376
-
377
- # Локально
378
- uvicorn app:app --log-level debug
379
- ```
380
-
381
- ### Метрики
382
-
383
- - `/api/health` — статус сервисов
384
- - `/api/stats` — статистика заданий
385
-
386
- ---
387
-
388
- ## 🤝 Интеграция с основным проектом
389
-
390
- Этот сервис дополняет основной проект `refined-main`:
391
-
392
- 1. **Импорт заданий** из ФИПИ в базу
393
- 2. **AI-анализ** через тот же ruBERT
394
- 3. **Единая Supabase** для обоих сервисов
395
-
396
- ### Подключение
397
-
398
- В основном проекте добавьте:
399
-
400
- ```typescript
401
- // services/fipiTasks.ts
402
- const FIPI_SCRAPER_URL = 'https://fipi-ai-scraper.hf.space';
403
-
404
- export async function fetchLatestTasks(limit = 10) {
405
- const response = await fetch(`${FIPI_SCRAPER_URL}/api/tasks/latest?limit=${limit}`);
406
- return response.json();
407
- }
408
- ```
409
-
410
- ---
411
-
412
- ## 📚 Дополнительные ресурсы
413
-
414
- - [Документация FastAPI](https://fastapi.tiangolo.com/)
415
- - [Документация Supabase](https://supabase.com/docs)
416
- - [Hugging Face Spaces](https://huggingface.co/docs/hub/spaces)
417
- - [ruBERT модель](https://huggingface.co/deepvk/rubert-base-cased)
418
- - [ФИПИ](https://fipi.ru/)
419
-
420
- ---
421
-
422
- ## 📄 Лицензия
423
-
424
- MIT License
425
-
426
- ---
427
-
428
- **Последнее обновление:** Март 2026
429
- **Статус:** ✅ Готово к деплою