Et je n'ai rien trouvé ... :-( En fait pas tout à fait, mais j'ai du construire ma propre solution.

Les solutions locales

Les solutions du genre tous les lundi je copie les nouvelles images de la semaine dans un autre dossier ne me convenait pas, et si j'oubliais ? Je ne voulais pas non plus avoir un rappel de ma messagerie ou de mon téléphone pour y penser.

Une tâche de synchronisation de dossier ou une simple copie au démarrage du PC, mouais un petit robocopy et zou ... mais pc éteint plus de neuf jours et zou aussi ...

Et puis en fait cette barre bing étant installée sur un pc au boulot (éteint lorsque je n'y suis pas), plus de neuf jours de congé et hop c'était foutu.

Internet

Une petite recherche sur internet pour trouver des galeries bing et ... en fait je n'en ai trouvé qu'une Bing Image Archive. Vous remarquerez l'image du jour n'est pas la même suivant le pays, ce qui me permet d'en déduire que les images du jours sont américaines avec la barre bing.

Par contre un gros inconvénient les images sont modifiées et perdent le copyright et la description. D'ailleurs je n'ai pas trouvé de galeries respectant ces trois critères 1920x1200, description et copyright.

Il y a aussi quelque solution logicielle, mais je n'ai vraiment pas accroché (genre devoir s'inscrire sur un site)

Investigation

Bon mais alors comment ça marche ? Car les photos sur mon PC elles respectent bien les trois critères.

J'aurais bien aimé pour mes investigations avoir sous la main un logiciel capable de me lister les échanges (en fait les urls) entre ma barre bing et le serveur bing, mais bon si jamais je tombe dessus par inadvertance je le mettrai de côté.

J'ai quand même découvert l'url de base d'un fichier XML http://www.bing.com/hpimagearchive.aspx?format=xml&idx=%d&n=1&mbl=1&mkt=en-ww. Ce fichier contient des informations nécessaires et suffisante pour récupérer l'image du jour.

Bon, joueur comme je suis, j'ai essayé la même url avec fr-fr en lieux et place du en-ww, mais il n'y a pas la résolution 1920x1200 de disponible (ce qui explique que ce soit les photos américaines que je retrouve sur mon bureau)

Donc en regardant ce fichier on trouve la ligne suivante :

<urlBase>/az/hprichbg/rb/TigersNestMonastery_ROW8010930537</urlBase>

Et hop c'est fini il suffit d'ajouter www.bing.com devant et _1920x1200.jpg derrière et on obtient l'url de l'image.

Une parenthèse

J'avais envisagé un instant (en fait j'ai galéré un certain temps avant de me rendre à l'évidence que ce n'était pas possible) d'afficher l'image du jour en réduction sur ce site en utilisant le javascript, c'était alors au client d'aller chercher le fichier XML pour récupérer l'url de l'image. Mais voilà pas possible, pour des raisons de sécurité (et c'est logique, même si cela ne m'arrange pas) il est impossible d'aller chercher des fichiers sur un autre site en javascript.

Le code

Pour que cela marche donc il faut un hébergement qui accepte le cross-domain. Quoi !!! Tout simplement que le serveur exécutant votre script puisse récupérer chez bing des fichiers. Or ce n'est pas le cas de free, en fait, plus le cas actuellement. J'ai donc hébergé mon code sur un autre hébergement.

Le code n'est pas compliqué du tout d'ailleurs je ne l'ai même pas commenté, le voici

<?php

	$url_xml = 'http://www.bing.com/hpimagearchive.aspx?format=xml&idx=%d&n=1&mbl=1&mkt=en-ww';
	$dat_xml = file_get_contents($url_xml);
	
	$deb = stripos($dat_xml,'<urlbase>');
	$fin = stripos($dat_xml,'</urlbase>',$deb);

	if($deb != 0) {
		$url_img = 'http://www.bing.com'.substr($dat_xml,$deb+9,$fin-$deb-9).'_1920x1200.jpg';
		$dat_img = file_get_contents($url_img);

		$deb = strripos($url_img,'/');
		$nam_img = substr($url_img,$deb+1);

		$nam_dir = "c:\\tmp\\";
		if (!file_exists($nam_dir.$nam_img)) file_put_contents($nam_dir.$nam_img,$dat_img);
			
		header("Content-type: image/jpg");
		echo $dat_img;
		}
?>

Pour résumé :

  • on récupère le fichier xml
  • on extrait le nom de la photo du jour
  • on construit l'url de la photo du jour
  • on récupère la photo
  • on la sauvegarde si ce n'est déjà fait
  • on retourne l'image, comme cela en appelant ce script php on reçoit en retour l'image du jour

Et voilà le tour est joué ...

See You Next Time !

;-)