diff --git a/README.md b/README.md index 4cef53b..d1e8f04 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,57 @@ # Ohm Stream Downloader -Web application pour télécharger des fichiers depuis divers hébergeurs (1fichier, Doodstream, Rapidfile, etc.). +**Application web complète pour télécharger des animes et fichiers depuis divers hébergeurs.** -## Fonctionnalités +Interface moderne avec recherche d'anime, métadonnées enrichies, téléchargements parallèles et streaming vidéo. -- **Multi-hébergeurs** : Support pour 1fichier, Doodstream, Rapidfile et plus +## ✨ Fonctionnalités + +### 🎬 Recherche et Téléchargement d'Animes +- **Recherche unifiée** : Recherchez sur 4 providers simultanément (Anime-Sama, Neko-Sama, Anime-Ultime, Vostfree) +- **Métadonnées riches** : Synopsis, genres, notes, année de sortie, studio, nombre d'épisodes, statut +- **Téléchargement par épisode** : Sélectionnez et téléchargez des épisodes individuels +- **Téléchargement de saison complète** : Téléchargez tous les épisodes d'un coup +- **Streaming vidéo** : Regardez vos animes directement dans le navigateur +- **Recherche floue** : Gestion des fautes de frappe et variations de noms + +### 📁 Hébergeurs de Fichiers Supportés +- **1fichier** (1fichier.com, 1fichier.fr) +- **Uptobox** (uptobox.com, uptobox.fr) +- **Doodstream** (doodstream.com, dood.to, dood.lol, etc.) +- **Rapidfile** (rapidfile.net, rapidfile.com) + +### 🎥 Hébergeurs Vidéo Supportés +- **VidMoly** (vidmoly.to, vidmoly.com) +- **SendVid** (sendvid.com) + +### 🚀 Gestion des Téléchargements - **Téléchargements parallèles** : Jusqu'à 3 téléchargements simultanés -- **Pause/Reprise** : Mettez en pause et reprenez vos téléchargements -- **Interface web moderne** : Interface intuitive avec progression en temps réel -- **API REST** : Intégration facile avec d'autres applications +- **Pause/Reprise** : Contrôle total sur vos téléchargements +- **Progression en temps réel** : Vitesse, progression, taille +- **Reprise automatique** : Support des HTTP Range pour reprendre les téléchargements interrompus -## Installation +### 🌐 Interface Web +- **Design moderne** : Interface sombre avec gradients et animations +- **Responsive** : Fonctionne sur desktop et mobile +- **Mise à jour automatique** : Rafraîchissement chaque seconde +- **Métadonnées visuelles** : Affichage des informations anime avec icônes + +### 🔌 API REST +- **Endpoints REST** : Intégration facile avec d'autres applications +- **Documentation automatique** : Swagger UI disponible + +## 📋 Configuration Requise + +- Python 3.8+ +- pip + +## 🚀 Installation ```bash +# Cloner le repository +git clone https://github.com/votre-user/Ohm_streaming.git +cd Ohm_streaming + # Créer l'environnement virtuel python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate @@ -20,48 +59,35 @@ source venv/bin/activate # Windows: venv\Scripts\activate # Installer les dépendances pip install -r requirements.txt -# Lancer le serveur -uvicorn main:app --reload --host 0.0.0.0 --port 8000 +# Lancer le serveur de développement +uvicorn main:app --reload --host 0.0.0.0 --port 3000 ``` -## Utilisation +Accédez à l'interface : http://localhost:3000/web + +## 📖 Utilisation ### Interface Web -Ouvrez votre navigateur sur : http://localhost:8000/web +1. **Onglet Recherche d'Anime** : + - Entrez le nom d'un anime (ex: "Naruto", "One Piece") + - Sélectionnez la langue (VOSTFR ou VF) + - Cochez "Inclure les métadonnées" pour plus d'informations + - Cliquez sur "Rechercher" + - Sélectionnez un épisode et cliquez sur "Télécharger" + - Ou utilisez "Toute la saison" pour tout télécharger -Collez simplement un lien de téléchargement et cliquez sur "Télécharger". +2. **Onglet Lien Direct** : + - Collez un lien de téléchargement direct + - Cliquez sur "Télécharger" -### API +3. **Onglet Providers** : + - Utilisez les onglets spécifiques à chaque provider + - Chaque onglet a ses propres options de recherche -**Créer un téléchargement :** -```bash -curl -X POST http://localhost:8000/api/download \ - -H "Content-Type: application/json" \ - -d '{"url": "https://1fichier.com/?xxxxx"}' -``` +### API Endpoints -**Lister les téléchargements :** -```bash -curl http://localhost:8000/api/downloads -``` - -**Mettre en pause :** -```bash -curl -X POST http://localhost:8000/api/download/{task_id}/pause -``` - -**Reprendre :** -```bash -curl -X POST http://localhost:8000/api/download/{task_id}/resume -``` - -**Annuler :** -```bash -curl -X DELETE http://localhost:8000/api/download/{task_id} -``` - -## API Endpoints +#### Téléchargements | Méthode | Endpoint | Description | |---------|----------|-------------| @@ -72,35 +98,236 @@ curl -X DELETE http://localhost:8000/api/download/{task_id} | POST | `/api/download/{task_id}/resume` | Reprendre | | DELETE | `/api/download/{task_id}` | Annuler/Supprimer | | GET | `/api/download/{task_id}/file` | Télécharger le fichier terminé | + +#### Anime + +| Méthode | Endpoint | Description | +|---------|----------|-------------| +| GET | `/api/anime/search` | Rechercher un anime (paramètres: `q`, `lang`, `include_metadata`) | +| GET | `/api/anime/metadata` | Obtenir les métadonnées d'un anime (paramètre: `url`) | +| GET | `/api/anime/episodes` | Liste des épisodes d'un anime (paramètres: `url`, `lang`) | +| POST | `/api/anime/download` | Télécharger un épisode | +| POST | `/api/anime/download-season` | Télécharger toute une saison | + +#### Streaming Vidéo + +| Méthode | Endpoint | Description | +|---------|----------|-------------| +| GET | `/video/{task_id}` | Stream une vidéo (support Range/seeking) | +| GET | `/stream/{filename}` | Stream par nom de fichier | +| GET | `/player/{task_id}` | Lecteur vidéo pour un téléchargement | +| GET | `/watch/{filename}` | Lecteur vidéo par nom de fichier | + +#### Système + +| Méthode | Endpoint | Description | +|---------|----------|-------------| +| GET | `/` | Informations sur l'API | +| GET | `/api/providers` | Liste des providers supportés | +| GET | `/health` | Vérifier l'état du serveur | | GET | `/web` | Interface web | -## Structure du Projet +### Exemples API + +**Rechercher un anime avec métadonnées :** +```bash +curl "http://localhost:3000/api/anime/search?q=naruto&lang=vostfr&include_metadata=true" +``` + +**Obtenir les épisodes d'un anime :** +```bash +curl "http://localhost:3000/api/anime/episodes?url=https://anime-sama.si/catalogue/naruto/saison1/vostfr/&lang=vostfr" +``` + +**Télécharger une saison complète :** +```bash +curl -X POST "http://localhost:3000/api/anime/download-season?url=https://anime-sama.si/catalogue/naruto/saison1/vostfr/&lang=vostfr" +``` + +**Créer un téléchargement direct :** +```bash +curl -X POST http://localhost:3000/api/download \ + -H "Content-Type: application/json" \ + -d '{"url": "https://1fichier.com/?xxxxx"}' +``` + +## 🏗️ Structure du Projet ``` Ohm_streaming/ -├── main.py # Application FastAPI +├── main.py # Application FastAPI & endpoints API ├── app/ -│ ├── models/ # Modèles de données -│ ├── downloaders/ # Extracteurs de liens par hébergeur -│ └── download_manager.py # Gestionnaire de téléchargements -├── downloads/ # Fichiers téléchargés +│ ├── models/ # Modèles Pydantic +│ │ └── __init__.py # DownloadTask, AnimeMetadata, etc. +│ ├── downloaders/ # Downloaders par provider +│ │ ├── base.py # Classe BaseDownloader +│ │ ├── animesama.py # Anime-Sama (avec métadonnées) +│ │ ├── animeultime.py # Anime-Ultime (avec métadonnées) +│ │ ├── nekosama.py # Neko-Sama (avec métadonnées) +│ │ ├── vostfree.py # Vostfree (avec métadonnées) +│ │ ├── unfichier.py # 1fichier +│ │ ├── uptobox.py # Uptobox +│ │ ├── doodstream.py # Doodstream +│ │ ├── rapidfile.py # Rapidfile +│ │ ├── vidmoly.py # VidMoly +│ │ ├── sendvid.py # SendVid +│ │ └── __init__.py # Registry des downloaders +│ ├── providers.py # Configuration des providers +│ └── download_manager.py # Gestionnaire de file d'attente +├── downloads/ # Fichiers téléchargés ├── templates/ -│ └── index.html # Interface web -└── static/ # Fichiers statiques +│ ├── index.html # Interface web principale +│ └── player.html # Lecteur vidéo +├── static/ # Fichiers statiques (CSS, JS, images) +└── requirements.txt # Dépendances Python ``` -## Ajouter un Hébergeur +## ⚙️ Configuration -Pour ajouter le support d'un nouvel hébergeur : +Modifiez ces paramètres dans `main.py` : -1. Créez un fichier dans `app/downloaders/` (ex: `myhost.py`) -2. Héritez de `BaseDownloader` -3. Implémentez `can_handle(url)` et `get_download_link(url)` -4. Ajoutez le downloader dans `app/downloaders/__init__.py` +```python +download_manager = DownloadManager( + download_dir="downloads", # Répertoire de stockage + max_parallel=3 # Téléchargements simultanés +) +``` -## Configuration +## 🔧 Ajouter un Provider -- `max_parallel` : Nombre maximum de téléchargements simultanés (défaut: 3) -- `download_dir` : Répertoire de stockage (défaut: "downloads") +### Ajouter un Hébergeur de Fichiers -Modifiez ces paramètres dans `main.py`. +1. Créez `app/downloaders/myhost.py` : +```python +from .base import BaseDownloader +from bs4 import BeautifulSoup + +class MyHostDownloader(BaseDownloader): + def can_handle(self, url: str) -> bool: + return "myhost.com" in url.lower() + + async def get_download_link(self, url: str) -> tuple[str, str]: + # Extraire le lien de téléchargement direct + response = await self.client.get(url) + soup = BeautifulSoup(response.text, 'lxml') + # ... logique d'extraction ... + return download_url, filename +``` + +2. Ajoutez-le dans `app/providers.py` : +```python +FILE_HOSTS = { + # ... + "myhost": { + "name": "MyHost", + "domains": ["myhost.com"], + "icon": "📁", + "color": "#4ecdc4" + } +} +``` + +### Ajouter un Provider Anime avec Métadonnées + +1. Créez le downloader avec les méthodes requises : +```python +class MyAnimeDownloader(BaseDownloader): + async def search_anime(self, query: str, lang: str = "vostfr", include_metadata: bool = False): + # Implémenter la recherche + + async def get_anime_metadata(self, anime_url: str) -> dict: + # Extraire: synopsis, genres, rating, release_year, studio, etc. + return { + 'synopsis': '...', + 'genres': ['Action', 'Aventure'], + 'rating': '8.5/10', + 'release_year': 2023, + 'studio': 'Studio Name', + # ... + } + + async def get_episodes(self, anime_url: str, lang: str = "vostfr"): + # Retourner la liste des épisodes +``` + +2. Enregistrez-le dans `app/providers.py` et `main.py` + +## 🗺️ Roadmap / Plans Futurs + +### Version 2.2 - Améliorations des Métadonnées +- [ ] **Affichage des posters** : Afficher les images de couverture dans les résultats de recherche +- [ ] **Filtrage avancé** : Filtrer par genre, année, studio, statut +- [ ] **Tri des résultats** : Par popularité, date, note +- [ ] **Favoris** : Sauvegarder les animes favoris +- [ ] **Historique** : Voir les animes récemment consultés + +### Version 2.3 - Gestion de Bibliothèque +- [ ] **Bibliothèque personnelle** : Gérer sa collection d'anime téléchargés +- [ ] **Statistiques** : Temps de visionnage, espace disque utilisé +- [ ] **Listes de lecture** : Créer des playlists personnalisées +- [ ] **Marquage** : Marquer les épisodes comme vus/non vus +- [ ] **Notes personnelles** : Noter les animes et laisser des commentaires + +### Version 2.4 - Qualité et Formats +- [ ] **Sélection de qualité** : Choisir entre 1080p, 720p, 480p +- [ ] **Conversion automatique** : Convertir en différents formats +- [ ] **Compression** : Réduire la taille des fichiers +- [ ] **Extraction de sous-titres** : Télécharger les subs automatiquement +- [ ] **Multi-audio** : Gérer les versions VF/VOSTFR + +### Version 2.5 - Fonctionnalités Sociales +- [ ] **Partage de listes** : Partager ses playlists avec amis +- [ ] **Recommandations** : Suggestions basées sur l'historique +- [ ] **Notes et avis** : Système de commentaires +- [ ] **Intégration Discord/Telegram** : Notifications de nouveaux épisodes + +### Version 2.6 - Mobile et Applications +- [ ] **Application mobile** : App native iOS/Android +- [ ] **PWA** : Progressive Web App pour offline +- [ ] **Cast** : Chromecast/AirPlay support +- [ ] **Download sur mobile** : Interface optimée mobile + +### Version 3.0 - Fonctionnalités Avancées +- [ ] **Sauvegarde cloud** : Sync avec Google Drive/Dropbox +- [ ] **Streaming distant** : Regarder partout +- [ ] **Multi-utilisateurs** : Profils et permissions +- [ ] **API publique** : API pour développeurs tiers +- [ ] **Plugins** : Système d'extensions + +### Améliorations Continues +- [ ] **Performance** : Optimisation du chargement et de l'interface +- [ ] **Accessibilité** : Support lecteur d'écran, clavier +- [ ] **Tests automatisés** : Suite de tests E2E +- [ ] **Documentation** : Guides d'utilisation et API +- [ ] **Internationalisation** : Support multilingue complet + +## 🤝 Contribution + +Les contributions sont les bienvenues ! + +1. Fork le projet +2. Créez une branche (`git checkout -b feature/AmazingFeature`) +3. Commit (`git commit -m 'Add some AmazingFeature'`) +4. Push (`git push origin feature/AmazingFeature`) +5. Ouvrez une Pull Request + +## 📝 Licence + +Ce projet est à usage éducatif uniquement. Respectez les droits d'auteur et les lois locales. + +## ⚠️ Avertissement + +Ce logiciel est destiné à un usage personnel et éducatif. Les utilisateurs sont responsables de vérifier qu'ils ont le droit de télécharger du contenu protégé par des droits d'auteur dans leur juridiction. + +## 📧 Support + +Pour les bugs et suggestions : +- Ouvrez une issue sur GitHub +- Discutez avec la communauté + +--- + +**Développé avec ❤️ pour la communauté anime** + +*Version actuelle : 2.1* +*Dernière mise à jour : Janvier 2026*