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 :
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 ).
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...
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
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 ^^'
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
Je ne comprends pas, lors de mon post, le code s'affichait comme celui du PO...
Bug du forum ??
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.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique