IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

Module YouTube Download


Sujet :

Modules Perl

  1. #1
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut Module YouTube Download
    Bonjour,
    Je tente d'utiliser le module WWW::YouTube::Download pour récupérer des vidéos.
    Je démarre avec l'exemple du cpan

    Je passe l'adresse avec "; ', ou rien :
    "https://www.youtube.com/watch?v=bMUuhwlBu3M"
    'https://www.youtube.com/watch?v=bMUuhwlBu3M'
    SANS " ni '

    J'ai toujours l'erreur :
    '"' expected, at character offset 1 (before "args:{raw_player_res...") at C:/Strawberry/perl/site/lib/WWW/YouTube/Download.pm line 298.
    L'utilisation du module semble pourtant rudimentaire !

    Avez-vous une idée ?
    Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use WWW::YouTube::Download;
     
     
    if (@ARGV) {
        my $client = WWW::YouTube::Download->new;
        my $video_id  = $client->video_id($ARGV[0]);
     
        #$client->download($video_id, { filename => '{title}.{suffix}' });
        $client->download($video_id);
     
    		my $video_url = $client->get_video_url($video_id);
    		my $title     = $client->get_title($video_id);     # maybe encoded utf8 string.
    		my $fmt       = $client->get_fmt($video_id);       # maybe highest quality.
    		my $suffix    = $client->get_suffix($video_id);    # maybe highest quality file suffix
     
    }

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je pense que ton code est hors de cause et qu'il s'agit probablement d'un bug, car même les exemples complets disponibles sur github renvoient le même message d'erreur à l'appel de la méthode download.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Merci pour ta réponse CosmoKnacki,
    En grattant un peu sur Internet j'ai vu qu'il y avait des problèmes de syntaxe JSON renvoyées par des decode
    Download.pm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sub _get_args {
        my ($self, $content) = @_;
    
        my $data;
        for my $line (split "\n", $content) {
            next unless $line;
            if ($line =~ /the uploader has not made this video available in your country/i) {
                croak 'Video not available in your country';
            }
            elsif ($line =~ /^.+ytplayer\.config\s*=\s*(\{.*})/) {
                ($data, undef) = JSON->new->utf8(1)->decode_prefix($1);
                last;
            }
        }
    
        croak 'failed to extract JSON data' unless $data->{args};
    
        return $data->{args};
    }
    Le module date un peu, il n'a probablement pas été mis à jour et je suis incapable de le modifier.

    J'ai trouvé Youtube-dl.exe pour faire les téléchargements.
    S'il n'y a pas moyen de contourner le pb, je ferai avec.

  4. #4
    Membre habitué
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Points : 148
    Points
    148
    Par défaut
    Bonjour.

    J'ai regardé ce problème:

    La fonction _get_content retourne le contenu de la page de la vidéo.

    la fonction _get_args sélectionne une sous-partie de la page (content) pour le parse en JSON. et c'est la que ça coince:

    j'ai pris une vidéo arbitraire et la sous-partie sélectionnée par _get_args pour le parse via JSON. Voici la sous-partie :

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    {args:{raw_player_response:ytInitialPlayerResponse}};var createPlayer=window.yt&&window.yt.player&&window.yt.player.Application&&(window.yt.player.Application.createAlternate||window.yt.player.Application.create);if(createPlayer){createPlayer("player-api",ytplayer.config,ytplayer.web_player_context_config);ytplayer.config.loaded=true}}}


    On peut remarquer que la fonction de décodage appelé ligne 298 de WWW::YouTube::Download est decode_prefix(). Ce qui demande explicitement de décoder du json qui serait en début de chaine.

    Or il semble que le JSON ne soit pas formaté correctement. Il manque des guillemets aux clefs de l'objet JSON. La fonction de décodage doit s'attendre à quelque chose de ce genre-là:

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    {"args":{"raw_player_response":"ytInitialPlayerResponse"}};var createPlayer=window.yt&&window.yt.player&&window.yt.player.Application&&(window.yt.player.Application.createAlternate||window.yt.player.Application.create);if(createPlayer){createPlayer("player-api",ytplayer.config,ytplayer.web_player_context_config);ytplayer.config.loaded=true}}}

  5. #5
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour et merci Puppet_Master d'avoir regardé mon pb.

    J'ai effectué tous les téléchargements dont j'avais besoin avec Youtube-dl.exe
    La DOC est très complète.
    Ce n'est pas aussi souple qu'un perl dédié, mais je me suis adapté aux possibilités offertes.

    Pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    rem BILL
    rem youtube-dl --write-description https://www.youtube.com/watch?v=bMUuhwlBu3M -f mp4
    rem youtube-dl --playlist-start 2 --playlist-end 5 https://www.youtube.com/playlist?list=UUrinRl-6Wh8o1Wt35Ww27cQ -f mp4
    rem youtube-dl -o "%%(upload_date)s - %%(title)s -%%(id)s.%%(ext)s" https://www.youtube.com/playlist?list=UUrinRl-6Wh8o1Wt35Ww27cQ -f mp4
    rem youtube-dl -o "%%(upload_date)s - %%(title)s -%%(id)s.%%(ext)s" --playlist-start 1 --playlist-end 1 https://www.youtube.com/playlist?list=UUrinRl-6Wh8o1Wt35Ww27cQ -f mp4
     
     
    rem PRÉCEPTEUR
    rem youtube-dl -o "%%(upload_date)s - %%(title)s-%%(id)s.%%(ext)s" https://www.youtube.com/playlist?list=UUvRgiAmogg7a_BgQ_Ftm6fA -f mp4
    rem youtube-dl -o "%%(upload_date)s - %%(title)s-%%(id)s.%%(ext)s" --playlist-start 80 --playlist-end 81 https://www.youtube.com/playlist?list=UUvRgiAmogg7a_BgQ_Ftm6fA -f mp4
    rem youtube-dl --write-description -o "%%(upload_date)s - %%(title)s-%%(id)s.%%(ext)s" --playlist-start 60 --playlist-end 81 https://www.youtube.com/playlist?list=UUvRgiAmogg7a_BgQ_Ftm6fA -f mp4
    rem youtube-dl -o "%%(upload_date)s - %%(title)s-%%(id)s.%%(ext)s" --playlist-start 1 --playlist-end 1 https://www.youtube.com/playlist?list=UUvRgiAmogg7a_BgQ_Ftm6fA -f mp4
    Je passe le sujet en résolu.
    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/05/2014, 13h23
  2. Firefox 4, Download manager et Youtube
    Par Glauben dans le forum Firefox
    Réponses: 1
    Dernier message: 23/04/2011, 15h19
  3. [Kylix] [Kylix] download
    Par jean christophe dans le forum EDI
    Réponses: 2
    Dernier message: 10/12/2002, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo