Discussion:
Recuperer une image calculee par un autre site
(trop ancien pour répondre)
Hugolino
2008-03-09 08:35:33 UTC
Permalink
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)
Olivier Miakinen
2008-03-09 08:48:57 UTC
Permalink
[ 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.
Hugolino
2008-03-09 21:05:48 UTC
Permalink
Post by 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.
Arf... (mauvais yeux, changer yeux :)
Post by 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 ? 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.
Post by Olivier Miakinen
imagegif(imagecreatefromgif($url), $filename);
file_put_contents($filename, file_get_contents($url));
Ce qui éviterait d'avoir à appeler imagedestroy() ?
Post by Olivier Miakinen
Voilà pour la partie technique.
OK, merci de ton aide.
Post by Olivier Miakinen
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.
--
Post by Olivier Miakinen
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)
Olivier Miakinen
2008-03-09 22:36:06 UTC
Permalink
Post by Hugolino
Post by 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.
Post by Hugolino
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.
Post by Hugolino
Post by Olivier Miakinen
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.

Continuer la lecture sur narkive:
Loading...