Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recuperer une image calculee par un autre site

3 réponses
Avatar
Hugolino
Bonjour,

Sur une de mes pages, j'affiche le graphe de la hauteur de la marée du
jour calculée à la volée par un script perl du site du SHOM (Service
Hydrographique et Océanographique de la Marine).

Pour faire ça, j'ai simplement regardé le code source de la page du
SHOM, et j'ai vu que l'image était affichée par un '<img src=' contenant
un lien vers un script perl auquel on passe simplement un lieu et une
date.
J'ai donc écrit un petit script PHP qui fabrique les arguments à passer
à ce script perl et j'ai mis ça dans un '<img src="" /> sur ma page.

Mais je veux éviter que chacune des visites de ma page occasionne une
requête vers le site du SHOM, car d'une part il est inutile de le faire
plus d'une fois par jour et d'autre part j'imagine que l'admin du site
du SHOM surveille ses logs, et je ne veux pas qu'il me blackliste.

En fait je voudrais n'effectuer qu'une requête par jour et stocker
l'image du graphe (un simple gif) sur mon disque dur pour l'afficher
sans solliciter le site du SHOM plus d'une fois par jour.

Mais je n'ai pas la moindre idée de comment faire ça. J'ai parcouru le
site fr.php.net et j'ai googlé, mais sans doute pas avec les bons mots
clés.

J'ai bien vu imagegif() qui permet d'enregistrer une image sur le
disque, et d'ailleurs j'utilise imagepng() sur ma page de stats pour
éviter d'avoir à regénérer constamment mes graphes, mais si je sais le
faire avec une image que je créé et dans laquelle je dessine, je ne vois
pas comment le faire avec une image dont je n'ai que l'URL.


Merci du coup de main.

--
Je ne veux plus jamais entendre parler de MFC42.DLL sauf pour
en dire le plus grand bien: c'est elle qui m'a ouvert les yeux sur
l'immense craditude des produits Microsoft.
Hugo (né il y a 1 384 466 138 secondes)

3 réponses

Avatar
Olivier Miakinen

[ lire une image gif créée à la volée sur un site, et la sauver chez soi ]

J'ai bien vu imagegif() qui permet d'enregistrer une image sur le
disque, et d'ailleurs j'utilise imagepng() sur ma page de stats pour
éviter d'avoir à regénérer constamment mes graphes, mais si je sais le
faire avec une image que je créé et dans laquelle je dessine, je ne vois
pas comment le faire avec une image dont je n'ai que l'URL.


Ça se fait en deux lignes :

$im = imagecreatefromgif($url);
imagegif($im, $filename);

Voire en une seule :

imagegif(imagecreatefromgif($url), $filename);

Note que tu n'as pas besoin de passer par une image en interne :

file_put_contents($filename, file_get_contents($url));

Voilà pour la partie technique. En ce qui concerne la partie légale
(c.-à-d. est-ce que tu as le droit de le faire), ce n'est pas en charte
ici mais je te conseille quand même d'aller poser la question au site
dont tu voudrais pomper une image chaque jour.

Avatar
Hugolino
Le 09 Mar 2008 08:48:57 GMT, Olivier Miakinen a écrit:

[ lire une image gif créée à la volée sur un site, et la sauver chez soi ]

J'ai bien vu imagegif() qui permet d'enregistrer une image sur le
disque, et d'ailleurs j'utilise imagepng() sur ma page de stats pour
éviter d'avoir à regénérer constamment mes graphes, mais si je sais le
faire avec une image que je créé et dans laquelle je dessine, je ne vois
pas comment le faire avec une image dont je n'ai que l'URL.


Ça se fait en deux lignes :


Arf... (mauvais yeux, changer yeux :)

$im = imagecreatefromgif($url);
imagegif($im, $filename);


Est-ce que j'ai raison d'ajouter la ligne 'imagedestroy($im);' pour
éviter que le serveur ne la garde en mémoire ? J'avais été obligé de le
faire pour ma page de stats dont les graphiques sont recalculés à chaque
rechargement de ladite page, sinon les graphiques n'étaient pas mis à
jour.

Voire en une seule :

imagegif(imagecreatefromgif($url), $filename);

Note que tu n'as pas besoin de passer par une image en interne :

file_put_contents($filename, file_get_contents($url));


Ce qui éviterait d'avoir à appeler imagedestroy() ?

Voilà pour la partie technique.


OK, merci de ton aide.

En ce qui concerne la partie légale (c.-à-d. est-ce que tu as le
droit de le faire), ce n'est pas en charte ici mais je te conseille
quand même d'aller poser la question au site dont tu voudrais pomper
une image chaque jour.


OK, je vais leur envoyer un mail.

--
Linux c'est une philosophie un art de vivre, un état intérieur,
une sorte de fluide qui nous entoure et nous pénètre.
Fais tourner stp !

Hugo (né il y a 1 384 474 083 secondes)


Avatar
Olivier Miakinen

$im = imagecreatefromgif($url);
imagegif($im, $filename);


Est-ce que j'ai raison d'ajouter la ligne 'imagedestroy($im);' pour
éviter que le serveur ne la garde en mémoire ?


Tu as raison, c'est plus propre ; du coup, ma version en une seule ligne
n'est pas à conseiller. Cela dit, si le script s'arrête juste après le
imagegif(), en principe toutes les ressources sont libérées, et ça ne
devrait pas avoir de grosses conséquences de l'oublier.

J'avais été obligé de le
faire pour ma page de stats dont les graphiques sont recalculés à chaque
rechargement de ladite page, sinon les graphiques n'étaient pas mis à
jour.


La page ne générait qu'une seule image à la fois ? S'il y avait une
boucle avec création d'une image à chaque tour, je comprendrais que
cela finisse par dépasser le quota de mémoire autorisé ; sinon, cela
m'étonne.

Note que tu n'as pas besoin de passer par une image en interne :

file_put_contents($filename, file_get_contents($url));


Ce qui éviterait d'avoir à appeler imagedestroy() ?


Absolument. Ici ce n'est pas une ressource qui est créée, mais juste une
chaîne de caractères, dont la mémoire est libérée quand elle n'est plus
utilisée.