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
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
 
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
 
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)
 
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
 
et en couplant robothumbs avec url2jpeg puis mettre en cache ton image.
bien entendu tu renseignes url2jpeg avec l'url de robothumbs
 
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 ?
 
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: )
 
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
 
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 ...
 
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.
 
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.
 
ç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.
 
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.
 
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);
 
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:
 
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 ...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut