Introduction
get_iplayer est un utilitaire permettant de télécharger des émissions depuis BBC iPlayer et BBC Sounds. Ce guide explore les méthodes pour étendre ses capacités et développer des modules sur mesure.
Architecture du projet et composants essentiels
Une compréhension de la structure du projet est primordiale avant toute extension. Les éléments clés sont :
- Script principal :
get_iplayerest un script Perl qui contient la logique centrale. - Documentation :
README.mdoffre des directives d'utilisation, tandis queCHANGELOG.mdsuit l'historique des versions. - Gestion de la configuration : Le comportement est dicté par des paramètres en ligne de commande et des fichiers de configuration.
Classes fondamentales
L'application utilice une conception orientée objet avec des classes principales :
- Classe Programme : Gère les données des programmes, y compris les métadonnées et le téléchargement. Les sous-classes
Programme::televisionetProgramme::radiogèrent respectivement les contenus TV et radio.
package Programme::television;
use parent 'Programme::bbciplayer';
# Propriétés et méthodes pour les émissions TV
- Classe Streamer : Responsable du téléchargement des flux, avec support pour des protocoles tels que HLS et DASH.
- Classe PVR : Offre des fonctionnalités d'enregistrement programmé.
- Classe Tagger : Traite les métadonnées des fichiers, utilisant des outils comme AtomicParsley.
Méthodes pour étendre les fonctionnalités
1. Ajouter des options en ligne de commande
Les options sont définies dans le hash opt_format. Pour intégrer une option telle que --user-defined, il faut étendre la méthode correspondante :
sub define_custom_options {
my %opt_defs = (
userdefined => [ 1, "user-defined=s", 'Custom', '--user-defined <val>', "Description de l'option utilisateur" ],
);
return \%opt_defs;
}
</val>
2. Étendre l'indexation et la recherche de programmes
Modifier la méthode get_links permet d'ajouter de nouveaux canaux ou d'ajuster la logique d'indexation. Par exemple, dans la classe Programme::television :
sub channel_listing {
return {
'national' => {
'new_channel' => 'Nouvelle Chaîne',
},
};
}
3. Personnaliser la logique de téléchargement
Pour altérer le comprotement de téléchargement, redéfinir la méthode download ou étendre la classe Streamer. Ajouter le support pour un nouveau protocole :
package Streamer::custom_protocol;
use base 'Streamer';
sub fetch_stream {
my ($self, $ua, $url, $prog, $version, %stream_info) = @_;
# Implémentation pour le protocole personnalisé
}
Développement de modules personnalisés
1. Création d'un nouveau fichier de module
Créer un fichier Perl, comme Streamer::custom_protocol.pm, qui implémente la nouvelle logique de téléchargement. Asssurez-vous que le module hérite de Streamer et implémente les méthodes nécessaires.
2. Intégration du module
Dans le programme principal, importer le module et l'utiliser aux endroits appropriés. Par exemple, dans la fonction get_stream_data :
if ($stream_data{protocol} eq 'custom_protocol') {
$streamer = Streamer::custom_protocol->new();
}
3. Tests et débogage
Utiliser les options --verbose et --debug pour valider les modifications :
get_iplayer --debug --get <programme_id>
</programme_id>
Configuration et préférences
Les utilisateurs peuvent personnaliser le comportement via le fichier ~/.get_iplayer/options. Les développeurs peuvent aussi ajuster les valeurs par défaut dans le code :
sub default_locale_encoding {
return 'UTF-8';
}
Extensions avancées avec des outils externes
get_iplayer peut intégrer des outils tels que ffmpeg pour la conversion de formats et AtomicParsley pour les métadonnées. Pour ajouter un champ de métadonnées personnalisé, étendre la classe Tagger :
sub generate_custom_tags {
my ($self, $meta) = @_;
my $tags = $self->SUPER::generate_custom_tags($meta);
$tags->{custom_metadata} = $meta->{extra_data};
return $tags;
}
Contribution au projet
Pour partager des extensions utiles, vous pouvez contribuer via GitHub :
- Forker le dépôt du projet.
- Créer une branche et y committer les changements.
- Soumettre une Pull Request pour intégration.