Recupérer l'image renvoyée par Robothumb.com

  • Auteur de la discussion Auteur de la discussion Zecat
  • Date de début Date de début
WRInaute accro
Sur un site, j'ai besoin pour un usage spécifique de recupérer les vignettes retournées par robothumb (affichage en survol de souris qui implique de détenir l'image sur le serveur).

Y a t il un moyen (automatique en php bien sur et pas à la mano) de recuprer une image et de la stocker sur son serveur ?

Actuellement j'ai ca dans mon code :

Code:
<img border="0" cellspacing="0" cellpadding="0"src="http://www.robothumb.com/src/?url=xxxxxx.fr&size=120x90&alt=http://www.zzzzzz.com/blanc.jpg">

Donc

1 - détecter si vignette retournée
2 - stocker vignette sur le serveur
 
WRInaute passionné
pour récupérer le contenu de l'image et vérifier qu'elle est bonne essaye avec :
Code:
if (($contenu_thumb = file_get_contents('http://www.robothumb.com/src/?url=xxxxxx.fr&size=120x90&alt=http://www.zzzzzz.com/blanc.jpg')) !== false) {
	if ((($img_thumb = imagecreatefromstring($contenu_thumb)) !== false) &&(imagesx($img_thumb) == 120) && (imagesy($img_thumb) == 90)) {
		//image OK...
	}
}
Si file_get_contents ne marche pas il faut passer par curl
 
WRInaute accro
Euh... Pourquoi le fait de l'afficher en survol obligerait-il à l'avoir sur ton serveur?

Sinon c'est pas bien compliqué: image=file_get_contents(url) puis file_put_contents(nomdefichier,image).

Entre les deux tu peux comparer avec ton alt pour voir si c'est bien un thumb spécifique...

Jacques.

(grilled)
 
WRInaute accro
jcaron a dit:
Euh... Pourquoi le fait de l'afficher en survol obligerait-il à l'avoir sur ton serveur?
Pour optimiser les perf et pas refaire un appel a robothumb de façon répétée

Merci a tous les deux. je vais tester ca
 
WRInaute passionné
et en couplant robothumbs avec url2jpeg puis mettre en cache ton image.
bien entendu tu renseignes url2jpeg avec l'url de robothumbs
 
WRInaute passionné
Salut, je m'incruste ^^,

Et en utilisant la fonction fopen() -> découpe de l'url -> récupération du nom de l'image -> copie de l'image ??

jcaron : tu as un bout de code avec file_put_contents() pour créer cette fameuse image ?
 
L
lenono
Guest
raljx a dit:
et en couplant robothumbs avec url2jpeg puis mettre en cache ton image.
bien entendu tu renseignes url2jpeg avec l'url de robothumbs

Et pourquoi l'url de robothumbs :?: :?:
S'il met en cache ses captures, il peut se passer de rbtt !! (Ou j'ai loupé quelquechose là :roll: )
 
WRInaute passionné
si le site fait 2000px de haut url2jpeg shot tout ....
EDIT : oui ben j'avais pas vu qu'on pouvait decouper en manuel ca va ca va ... :)
donc le chat, url2jpeg pourrait faire l'affaire a la place de robothumbs
 
WRInaute accro
a forty et jacques :

Warning: file_get_contents() [function.file-get-contents]: HTTP request failed! HTTP/1.1 401 Authorization Required in /vhosts/a/z/******/www/******/thumb_from_rbt.php on line 2

Warning: file_get_contents(http://www.robothumb.com/src/?url=*********.com&size=120x90&alt=http:/ ... /blanc.jpg) [function.file-get-contents]: failed to open stream: Success in /vhosts/a/z/*******/www/*******/thumb_from_rbt.php on line 2

Ca a pas l'air de le faire avec file get contents ...

Le code est un copier coller du code fournit par forty ...
 
WRInaute accro
Ca doit vouloir dire qu'il n'aime pas les robots? C'est peut-être même interdit par ses conditions d'utilisation, non?

Jacques.
 
WRInaute accro
J'imagine que vu le service proposé, ils ont du mettre en place ce qu'il fallait pour ne pas qu'on puisse se passer aussi facilement d'eux que ça. Du moins pas en automatisant ce genre de requêtes.
 
Nouveau WRInaute
ça marche chez moi avec ça :
Code:
$thumb = @file_get_contents($url);
$handle = fopen('/images/machin.jpg','w');
fwrite($handle, $thumb);
fclose($handle);

et pense à donner les droits en écritures dans ton dossier images ;)

EDIT : pour ceux que ça intéressent. Et je viens encore de tester ça fonctionne

+ complet
Code:
<?php
$thumb = @file_get_contents('http://www.robothumb.com/src/?url=http://www.yahoo.fr&size=320x240');
$handle = fopen('machin.jpg','w');
fwrite($handle, $thumb);
fclose($handle);
?>

Il faut juste que l'url soit bien formée et que votre dossier ou vous écrivez l'image est les droits suffisants.
 
WRInaute accro
jcaron a dit:
Ca doit vouloir dire qu'il n'aime pas les robots? C'est peut-être même interdit par ses conditions d'utilisation, non?

Jacques.
Mais c'ets pas un bot, c'est juste une mémorisation à la volée pour économiser de la ressources (la notre et la sienne d'ailleurs)
Aucune cgu ne l'interdit sur le site (quasiment tous les annuaires mettent leurs thumb en cache je crois). Il est juste demandé (ce qui est normal) un bl vers robothumb.
 
WRInaute passionné
j'ai ca comme code pour récupérer le contenu de l'image :
Code:
function get_thumb($url, $referer = '') {
	global $http_code, $content_type;
	
	if (($ch = curl_init($url)) === false) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'initialisation de la session cURL pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8')) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL USERAGENT pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!curl_setopt($ch, CURLOPT_HEADER, false)) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL HEADER pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL RETURNTRANSFER pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true)) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL FOLLOWLOCATION pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!curl_setopt($ch, CURLOPT_MAXREDIRS , 10)) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL MAXREDIRS  pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!empty($referer)) {
		if (!curl_setopt($ch, CURLOPT_REFERER, $referer)) {
			$num_erreur = curl_errno($ch);
			$text_erreur = curl_error($ch);
			log_erreur("Erreur d'ajout de l'option cURL REFERER pour $url : $num_erreur : $text_erreur");
			return false;
		}
	}
	if (!curl_setopt($ch, CURLOPT_ENCODING, '')) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL ENCODING pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (!curl_setopt($ch, CURLOPT_TIMEOUT, 5)) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'ajout de l'option cURL TIMEOUT pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (($res = curl_exec($ch)) === false) {
		$num_erreur = curl_errno($ch);
		$text_erreur = curl_error($ch);
		log_erreur("Erreur d'exécution cURL pour $url : $num_erreur : $text_erreur");
		return false;
	}
	if (($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) <> 200) {
		log_erreur("Erreur de code retour cURL pour $url : $http_code");
		return false;
	}
	$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
	if ($content_type == 'text/html') {
		return false;
	}
	curl_close($ch);
	return $res;
}
Avec une petite pause entre deux récupérations :
Code:
sleep(1);
 
WRInaute accro
ca marche ... j'ai trouvé.

J'avais laissé le alt dans l'url ... sans le alt tout rentre dans l'ordre (avec file_get_contents).

Merci a tous et bon ben curl ca sera pour la prochaine progression de mon phprank :mrgreen:
 
WRInaute accro
PS : au passage par rapport a ton code forty, j'ai fait l'economie du image create et du test des x y ...

au profit d'un simple :

if (strlen ($contenu_thumb) > 1000)
...

quand c'est vide ca fait 535 octets ...
 
Discussions similaires
Haut