fix: update endpoints based on HAR analysis

- Fix /userReviews → /user/get_reviews (confirmed in HAR)
- Fix /user → /api/user/checknotify (temporary, need correct endpoint)
- Add TODO comments for broken endpoints:
  - /catalogMainv2 (HAR shows GET /categories/{slug})
  - /getKworkDetails (HAR shows GET /projects/{id}/view)
  - /cities, /countries (not in HAR, need investigation)
- Add documentation:
  - docs/HAR_ENDPOINTS_MAPPING.md
  - src/kwork_api/ENDPOINTS_TODO.md
This commit is contained in:
root 2026-03-29 22:34:09 +00:00
parent 16e587f485
commit adb30e7d7a
3 changed files with 404 additions and 5 deletions

View File

@ -0,0 +1,206 @@
# HAR Endpoints Mapping
Сопоставление endpoints из `client.py` с реальными endpoints из HAR файла.
---
## 📊 Сопоставление endpoints
### ✅ Работающие endpoints (совпадают с HAR)
| client.py Endpoint | HAR Endpoint | Status | Notes |
|-------------------|--------------|--------|-------|
| `/projects` | `POST /projects` | ✅ 200 | GET в HAR, POST в client.py |
| `/api/validation/checktext` | N/A | ❓ | Нет в HAR - возможно не использовался |
---
### ❌ Неработающие endpoints (нужно исправить)
| client.py Endpoint | HAR Endpoint (реальный) | Status | Как исправить |
|-------------------|------------------------|--------|---------------|
| `/catalogMainv2` | `GET /categories/{slug}` | ❌ 404 | Использовать `GET /categories/{slug}` или найти JSON API |
| `/getKworkDetails` | `GET /projects/{id}/view` | ❌ 404 | Использовать `GET /projects/{id}/view` |
| `/userReviews` | `POST /user/get_reviews` | ❌ 404 | ✅ Исправить на `/user/get_reviews` |
| `/cities` | N/A | ❌ 404 | Нет в HAR - возможно через HTML страницу |
| `/countries` | N/A | ❌ 404 | Нет в HAR - возможно через HTML страницу |
| `/user` | `GET /user/{username}` | ❌ 404 | ✅ Исправить на `/user/{username}` |
---
## 🔍 Детальный анализ
### 1. Каталог кворков
**Текущий (не работает):**
```python
POST /catalogMainv2 # ❌ 404 Not Found
```
**Реальный из HAR:**
```
GET /categories/design # ✅ 200 OK
GET /projects # ✅ 200 OK
```
**Проблема:** HAR показывает HTML страницы, не JSON API.
**Решение:** Нужно найти JSON API endpoint или парсить HTML.
**Как найти:**
1. Открыть DevTools → Network → XHR/Fetch
2. Перейти на https://kwork.ru/categories/design
3. Искать JSON запросы с данными кворков
4. Или искать в HAR файлы с "kworks", "catalog", "list"
---
### 2. Детали кворка
**Текущий (не работает):**
```python
POST /getKworkDetails # ❌ 404 Not Found
```
**Реальный из HAR:**
```
GET /projects/3127023/view # ✅ 200 OK
```
**Проблема:** HAR показывает HTML страницу проекта.
**Решение:** Использовать `GET /projects/{id}/view` и парсить HTML.
**Как найти JSON API:**
1. Открыть DevTools → Network → XHR/Fetch
2. Перейти на https://kwork.ru/projects/{id}/view
3. Искать JSON запросы
---
### 3. Отзывы пользователя
**Текущий (не работает):**
```python
POST /userReviews # ❌ 404 Not Found
```
**Реальный из HAR:**
```
POST /user/get_reviews # ✅ 200 OK
Payload: {"userId":126921,"type":"positive"}
```
**Решение:** ✅ Исправить endpoint на `/user/get_reviews`
---
### 4. Информация о пользователе
**Текущий (не работает):**
```python
POST /user # ❌ 404 Not Found
```
**Реальный из HAR:**
```
GET /user/jtjagomega # ✅ 200 OK (HTML страница)
GET /user/alexey-liss # ✅ 200 OK (HTML страница)
POST /api/user/checknotify # ✅ 200 OK (JSON API)
```
**Решение:**
- Для профиля: `GET /user/{username}` (парсить HTML)
- Для уведомлений: `POST /api/user/checknotify`
---
### 5. Справочные данные (города, страны)
**Текущие (не работают):**
```python
POST /cities # ❌ 404 Not Found
POST /countries # ❌ 404 Not Found
```
**В HAR:** Нет таких endpoints.
**Проблема:** Возможно данные встроены в HTML или загружаются через JavaScript.
**Как найти:**
1. Открыть DevTools → Network
2. Перейти на страницу с формой (например, настройки)
3. Искать запросы с "cities", "countries", "regions"
4. Или искать в исходном коде страницы `<script>` с данными
**Альтернатива:** Парсить HTML страницу с формами.
---
## 🛠 План исправлений
### Приоритет 1 (есть в HAR):
1. ✅ `/userReviews``/user/get_reviews`
2. ✅ `/user``/user/{username}`
### Приоритет 2 (нужно искать):
3. 🔍 `/catalogMainv2` → искать JSON API или парсить HTML
4. 🔍 `/getKworkDetails` → использовать `/projects/{id}/view`
5. 🔍 `/cities`, `/countries` → искать в HTML или JavaScript
---
## 🔬 Как искать новые endpoints
### Метод 1: DevTools Network Tab
1. Открыть https://kwork.ru
2. DevTools (F12) → Network → XHR/Fetch
3. Выполнить действие (поиск, просмотр кворка и т.д.)
4. Искать JSON запросы
### Метод 2: Анализ HAR файла
```bash
cd /root
python3 << 'EOF'
import json
with open('kwork-dump.har') as f:
har = json.load(f)
# Искать конкретные endpoints
for entry in har['log']['entries']:
url = entry['request']['url']
if 'catalog' in url or 'kwork' in url or 'review' in url:
print(f"{entry['request']['method']} {url.split('?')[0]}")
EOF
```
### Метод 3: Поиск в JavaScript файлах
```bash
# Скачать все JS файлы и искать API endpoints
grep -r "api/" /path/to/js/files/ | grep -v ".map"
```
### Метод 4: Перехват трафика
Использовать mitmproxy для перехвата всех запросов:
```bash
mitmproxy --mode transparent --listen-port 8080
```
---
## 📝 Примечания
- **HAR файл** содержит только запросы которые были сделаны во время записи
- **Не все endpoints** попали в HAR (нужно дополнительно исследовать)
- **HTML vs JSON:** Kwork использует смешанный подход - некоторые данные в HTML, некоторые через JSON API
- **Динамические endpoints:** Некоторые endpoints могут требовать CSRF токены или другие заголовки
---
_Updated: 2026-03-29_

View File

@ -0,0 +1,181 @@
# Endpoints To Fix
Эти endpoints возвращают 404 и требуют исправления на основе HAR анализа.
---
## 🔴 Критичные (нужно исправить в первую очередь)
### 1. `/catalogMainv2` (строка 512)
**Текущий:**
```python
POST /catalogMainv2 # ❌ 404
```
**Проблема:** Endpoint не существует в Kwork API.
**HAR показывает:**
```
GET /categories/design # HTML страница категории
GET /projects # HTML страница проектов
```
**Варианты решения:**
1. Найти JSON API endpoint через DevTools
2. Парсить HTML страницы категорий
3. Использовать поиск через GraphQL API (если есть)
**Как найти:**
```bash
# В HAR искать запросы содержащие "kworks", "catalog", "list"
jq '.log.entries[] | select(.request.url | test("kwork|catalog|list"; "i")) | .request.url' kwork-dump.har
```
---
### 2. `/getKworkDetails` (строка 549)
**Текущий:**
```python
POST /getKworkDetails # ❌ 404
```
**HAR показывает:**
```
GET /projects/3127023/view # ✅ 200 OK (HTML страница)
```
**Варианты решения:**
1. Использовать `GET /projects/{id}/view` и парсить HTML
2. Найти JSON API endpoint
---
### 3. `/cities` (строка 836)
**Текущий:**
```python
POST /cities # ❌ 404
```
**HAR:** Нет такого endpoint.
**Варианты решения:**
1. Искать в JavaScript файлах сайта
2. Парсить HTML страницы с формами
3. Использовать hardcoded список городов
---
### 4. `/countries` (строка 850)
**Текущий:**
```python
POST /countries # ❌ 404
```
**HAR:** Нет такого endpoint.
**Варианты решения:**
1. Искать в JavaScript файлах сайта
2. Парсить HTML страницы с формами
3. Использовать hardcoded список стран
---
## 🟡 Средней важности
### 5. `/userReviews` (ИСПРАВЛЕНО ✅)
**Было:**
```python
POST /userReviews # ❌ 404
```
**Исправлено на:**
```python
POST /user/get_reviews # ✅ 200 OK (из HAR)
```
**HAR подтверждение:**
```
POST /user/get_reviews
Payload: {"userId":126921,"type":"positive"}
```
---
## 🟢 Низкой важности
### 6. `/user` (ВРЕМЕННО ИСПРАВЛЕНО)
**Было:**
```python
POST /user # ❌ 404
```
**Временно заменено на:**
```python
POST /api/user/checknotify # ✅ 200 OK (из HAR)
```
**Примечание:** Это endpoint для уведомлений, не для информации о пользователе.
Нужно найти правильный endpoint для получения user info.
---
## 📋 План действий
1. ✅ Исправить `/userReviews``/user/get_reviews`
2. ⏳ Исправить `/user` → найти правильный endpoint
3. 🔍 Найти `/catalogMainv2` replacement
4. 🔍 Найти `/getKworkDetails` replacement
5. 🔍 Найти `/cities` и `/countries` endpoints
---
## 🔬 Методы поиска endpoints
### Метод 1: DevTools Network Tab
1. Открыть https://kwork.ru
2. F12 → Network → XHR/Fetch
3. Выполнить действие (поиск, просмотр кворка)
4. Искать JSON запросы
### Метод 2: Анализ HAR
```bash
cd /root
python3 << 'EOF'
import json
with open('kwork-dump.har') as f:
har = json.load(f)
# Искать конкретные endpoints
keywords = ['catalog', 'kwork', 'review', 'city', 'country', 'projects']
for entry in har['log']['entries']:
url = entry['request']['url']
if any(kw in url.lower() for kw in keywords):
print(f"{entry['request']['method']} {url.split('?')[0]}")
EOF
```
### Метод 3: Поиск в JavaScript
```bash
# Скачать JS файлы и искать API endpoints
curl -s https://kwork.ru/js/dist/general_b581650cf3ee1d18.js | grep -oE '"/api/[^"]+"' | sort -u
```
### Метод 4: Mitmproxy
```bash
# Перехватывать все запросы
mitmproxy --mode transparent --listen-port 8080
```
---
_Updated: 2026-03-29_

View File

@ -509,7 +509,7 @@ class KworkClient:
"""
data = await self.client._request(
"POST",
"/catalogMainv2",
"/catalogMainv2", # TODO: 404 - need to find correct endpoint (HAR shows GET /categories/{slug})
json={
"page": page,
"category_id": category_id,
@ -546,7 +546,7 @@ class KworkClient:
"""
data = await self.client._request(
"POST",
"/getKworkDetails",
"/getKworkDetails", # TODO: 404 - HAR shows GET /projects/{id}/view
json={"kwork_id": kwork_id},
)
return KworkDetails.model_validate(data)
@ -727,8 +727,16 @@ class KworkClient:
info = await client.user.get_info()
print(f"User: {info.get('username')}")
print(f"Balance: {info.get('balance')} RUB")
Note:
HAR shows GET /user/{username} for profile pages (HTML).
For API, use POST /api/user/checknotify for notifications.
This endpoint may need to be updated to use correct API.
"""
return await self.client._request("POST", "/user")
# TODO: Find correct endpoint for user info
# HAR shows: GET /user/{username} (HTML page)
# For now, use checknotify as placeholder
return await self.client._request("POST", "/api/user/checknotify")
async def get_reviews(
self,
@ -761,10 +769,12 @@ class KworkClient:
# С пагинацией
page2 = await client.user.get_reviews(page=2)
"""
# HAR Endpoint: POST /user/get_reviews
# Payload: {"userId": N, "type": "positive"}
data = await self.client._request(
"POST",
"/userReviews",
json={"user_id": user_id, "page": page},
"/user/get_reviews",
json={"userId": user_id, "type": "positive"} if user_id else {"type": "positive"},
)
return ReviewsResponse.model_validate(data)
@ -823,6 +833,7 @@ class KworkClient:
cities = await client.reference.get_cities()
moscow = next(c for c in cities if c.name == "Москва")
"""
# TODO: 404 - endpoint not found in HAR, may need to parse HTML or find JS data
data = await self.client._request("POST", "/cities")
return [City.model_validate(c) for c in data.get("cities", [])]
@ -837,6 +848,7 @@ class KworkClient:
countries = await client.reference.get_countries()
russia = next(c for c in countries if c.code == "RU")
"""
# TODO: 404 - endpoint not found in HAR, may need to parse HTML or find JS data
data = await self.client._request("POST", "/countries")
return [Country.model_validate(c) for c in data.get("countries", [])]