Partage

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 :)




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...

un problème clairement exposé est à moitié résolu.
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

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 ?

un problème clairement exposé est à moitié résolu.
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 ^^'

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 ?

un problème clairement exposé est à moitié résolu.
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

12 janvier 2018 à 23:12:23

mais quel fichier ?

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

un problème clairement exposé est à moitié résolu.
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 eze203 14 janvier 2018 à 0:27:44

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

un problème clairement exposé est à moitié résolu.
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 ??

Question Curl

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown