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

Shell et commandes GNU Discussion :

Youtube-dl dans un script bash ne retourne une erreur


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 194
    Points : 45
    Points
    45
    Par défaut Youtube-dl dans un script bash ne retourne une erreur
    Bonjour, j'espère être au bon endroit.

    Je dev un petit script bash dont le but c'est d'utiliser youtube-dl:
    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
    #!/bin/bash
    for db in ./urls/*.txt
    	do
    		echo fichier $db
    		echo ""
     
    		titre=$(cat $db | jq '.titre')
    		url=$(cat $db | jq .url)
    		echo "titre:"
    		echo $titre
    		echo "url:"
    		echo $url
     
    		youtube-dl -4 -x --audio-format mp3 $url
    done
    Bon, c'est basique pour le moment, le but c'est que quand j'appelle le script qu'il boucle sur chaque fichier qui contient un json de se genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"auteur":"Moi","titre":"(71) Guns N' Roses - Sweet Child O' Mine - YouTube","url":"https:\/\/www.youtube.com\/watch?v=1w7OgIMMRc4"}
    On peut voir avec les echo qu'il affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    titre:
    "(71) Guns N' Roses - Sweet Child O' Mine - YouTube"
    url:
    "https://www.youtube.com/watch?v=1w7OgIMMRc4"
    Pourtant quand je le lance avec la commande youtube-dl j'ai le droit a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WARNING: Assuming --restrict-filenames since file system encoding cannot encode all characters. Set the LC_ALL environment variable to fix this.
    WARNING: The url doesn't specify the protocol, trying with http
    [generic] watch?v=1w7OgIMMRc4": Requesting header
    WARNING: Could not send HEAD request to http://"https://www.youtube.com/watch?v=1w7OgIMMRc4": <urlopen error [Errno -2] Name or service not known>
    [generic] watch?v=1w7OgIMMRc4": Downloading webpage
    ERROR: Unable to download webpage: <urlopen error [Errno -2] Name or service not known> (caused by URLError(gaierror(-2, 'Name or service not known'),))
    On peut voir qu'il rajoute un http:// avant l'url qui est dans des guillemets. Ce qui est étrange c'est que quand je mets la commande a la main cela fonctionne. Quelqu'un sait il pourquoi pour résoudre mon problème ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,

    c'est les guillemets retournés par jq, ils font parties intégrantes de la chaîne, et ne sont pas considérés par le shell comme une protection.
    utilise l'option --raw de jq, et ajoute des guillemets pour le shell autour des variables.
    il faut TOUJOURS mettre des guillemets autour des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for db in ./urls/*.txt
    do
        titre=$(jq -r '.titre' "$db")
        url=$(jq -r '.url' "$db")
     
        printf 'fichier: %s\n\ntitre: %s\nurl: %s\n' "$db" "$titre" "$url"
     
        youtube-dl -4 -x --audio-format mp3 "$url"
    done
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mapfile -t ref < <(jq -r '.url,.title' "$db")
    printf 'url: %s\ntitre: %s\n' "${ref[@]}"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    KISS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jq --raw-output --slurp '.[].url' ./urls/*.txt | youtube-dl -4 -x --audio-format mp3 --batch-file=-
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Son dans un script bash
    Par clodette0071 dans le forum Linux
    Réponses: 2
    Dernier message: 09/07/2008, 12h27
  2. affichage de printf dans un script bash
    Par kass28 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 19/03/2008, 21h36
  3. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  4. exit dans un script bash
    Par yann_m dans le forum Linux
    Réponses: 2
    Dernier message: 08/11/2007, 23h37
  5. [Débutant]Intégrer du perl dans un script bash
    Par kromartien dans le forum Langage
    Réponses: 3
    Dernier message: 05/03/2007, 23h23

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