YoitsuWrap
Wrapper Python pour AnimeSamaApi — téléchargez des épisodes d'anime et des chapitres de scan en quelques lignes de code.
Sommaire
- Présentation
- Prérequis
- Installation
- Configuration
- Utilisation
- Structure du projet
- Référence des classes
- Roadmap
- Licence
Présentation
YoitsuWrap est un wrapper Python orienté objet qui simplifie l'interaction avec AnimeSamaApi. Il expose une API propre et intuitive pour :
- Rechercher un anime par son titre
- Télécharger des épisodes (VOSTFR, VF) via
yt-dlp - Télécharger des chapitres de scan (images)
- Paralléliser les téléchargements avec du multithreading
Prérequis
- Python 3.8+
- Une instance AnimeSamaApi lancée et accessible (par défaut sur
http://127.0.0.1:5000) yt-dlpinstallé (géré automatiquement via les dépendances)
Installation
Via pip (recommandé)
pip install YoitsuWrap
En mode développement
git clone https://github.com/TMCooper/YoitsuWrap.git
cd YoitsuWrap
pip install -e .
Configuration
Avant toute utilisation, créez un objet Config pointant vers votre instance AnimeSamaApi :
from YoitsuWrap.Config import Config
config = Config(
BASE_URL="http://127.0.0.1", # URL de l'API
PORT=5000, # Port de l'API
PATH=r"C:\Users\vous\Téléchargements" # Dossier de destination
)
Note : Si l'API est inaccessible, le programme affichera une erreur et s'arrêtera.
Les fichiers téléchargés seront organisés automatiquement dans le dossier PATH selon la structure suivante :
PATH/
└── Anime/
└── <Titre>/
├── <Saison>/
│ └── <Version>/
│ ├── 1.mp4
│ ├── 2.mp4
│ └── ...
└── Scans/
└── Chapitre 1/
├── page_1.jpg
├── page_2.jpg
└── ...
Utilisation
Recherche & téléchargement d'un anime
from YoitsuWrap.Config import Config
from YoitsuWrap.Anime import Anime
config = Config(BASE_URL="http://127.0.0.1", PORT=5000, PATH=r"C:\Téléchargements")
# Rechercher un anime (version VOSTFR par défaut)
frieren = Anime.search_by_name(title="Frieren", config=config)
# Télécharger tous les épisodes ET les scans disponibles
frieren.download_all()
# Télécharger uniquement les épisodes
frieren.download_anime()
# Télécharger uniquement les épisodes d'une saison précise
frieren.download_anime(season="1")
# Télécharger uniquement les scans
frieren.download_scan()
# Télécharger un chapitre de scan spécifique
frieren.download_scan(chapter=5)
Travailler avec les saisons
from YoitsuWrap.Season import Season
# Récupérer un objet Season directement
saison = Season.search_by_name(
title="Spice And Wolf",
saison="remake2024",
version="vostfr",
config=config
)
# Télécharger toute la saison (2 épisodes en parallèle)
saison.download_season(max_workers=2)
# Informations
print(saison.get_title()) # "Spice And Wolf"
print(saison.get_saison()) # "remake2024"
print(saison.get_episodes_numbers()) # Nombre d'épisodes
print(saison.get_version()) # "vostfr"
Travailler avec les épisodes
from YoitsuWrap.Episode import Episode
# Récupérer la liste des épisodes d'une saison
episodes = Episode.search_by_name(
title="Spice And Wolf",
saison="remake2024",
version="vostfr",
config=config
)
# Télécharger le premier épisode
episodes[0].download_episode()
# Informations sur un épisode
print(episodes[0].get_title()) # "Spice And Wolf"
print(episodes[0].get_episode_number()) # 1
print(episodes[0].get_season()) # "remake2024"
print(episodes[0].get_link()) # URL de l'épisode
Travailler avec les scans
from YoitsuWrap.Scan import Scan
# Récupérer un objet Scan
scan = Scan.search_by_name(manga_name="Frieren", config=config)
# Télécharger tous les chapitres (4 images en parallèle, 2 chapitres simultanés)
scan.download_scan(images_workers=4, max_workers=2)
# Télécharger un chapitre spécifique
scan.download_scan(chapter=33, images_workers=4)
# Informations
print(scan.get_number_of_chapters()) # Nombre total de chapitres
print(scan.get_number_of_pages()) # Nombre total de pages
Structure du projet
YoitsuWrap/
├── src/
│ └── YoitsuWrap/
│ ├── Config.py # Configuration de la connexion à l'API
│ ├── Anime.py # Classe principale — point d'entrée recommandé
│ ├── Season.py # Gestion des saisons d'un anime
│ ├── Episode.py # Gestion et téléchargement des épisodes
│ ├── Scan.py # Gestion des scans (manga)
│ └── Chapter.py # Gestion et téléchargement des chapitres
├── pyproject.toml
└── README.md
Référence des classes
Config
| Paramètre | Type | Description |
|---|---|---|
BASE_URL |
str |
URL de base de l'API (ex: http://127.0.0.1) |
PORT |
int |
Port de l'API (ex: 5000) |
PATH |
str |
Dossier racine pour les téléchargements |
Anime
| Méthode | Description |
|---|---|
Anime.search_by_name(title, config, version="vostfr") |
Recherche et construit l'objet anime |
download_anime(season=None, max_seasons_workers=1, max_workers=2) |
Télécharge les épisodes |
download_scan(chapter=None, images_workers=1, max_workers=2) |
Télécharge les scans |
download_all(max_seasons_workers=1, max_workers=2, chapter_workers=1) |
Télécharge tout (épisodes + scans) |
get_title() |
Retourne le titre |
get_cover() |
Retourne l'URL de la couverture |
get_link() |
Retourne le lien vers la page source |
get_season(season="1") |
Retourne un objet Season |
get_seasons() |
Retourne toutes les saisons |
get_scan() |
Retourne l'objet Scan |
Season
| Méthode | Description |
|---|---|
Season.search_by_name(title, saison, version, config) |
Construit l'objet saison |
download_season(max_workers=1) |
Télécharge toute la saison |
get_episodes() |
Retourne la liste des objets Episode |
get_episodes_numbers() |
Retourne le nombre d'épisodes |
get_saison() |
Retourne le nom de la saison |
get_version() |
Retourne la version (ex: vostfr) |
Episode
| Méthode | Description |
|---|---|
Episode.search_by_name(title, saison, version, config) |
Retourne la liste des épisodes |
download_episode() |
Télécharge l'épisode |
get_episode_number() |
Retourne le numéro de l'épisode |
get_link() |
Retourne l'URL de l'épisode |
get_season() |
Retourne la saison associée |
get_version() |
Retourne la version |
Scan
| Méthode | Description |
|---|---|
Scan.search_by_name(manga_name, config) |
Construit l'objet scan |
download_scan(chapter=None, images_workers=1, max_workers=1) |
Télécharge le(s) chapitre(s) |
get_chapters(chapter=None) |
Retourne un ou tous les chapitres |
get_number_of_chapters() |
Retourne le nombre de chapitres |
get_number_of_pages() |
Retourne le nombre total de pages |
Chapter
| Méthode | Description |
|---|---|
Chapter.search_by_name(manga_title, config) |
Retourne un dict de tous les chapitres |
download_chapter(max_workers=1) |
Télécharge toutes les pages du chapitre |
get_chapter_name() |
Retourne le nom du chapitre (ex: "Chapitre 1") |
get_number_of_pages() |
Retourne le nombre de pages |
get_page_link() |
Retourne la liste des URLs des pages |
Licence
Ce projet est distribué sous licence GPL-3.0-or-later. Voir le fichier LICENSE pour plus de détails.
Se repo est fait et maintenue par TMCooper
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yoitsuwrap-0.1.4.tar.gz.
File metadata
- Download URL: yoitsuwrap-0.1.4.tar.gz
- Upload date:
- Size: 25.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91a9409d4db1a21a09b8b8e1d7dd607bc073a43e550749fd06ab9a4b01e5a74b
|
|
| MD5 |
6464c5f233486bee767296357b20e0a6
|
|
| BLAKE2b-256 |
b487e8674288754d9166207b253f77763e1074437d933925d64634dc52a8603a
|
File details
Details for the file yoitsuwrap-0.1.4-py3-none-any.whl.
File metadata
- Download URL: yoitsuwrap-0.1.4-py3-none-any.whl
- Upload date:
- Size: 27.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69189ba8b769bd6ae6fb7940802e91628797474933963de6b182a938b7717b9c
|
|
| MD5 |
54b5b25314e6054abbb77ec0c1f38507
|
|
| BLAKE2b-256 |
e828d61d30d040876c87400a9b095b4edf075d5b9521a49bfa458af13992d83d
|