Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question Curl

    12 janvier 2018 à 18:27:54

    Bonjour, j'espère de pas me tromper de section pour ma question. 
    Voila mon problème. Ayant réussi à récupérer le texte compris entre deux mots " clefs " dans la page site en fonction de la date ( le site possédant une page par jour ) que je vise, je cherche maintenant à récupérer une image afin de la télécharger.
    Je n'ai cependant pas l'idée de comment faire.
    Voici le code que j'ai utilisé pour récupérer le texte :

    for day_of_year in {0..365}; do
        date=$(LANG=fr_FR.UTF-8 date --date "$(date +%Y)-01-01 + $day_of_year days" +%Y-%m-%d)
        ressources=$(curl --silent http://www.krosmoz.com/fr/almanax/$date | pcregrep --only-matching=1 "Récupérer (.+) et rapporter l'offrande à Théodoran Ax")
        LANG=fr_FR.UTF-8 date --date $date +"%d %B ×$ressources"
    done
    

    J'ai réussi a télécharger l'image du site de ce jour à l'aide la commande :

    curl -O http://staticns.ankama.com/dofus/www/game/items/200/39028.png

    Le problème étant que je dois trouver le lien de cette image parmi les balises du site afin de faire une boucle et de récupérer l'image variant sur les différentes pages ( toujours positionnée au même endroit ).

    J'espère avoir étais clair sur mon problème.

    Merci d'avance :)




    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2018 à 19:13:43

      salut,

      je ne suis pas certain d'avoir tout compris.

      dans chaque page, tu dois récupérer deux informations :
      - la description de l'objet à rapporter
      - le lien de l'image

      pour faire "simple", le code de la page en cours de traitement pourrait être stocké dans une variable, et tu pourrais filtrer avec deux grep cette variable pour mettre dans deux variables différentes chacune de ces informations...

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        12 janvier 2018 à 19:16:59

        Voila, je dois récupérer le nom de l'objet dans une variable ( déjà fait ). Et maintenant je dois récupérer l'image.

        Je dois donc récuperer l'ensemble de l'HTML dans une variable et ne sélectionner le lien de l'image avec grep ?

        Comment m'y prendre pour le coup le site ne possède pas qu'une seul image sur la page. Dois je utiliser une syntaxe particulière pour viser l'image ?

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          12 janvier 2018 à 19:29:58

          il semble que le chemin de l'image soit unique dans la page.

          est-ce toujours le même ?

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            12 janvier 2018 à 19:33:03

            Non, le chemin de l'image varie en fonction de la page. C'est le problème auquel je suis face.

            https://stackoverflow.com/questions/3742983/how-to-get-the-contents-of-a-webpage-in-a-shell-variable

            J'ai trouvé ce post pour récuperer le code de la page dans une variable et ensuite fouiller dedans pour trouver le lien. Mais il semble que la page ne se retourne pas correctement dans la variable ^^'

            • Partager sur Facebook
            • Partager sur Twitter
              12 janvier 2018 à 20:04:41

              il semble que la page ne se retourne pas correctement dans la variable

              les passages à la ligne disparaîtraient-ils, par hasard ?

              je parle bien du chemin uniquement, pas du nom de l'image précédé de son chemin.

              quand tu lis le code de la page, comment, toi, identifies-tu l'image ?

              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                12 janvier 2018 à 20:25:56

                Disons que pour le moment le fichier obtenu est vide donc il ne me retourne rien pour être plus précis ^^'

                Je vais pencher dessus ce soir et vous tenir au courant si je trouve une solution 

                Merci

                • Partager sur Facebook
                • Partager sur Twitter
                  12 janvier 2018 à 23:12:23

                  mais quel fichier ?

                  il semble que la page ne se retourne pas correctement dans la variable

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    13 janvier 2018 à 22:31:42

                    Bonsoir,

                    En prenant pour principe que la page html a été enregistrée dans un fichier nommé html.txt, ce dernier ce trouvant à l'emplacement exécuté par le script :

                    # CAS 1 : télécharger l'image correspondant au jeu DOFUS:
                    cat html.txt | sed -n 's/^ *<img src="\(.*dofus\/www\/game\/.*\)"\/>.*$/\1/p'
                    http://staticns.ankama.com/dofus/www/game/items/200/53646.w75h75.png
                    # CAS 2 : télécharger l'image correspondant au jeu DOFUS Touch :
                    cat html.txt | sed -n 's/^ *<img src="\(.*dofus-touch\/www\/game\/.*\)"\/>.*$/\1/p'
                    http://staticns.ankama.com/dofus-touch/www/game/items/200/53646.w75h75.png
                    # CAS 3 : récupérer l'image de DOFUS ET l'image de DOFUS-TOUCH en même temps
                    cat html.txt | sed -n 's/^ *<img src="\(.*dofus.*\/www\/game\/.*\)"\/>.*$/\1/p' # renvoie les 2 liens sur 2 lignes
                    http://staticns.ankama.com/dofus/www/game/items/200/53646.w75h75.png
                    http://staticns.ankama.com/dofus-touch/www/game/items/200/53646.w75h75.png



                     Explication :

                    sed (a Stream EDitor) est comme son nom l'indique un éditeur de flux qui travaille sur des chaines de caractères, qu'elles proviennent d'un pipe ou d'un fichier.

                    Entre autres possibilités, sed est très connu comme alternative à awk afin de repérer et transformer/substituer des chaines de caractères à l'aide de regex (expressions régulières) à la norme POSIX.

                    sed -n 's/^ *<img src="\(.*dofus\/www\/game\/.*\)"\/>.*$/\1/p'

                    sed -> appel à la commande sed

                    -n -> mode silencieux. N'affiche pas l'ensemble des lignes non modifiées

                    's/bla/blah/p' -> remplace bla par blah et affiche la ligne obtenue (p = print)

                    dans le cas présent, les parenthèses servent à isoler précisément l'URL de l'image et de l'enregistrer en tant que variable interne à sed. On y accède via son indice (ici \1 car c'est la seule paire de parenthèses). Par exemple :

                     echo "Attention, voici Robert Mitchum" | sed -n 's/^\(At\)tention, voici Robert Mit\(ch\)\(um\)$/\1\2o\3/p'
                    Atchoum

                    On a défini 3 variables \1 = "At" ; \2 = "ch" ; \3 = "um", et on y a intercalé un o

                    ^ signifie début de ligne

                    $ signifie fin de ligne

                    \ caractère d'échappement

                    . n'importe quel caractère

                    .* 0 - x caractères

                    ?* 1 - x caractères

                    \. un point

                    \/ un slash

                    \\ un antislash

                    etc...

                    Pour un cours approfondi sur sed sur le site de la fondation GNU

                    Je te laisse le soin d'intégrer ça à ton code.

                    PS : on voit ici qu'on se passe aisément d'un grep

                    -
                    Edité par ezechiel203 14 janvier 2018 à 0:27:44

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 janvier 2018 à 23:02:50

                      la balise code a avalé les parenthèses nécessaires à la "mémorisation" des références arrières ?

                      :(

                      -
                      Edité par dantonq 13 janvier 2018 à 23:03:09

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                        14 janvier 2018 à 0:28:48

                        résolu ?

                        Je ne comprends pas, lors de mon post, le code s'affichait comme celui du PO...

                        Bug du forum ??

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Question Curl

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown