Photo Of The Day - National Geographic
Par Akh le mardi, 06 septembre 2016, 17:05 - Lien permanent
Sur le même principe que la récupération de l'image du jour de bing je vous propose cette fois-ci de récupérer la Photo Of The Day de National Geographic.
Un petit script php a lancer tous les jours est suffisant.
Il faut savoir que depuis la mi-août la page de présentation de cette image du jour a changé, la résolution des photos aussi, elles sont parfois plus intéressantes.
La page en question est la suivante http://photography.nationalgeographic.com/photography/photo-of-the-day/
Elle est complexe et la syntaxe n'est pas terrible, mais on peut y repérer la date, un nom de fichier possible et enfin l'url de l'image. Tout ceci grace aux balises meta renseignées dans la partie head, super !
La date
C'est intéressant si vous voulez sauvegarder les photos au fur et à mesure dans un dossier dont le nom reprend l'année puis le mois.
On trouve donc cette ligne :
<meta property="gsa_publish_date" content="Wed Sep 07 00:02:23 EDT 2016"/>
C'est un format de date standard pour PHP un simple strtotime fera l'affaire
L'url du fichier
Il ne faut pas se contenter de l'image réduite afficher par la page, mais aller chercher celle qui se cache en définition maximale
on trouve donc cette ligne :
<meta property="og:image" content="http://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7pS2VP2wnKyN8wxywmXtY0-FwsgxqjPRbpTgzTM-4Z30DkZQigI-ffcxgLZ92xfyyK4w3V4-0Uul32h2rdcdOo_jWt8cNPKGuiBY-Dk-OB2gP5y5skOpUoq1u5_1FZjehakvsjilhprNoxpOHi9hCtCid-0V5d4UO_IFtTtTPgq0y6pB4fcmgHr9FR9T7lFiPiXu9OG19A/"/>
J'ai bien essayé de comprendre ce que pouvait cacher ce codage, pas trouvé C'est pour cela qu'il faut trouver un nom à cette photo, syntaxiquement correct et le plus unique possible, tout en conservant une certaine description de la photo.
Un nom de fichier
A la recherche d'un nom explicite on trouve cette ligne toujours dans les meta :
<meta property="og:url" content="http://www.nationalgeographic.com/photography/photo-of-the-day/2016/9/india-rainforest-snake/"/>
La fin de l'url nous suffira !
Le script PHP
<?php $nam_dir = "D:\\NationalGeographic\\"; $url_xml = 'http://photography.nationalgeographic.com/photography/photo-of-the-day/'; $dat_xml = file_get_contents($url_xml); $deb = stripos($dat_xml,'<meta property="gsa_publish_date'); $deb = stripos($dat_xml,'content="',$deb); $deb = stripos($dat_xml,'"',$deb); $fin = stripos($dat_xml,'"',$deb+1); $dir_img = substr($dat_xml,$deb+1,$fin-$deb-1); $dir_img = strtotime($dir_img); $dir_img = date("Y_m",$dir_img); $deb = stripos($dat_xml,'<meta property="og:image"'); $deb = stripos($dat_xml,'content="',$deb); $deb = stripos($dat_xml,'"',$deb); $fin = stripos($dat_xml,'"',$deb+1); if($deb != 0) { $url_img = substr($dat_xml,$deb+1,$fin-$deb-1); $dat_img = file_get_contents($url_img); $deb = stripos($dat_xml,'<meta property="og:url"'); $deb = stripos($dat_xml,'content="',$deb); $deb = stripos($dat_xml,'"',$deb); $fin = stripos($dat_xml,'"',$deb+1); $nam_img=substr($dat_xml,$deb+1,$fin-$deb-2); $deb = strripos($nam_img,'/'); $nam_img='\\'.substr($nam_img,$deb+1).'.jpg'; if (!file_exists($nam_dir.$dir_img)) mkdir($nam_dir.$dir_img); if (!file_exists($nam_dir.$dir_img.$nam_img)) file_put_contents($nam_dir.$dir_img.$nam_img,$dat_img); header("Content-type: image/jpg"); echo $dat_img; } ?>
Ce script permet donc de sauvegarder dans un sous-dossier dont le nom est la concaténation de l'année et le mois, du dossier D:\NationalGeographic\, la photo du jour sous un nom de fichier correct.
Pour résumé :
- on récupère le fichier HTML
- on recherche la date
- on extrait la date
- on la met sous la bonne forme
- on recherche l'url de la photo
- on l'extrait
- on recherche le nom de fichier de la photo
- on l'extrait
- si le sous-dossier année_mois n'existe pas on le crée
- si la photo n'existe pas on la sauvegarde
- on renvoie la photo
Ceci ne reste valable que tant que ces informations restent valides chez National Geographic, on verra bien combien de temps cela durera ...
Bye !