Personnalisation avancée de get_iplayer : Techniques d'extension pour développeurs

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_iplayer est un script Perl qui contient la logique centrale.
  • Documentation : README.md offre des directives d'utilisation, tandis que CHANGELOG.md suit 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 :

  1. Classe Programme : Gère les données des programmes, y compris les métadonnées et le téléchargement. Les sous-classes Programme::television et Programme::radio gèrent respectivement les contenus TV et radio.
package Programme::television;
use parent 'Programme::bbciplayer';
# Propriétés et méthodes pour les émissions TV

  1. Classe Streamer : Responsable du téléchargement des flux, avec support pour des protocoles tels que HLS et DASH.
  2. Classe PVR : Offre des fonctionnalités d'enregistrement programmé.
  3. 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 :

  1. Forker le dépôt du projet.
  2. Créer une branche et y committer les changements.
  3. Soumettre une Pull Request pour intégration.

Étiquettes: get_iplayer Perl BBC iPlayer HLS DASH

Publié le 13 août à 15h12