Tryb RESTful API¶
Weeb CLI może działać jako serwer RESTful API, zapewniając punkty końcowe HTTP dla wszystkich operacji dostawców, w tym wyszukiwania, listy odcinków, ekstrakcji strumieni i szczegółów anime.
Instalacja¶
Zainstaluj z zależnościami RESTful API:
Użycie¶
Podstawowe użycie¶
Uruchom serwer z domyślnymi ustawieniami:
Serwer uruchomi się na http://0.0.0.0:8080 ze wszystkimi dostępnymi dostawcami.
Niestandardowa konfiguracja¶
weeb-cli serve restful \
--port 9000 \
--host 127.0.0.1 \
--providers animecix,hianime \
--no-cors \
--debug
Opcje polecenia¶
| Opcja | Zmienna środowiskowa | Domyślna | Opis |
|---|---|---|---|
--port |
RESTFUL_PORT |
8080 |
Port HTTP do powiązania |
--host |
RESTFUL_HOST |
0.0.0.0 |
Adres hosta do powiązania |
--providers |
RESTFUL_PROVIDERS |
animecix,hianime,aniworld,docchi |
Nazwy dostawców oddzielone przecinkami |
--cors/--no-cors |
RESTFUL_CORS |
true |
Włącz/wyłącz CORS |
--debug |
RESTFUL_DEBUG |
false |
Włącz tryb debugowania |
Punkty końcowe API¶
Sprawdzenie stanu¶
Sprawdź, czy serwer działa:
Odpowiedź:
{
"status": "ok",
"service": "weeb-cli-restful",
"providers": ["animecix", "hianime", "aniworld", "docchi"]
}
Lista dostawców¶
Pobierz wszystkich dostępnych dostawców:
Odpowiedź:
{
"success": true,
"providers": [
{
"name": "animecix",
"lang": "tr",
"region": "TR",
"class": "AnimecixProvider"
}
],
"loaded": ["animecix", "hianime"]
}
Wyszukaj anime¶
Wyszukaj anime u dostawców:
Parametry zapytania:
- q (wymagane): Zapytanie wyszukiwania
- provider (opcjonalne): Nazwa dostawcy (domyślnie pierwszy załadowany)
Odpowiedź:
{
"success": true,
"provider": "animecix",
"query": "naruto",
"count": 10,
"results": [
{
"id": "12345",
"title": "Naruto",
"type": "series",
"cover": "https://example.com/cover.jpg",
"year": 2002
}
]
}
Pobierz szczegóły anime¶
Pobierz szczegółowe informacje o anime:
Parametry zapytania:
- provider (opcjonalne): Nazwa dostawcy (domyślnie pierwszy załadowany)
Odpowiedź:
{
"success": true,
"provider": "animecix",
"anime": {
"id": "12345",
"title": "Naruto",
"type": "series",
"cover": "https://example.com/cover.jpg",
"year": 2002,
"description": "Opis anime...",
"genres": ["Akcja", "Przygoda"],
"status": "completed",
"episodes": [...]
}
}
Pobierz odcinki¶
Wyświetl wszystkie odcinki anime:
Parametry zapytania:
- provider (opcjonalne): Nazwa dostawcy (domyślnie pierwszy załadowany)
- season (opcjonalne): Filtruj według numeru sezonu
Odpowiedź:
{
"success": true,
"provider": "animecix",
"anime_id": "12345",
"count": 220,
"episodes": [
{
"id": "ep-1",
"number": 1,
"title": "Enter: Naruto Uzumaki!",
"season": 1,
"url": "https://example.com/episode/1"
}
]
}
Pobierz strumienie¶
Pobierz adresy URL strumieni dla odcinka:
Parametry zapytania:
- provider (opcjonalne): Nazwa dostawcy (domyślnie pierwszy załadowany)
- sort (opcjonalne): Sortuj według jakości (asc lub desc, domyślnie desc)
Odpowiedź:
{
"success": true,
"provider": "animecix",
"anime_id": "12345",
"episode_id": "ep-1",
"count": 3,
"streams": [
{
"url": "https://example.com/stream.m3u8",
"quality": "1080p",
"server": "default",
"headers": {
"Referer": "https://example.com"
},
"subtitles": null
}
]
}
Wdrożenie Docker¶
Używając Docker Compose¶
Używając Dockerfile¶
Zbuduj obraz:
Uruchom kontener:
docker run -d \
--name weeb-cli-restful \
-p 8080:8080 \
-e RESTFUL_PROVIDERS=animecix,hianime \
weeb-cli-restful
Zmienne środowiskowe¶
Wszystkie opcje poleceń można skonfigurować za pomocą zmiennych środowiskowych:
docker run -d \
--name weeb-cli-restful \
-p 9000:9000 \
-e RESTFUL_PORT=9000 \
-e RESTFUL_HOST=0.0.0.0 \
-e RESTFUL_PROVIDERS=animecix,hianime,aniworld \
-e RESTFUL_CORS=true \
-e RESTFUL_DEBUG=false \
weeb-cli-restful
Obsługa błędów¶
Wszystkie punkty końcowe zwracają spójne odpowiedzi błędów:
Typowe kody stanu HTTP:
- 200: Sukces
- 400: Złe żądanie (brakujące/nieprawidłowe parametry)
- 404: Zasób nie znaleziony
- 500: Wewnętrzny błąd serwera
Obsługa CORS¶
CORS jest domyślnie włączony, zezwalając na żądania z dowolnego źródła. Aby wyłączyć:
Lub za pomocą zmiennej środowiskowej:
Przykładowe użycie¶
cURL¶
# Wyszukaj anime
curl "http://localhost:8080/api/search?q=naruto&provider=animecix"
# Pobierz odcinki
curl "http://localhost:8080/api/anime/12345/episodes?season=1"
# Pobierz strumienie
curl "http://localhost:8080/api/anime/12345/episodes/ep-1/streams?sort=desc"
Python¶
import requests
# Wyszukaj anime
response = requests.get(
"http://localhost:8080/api/search",
params={"q": "naruto", "provider": "animecix"}
)
results = response.json()
# Pobierz strumienie
response = requests.get(
f"http://localhost:8080/api/anime/{anime_id}/episodes/{episode_id}/streams",
params={"provider": "animecix", "sort": "desc"}
)
streams = response.json()
JavaScript¶
// Wyszukaj anime
const response = await fetch(
'http://localhost:8080/api/search?q=naruto&provider=animecix'
);
const data = await response.json();
// Pobierz strumienie
const streamResponse = await fetch(
`http://localhost:8080/api/anime/${animeId}/episodes/${episodeId}/streams?sort=desc`
);
const streams = await streamResponse.json();
Wdrożenie produkcyjne¶
Reverse Proxy (Nginx)¶
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Usługa Systemd¶
Utwórz /etc/systemd/system/weeb-cli-restful.service:
[Unit]
Description=Weeb CLI RESTful API
After=network.target
[Service]
Type=simple
User=weeb
WorkingDirectory=/opt/weeb-cli
Environment="RESTFUL_PORT=8080"
Environment="RESTFUL_PROVIDERS=animecix,hianime"
ExecStart=/usr/local/bin/weeb-cli serve restful
Restart=always
[Install]
WantedBy=multi-user.target
Włącz i uruchom:
Kwestie bezpieczeństwa¶
-
Uwierzytelnianie: API nie zawiera wbudowanego uwierzytelniania. Użyj reverse proxy (Nginx, Traefik) z uwierzytelnianiem, jeśli udostępniasz publicznie.
-
Ograniczanie szybkości: Zaimplementuj ograniczanie szybkości na poziomie reverse proxy, aby zapobiec nadużyciom.
-
HTTPS: Zawsze używaj HTTPS w produkcji. Skonfiguruj SSL/TLS na poziomie reverse proxy.
-
Firewall: Ogranicz dostęp do zaufanych adresów IP, jeśli to możliwe.
Rozwiązywanie problemów¶
Port już w użyciu¶
Dostawca nie znaleziony¶
Upewnij się, że nazwa dostawcy jest poprawna:
# Wyświetl dostępnych dostawców
weeb-cli api providers
# Użyj poprawnej nazwy dostawcy
weeb-cli serve restful --providers animecix,hianime
Problemy z CORS¶
Jeśli występują problemy z CORS, upewnij się, że CORS jest włączony: