Question Api et problème d'images

Eléphant du PHP | 283 Messages

12 déc. 2015, 01:42

Donc ça veut dire que le code d'Ascla doit fonctionner ?

Car son code me retourne des centaines de lignes, voici un screen :

Image

Eléphant du PHP | 243 Messages

12 déc. 2015, 01:54

Bizarre, j'ai essayé le code avec son url, je n'ai aucune erreur :?
Mon code (qui d'ailleurs est un peu faux :D ) ne va pas réussir à détecter d'erreur puisque la page existe bien..
Pour moi, faudrait enregistrer les images 8-|
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 243 Messages

12 déc. 2015, 01:56

Voilà un code fait pas PHP qui fonctionne bien pour la détection de page d'erreur:
<?php
// Création d'un gestionnaire curl vers une URL inexistante
$ch = curl_init('http://404.php.net/');

// Exécution
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

// Vérifie si une erreur survient
if(curl_errno($ch))
{
    echo 'Erreur Curl : ' . curl_error($ch);
}

// Fermeture du gestionnaire
curl_close($ch);
?>
Je l'ai essayé celui là ! :mrgreen:
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

12 déc. 2015, 02:00

Voici mon fichier data qui permet justement de faire les requêtes d'insertion de l'api. Du coup c'est là qu'il faudrait modifier l'enregistrement pour sauvegarder l'affiche directement sur mon serveur. Un peu comme c'est fait pour les acteurs, ça enregistre directement leurs images. Mais je ne vois vraiment pas comment le faire et j'ai pas envie de faire d'erreur car j'ai pas envie que mon script cesse de fonctionner.
<?php

	
	ini_set('max_execution_time', 60000); //60000 seconds = 1000 minutes
    // Inclure le script
    require_once "./api-allocine-helper/api-allocine-helper.php";
	
	error_reporting (E_ALL ^ E_NOTICE);
	
	
	/*
;
	*/
	
	
	
	// Create connection
	$conn = mysqli_connect($servername, $username, $password, $dbname);
	// Check connection
	if (!$conn) {
		die("Connection failed: " . mysqli_connect_error());
	}
	
	
	$date = date("d-m-Y");
	$hour = date("H:i");
	Print("Lancement du script le $date a $hour");
	
	echo '<hr/>';
	
   		
	$codes = array ('10568', '190918', '22779', '135063', '115362', '1628', '182745', '39187', '11736', '27070', '114782', '143692', '223002', '225953',  '216955',  '200631',   '173271',   '218926',  '126123',   '196960',  '195370',   '138673', 	'196885',   '198371', '130440', '132874',	'180887', '217882',  '204100',  '132039', '224215');
	
	//$codes = array ('182745', '223002', '200631', '195370', '224215', '180887'); 
	
	//$codes = array ('217029',  '229844' , '202807',  '144185' ,     '221579' ,  '180999'  ,  '219262'  ,   '221081' , '182266');
	
	
	$codes = array ('221081', '178545', '228258');
	
	$succes = 0;
	$err = 0;
    $count = 0;
	
	$profile = 'small';
	
	$helper = null;
	$movie = null;
		
	
	$title = null;
	$releaseDate = null;

	$synopsis = null;
	$genre = null;
	$directors = null;
	$actors = null;
	$nationality = null;
	$posterURL = null;
		
	$total = 0;
    $heure = 0;
    $minute = 0; 
    $seconde = 0;
	
	
	// 185186  
	
	//,126535, 228474
	
	
	
	
	$sql_select = "SELECT code FROM fiche_film ORDER BY id DESC LIMIT 1";
		
	$result = mysqli_query($conn, $sql_select);
	
	if (mysqli_num_rows($result) > 0)
	{
	$row = mysqli_fetch_assoc($result);
	$start_code =$row['code'];
	}
	
	/*
	if($start_code<17016)
	{
		$start_code = 17016;
	}
	*/
	mysqli_close($conn);
	
	
	//$start_code = 222069;
	
	//$start_code = 1;
	
	echo "De : " . $start_code;
	$end_code = $start_code+1000;
	echo "<br />";
	echo "A : " . $end_code;
	
	echo "<hr />";
	
	
	
		
	//299479
	
	for ($code = $start_code ; $code < $end_code; $code++)
	//foreach($codes as $code)
	{
   	

	// Create connection
	$conn = mysqli_connect($servername, $username, $password, $dbname);
	// Check connection
	if (!$conn) {
		die("Connection failed: " . mysqli_connect_error());
	}
	
		
	
	$count++;
	
   

	try
    {
	
		// Créer l'objet
		$helper = new AlloHelper;
        // Envoi de la requête
        $movie = $helper->movie($code,'medium');
		
		//Convertir la durée en hh:mm:ss 
        $total = $movie->runtime; //Nombre de secondes 
		
		$minute = intval(abs($total / 60)); 
		
        //$heure = intval(abs($total / 3600)); 
        //$total = $total - ($heure * 3600); 
        //$minute = intval(abs($total / 60)); 
        //$total = $total - ($minute * 60); 
        //$seconde = $total;
			
				
		echo '<Strong><U> Code </U> : </Strong> ' . $code . PHP_EOL;
		echo "<br />\n";
		
		$title = $movie->title;
		
		echo '<Strong><U> Titre </U> : </Strong> ' . $title . PHP_EOL;
		echo "<br />\n";
		
		$releaseDate = $movie->release->releaseDate;
		if(empty($releaseDate)){
		$releaseDate = $movie->dvdReleaseDate;	
		} 	
		
		//echo '<Strong><U> Date de sortie </U> : </Strong> ' . $releaseDate . PHP_EOL;
		//echo "<br />\n";
		 
		//echo '<Strong><U> Duree </U> : </Strong> ' . $heure . 'h'. $minute . 'min'.  PHP_EOL;
		//echo "<br />\n";
		 
		 
		 
		$search = array("\t", "\n", "\r");
		$synopsis = str_replace($search, '', $movie->synopsis);
		$synopsis = strip_tags($synopsis);
		
		$search = array("\t", "\n", "\r");
		$synopsisShort = str_replace($search, '', $movie->synopsisShort);
		$synopsisShort = strip_tags($synopsisShort);
		
        //echo '<Strong><U>  Synopsis </U> : </Strong> ' . $synopsis;
		//echo "<br />\n";
			
		$genre = null;
		$nationality = null;
		if(!empty($movie->genre)){
		$genre =  $movie->genre->implode();
	    }		
		
		//echo '<Strong><U>  Genre </U> : </Strong> ' . $genre . PHP_EOL;
		//echo "<br />\n";	
		
		$directors = $movie->castingShort->directors;
		
		/*
		$nb_person = count($movie->castMember);
		$nb_directors = 0;		
		$directors =  null;
		for ($j = 0; $j < $nb_person + 1; $j++)
		{
		$activity = $movie->castMember[$j]->activity['$'];
		if ($activity  == 'Réalisateur')
		{
		$directors = $movie->castMember[$j]->person->name;
		$nb_directors++;
		}
		else if ($activity == 'Co-Réalisateur')
		{	
		$directors = $directors . ", " . $movie->castMember[$j]->person->name;
		$nb_directors++;
		}	
			
		
		}
		*/
		
		echo '<Strong><U>  Realisateur </U> : </Strong> ' . $directors. PHP_EOL;
		echo "<br />\n";
		
		$actors = $movie->castingShort->actors;
		
		echo '<Strong><U>  Acteurs </U> : </Strong> ' . $actors . PHP_EOL;
		echo "<br />\n";	
		
		$nationality = null;
		if(!empty($movie->nationality)){
		$nationality = $movie->nationality->implode();
	    }
		
		//echo '<Strong><U>  Nationalite </U> : </Strong> ' . $nationality . PHP_EOL;
		//echo "<br />\n";
		
		$posterURL = $movie->poster;
		//echo '<Strong><U>  Affiche </U> : </Strong> ';
		//echo "<br />\n";
		
		echo '<img src='.  $posterURL .' height="290" width="230" \>';
		echo "<br />\n";
	
	
		//echo print_r($movie->getArray());
		
		
		if (strstr($posterURL, 'AffichetteAllocine.gif') || empty($title) || empty($directors) || empty($genre)){
		$helper = null;
        // Envoi de la requête
        $movie = null;
		echo 'fiche non complete : ' . $code;	
		echo '<hr />';
		continue;
		}
		
		
		
		//store database
		
		$sql_select = "SELECT * FROM fiche_film WHERE code = \"".$code."\"";
		
		$result = mysqli_query($conn, $sql_select);
		
		if (mysqli_num_rows($result) > 0)
		{
		echo " film deja existant dans la database <br />";
		}
		else
		{
						
		
				
			$sql = "INSERT INTO fiche_film (titre, date, posteur, contenu, synopsis_court, genre, img, critique, note, video, realisateur, date_sortie, duree, banniere, active, code)
			VALUES (\"".$title."\" , current_timestamp, '34', '".addslashes($synopsis)."' , '".addslashes($synopsisShort)."', \"".$genre."\", '".addslashes($posterURL)."','', '0', '', \"".$directors."\", '".$releaseDate."', '".$minute."' , '', '1', '".$code."')";	

			$last_id = null;
			
			if (mysqli_query($conn, $sql)) 
			{
			//mysqli_commit($conn);
			$last_id = mysqli_insert_id($conn);
			//sleep(3);
			echo "film enregistre sur la base : " . $code;	
			//echo "<br />\n";
			
			
			$actors = $movie->castingShort->actors;
		
			mysqli_close($conn);
		
			if(!empty($actors)){
			$actorsArray = explode(", ", $actors);
			$nb_actors	= count($actorsArray);
							
				//for ($j = $nb_directors; $j < $nb_person; $j++)
				//{
				
				
					// Create connection
				$conn = mysqli_connect($servername, $username, $password, $dbname);
				// Check connection
				if (!$conn) {
					die("Connection failed: " . mysqli_connect_error());
				}

				
				foreach($actorsArray as $actor_name)
				{
							
				$sql = "SELECT id FROM acteur WHERE nom_complet = \"".$actor_name."\"";
				
				$result = mysqli_query($conn, $sql);
				
				//mysqli_commit($conn);
				
				if (mysqli_num_rows($result) > 0) 
				{
					//echo " acteur deja existant dans la database : " . $actor . "<br />";
					
					while($row = mysqli_fetch_assoc($result)) {
			
					$id_acteur = $row["id"];
					
					$sql = "INSERT INTO acteur_film (id_acteur, id_film)
					VALUES ('".$id_acteur."' , '".$last_id."')";
						
					if (mysqli_query($conn, $sql)){
						//sleep(3);
						//echo "jointure acteur <=> film <br />";
					}
						
					//mysqli_commit($conn);	
					
						
					}
					
				} else {
					
					//echo " acteur n'existe pas dans la database <br />";
					
								
					$alloHelper = new AlloHelper;
										
					$actors = $alloHelper->search(mb_convert_encoding($actor_name,'ISO-8859-15', 'utf-8'), 1, 1, 'person');
					
					//echo print_r($actors->getArray());
					
					
					//echo "Acteur : " . $actor_name;
					//echo "<br />";
					
					$code_actor = $actors->person[0]->code;
					
					//echo "code person : " . $actors->person[0]->code;
					//echo "<br />";
					
					
					//echo "Date de naissance : " . $actors->person[0]->birthDate;
					//echo "<br />";
					
					
					
					//echo "Picture : " . $actors->person[0]->picture->href;
					//echo "<br />";
					
					
					//echo "Nationalité : " . $nationalityArray[0];
					//echo "<br />";
					
					$name = explode(" ", $actor_name);				
					$pos = strpos($actor_name, " ");
					$nom = substr($actor_name, $pos, strlen ($actor_name));
					$prenom = substr($actor_name, 0, $pos);
					
					//$nom = addslashes($nom);
					//$prenom = addslashes($prenom);
					
					$nom_complet = $actor_name;
					
					$date_naissance = $actors->person[0]->birthDate;
		
					$date_deces = $actors->person[0]->deathDate;
					
					if(empty($date_deces))
					{
						$date_deces = '';
					}
					
					$nationality = null;
					if(!empty($actors->person[0]->nationality)){
					$nationality = $actors->person[0]->nationality->implode();
					}
					$nationalityArray = explode("&", $nationality);
					$nb_nationality	= count($nationalityArray);				
					
					if($nb_nationality < 2)
					{
					$nationalityArray[0] = $nationality;
					$nationalityArray[1] = '';
					}
						
					$url_photo = addslashes($actors->person[0]->picture->href);
					$path = "";
					
					if(empty($url_photo))
					{
					$path = "acteur/no_image.jpg";
					}
					else 
					{
					$path = "acteur/".strtolower($code_actor).".jpg";
					$complete_path = "../images/".$path; 
					$ch = curl_init($url_photo);
					$fp = fopen($complete_path, 'wb');

					curl_setopt($ch, CURLOPT_FILE, $fp);
					curl_setopt($ch, CURLOPT_HEADER, 0);
					curl_exec($ch);
					curl_close($ch);
					fclose($fp);
					}
					
		            //sleep(3);
					
					
					$personHelper = new AlloHelper;
						
					$person = $personHelper->person($code_actor, 'small');
					
					
					
					$search = array("\t", "\n", "\r");
					$courte_biographie = str_replace($search, '', $person->biographyShort);
					$courte_biographie = strip_tags($courte_biographie);
					$courte_biographie = addslashes($courte_biographie);
		
					$longue_biographie = str_replace($search, '', $person->biography);
					$longue_biographie = strip_tags($longue_biographie);
					$longue_biographie = addslashes($longue_biographie);
					
					//echo "courte_biographie : " . $courte_biographie;
					//echo "<br />";
					
					//echo "longue_biographie : " . $longue_biographie;
					//echo "<br />";
					
														
					$sql = "INSERT INTO acteur (nom, prenom, nom_complet, longue_biographie, courte_biographie, img, nationalite, seconde_nationalite, date, deces)																			 
					VALUES (\"".$nom."\" , \"".$prenom."\" , \"".$nom_complet."\", '".$longue_biographie."', '".$courte_biographie."', '".$path."', '".$nationalityArray[0]."' , '".$nationalityArray[1]."' , '".$date_naissance."' , '".$date_deces."')";
					
					$retval = mysqli_query($conn, $sql);				
					//sleep(6);
					
					//mysqli_commit($conn);
					
					if(!$retval)
					{
					die('Could not insert data : ' . mysqli_error($conn));
					}
					else {
						
					//echo "acteur insere avec succee <br />";
					}
					
					$id_acteur = mysqli_insert_id($conn);
						
					
					$sql = "INSERT INTO acteur_film (id_acteur, id_film)
					VALUES ('".$id_acteur."' , '".$last_id."')";
						
					if (mysqli_query($conn, $sql)){
						//sleep(3);
						//echo "jointure acteur <=> film <br />";
					}
					//mysqli_commit($conn);
				}
					//mysqli_commit($conn);
					sleep(7);			
				}
				mysqli_close($conn);
			}
			
			}
			else echo "Error: " . $sql . "<br />" . mysqli_error($conn);
			
			
		}
	
		
		
        // Afficher le titre
        //echo "Titre du film: ", $movie->title, PHP_EOL;
		
		//echo "Durée: ", $minute, PHP_EOL;
		
		//echo 'Poster URL : ' . $movie->poster . PHP_EOL;
		
		//posterURL
		
        // Afficher toutes les données
        //print_r($movie->getArray());
		
		$succes++;
		echo '<hr/>';
		
		
		$helper = null;
		$movie = null;
		
		
		$title = null;
		$releaseDate = null;

		$synopsis = null;
		$genre = null;
		$directors = null;
		$actors = null;
		$nationality = null;
		$posterURL = null;
		
		$total = 0;
        $heure = 0;
        $minute = 0; 
        $seconde = 0;
		
		$actors_name = null;
		$nb_person = 0;
		$nb_directors = 0;	

		/*
		if ($count % 20 == 0) {
			//echo "sleep 6 secondes";
			//sleep(7);	
		}
		
		if ($count % 700 == 0) {
			//echo "sleep 20 secondes";
			sleep(15);	
		}
		*/
		
		
    }
    catch( ErrorException $error )
    {
        
        $helper = null;
		$movie = null;
		
		
		$title = null;
		$releaseDate = null;

		$synopsis = null;
		$genre = null;
		$directors = null;
		$actors = null;
		$nationality = null;
		$posterURL = null;
		
		$total = 0;
        $heure = 0;
        $minute = 0; 
        $seconde = 0;
		
		$actors_name = null;
		$nb_person = 0;
		$nb_directors = 0;	
		
		// En cas d'erreur
		
		if($error->getCode() == 2){
			sleep(7);
			//echo "sleep 20 seconde";
			//echo "<br />";
		}
		echo $actor;
		echo "Erreur n", $error->getCode(), ": ", $code ,"  ", $error->getMessage(), PHP_EOL;
		$err++;
		echo "<hr />";
    }
		sleep(7);
	}

	
	
	$date = date("d-m-Y");
	$hour = date("H:i");
	Print("Fin d'excecution le $date a $hour");
	//echo "<hr />";
	//echo 'Traites : ' . $succes . "/" . $count;
	//echo "<br />";
	//echo 'Non Traites : ' . $err . "/" . $count;	
	
	
?>

Eléphant du PHP | 243 Messages

12 déc. 2015, 02:33

Je pense avoir une bonne nouvelle.
Ça ne sera sans doute pas la meilleur, mais ça marchera et on n'aura pas besoin de toucher à ton code long dont je n'ai pas eu l'envie de lire :D
J'ai cherché ce qui différenciait un lien présentant une image d'un autre lien (qui fonctionne lui aussi) n'en présentant pas. Et la un éclair de génie (eh oui ça m'arrive :wink: ) : l'utilisation du getimagesize.
Je m'explique. Php offre la possibilité de récupérer le format d'une image. Puis j'ai essayé et j'ai remarqué que ton image vide ne renvoyait rien. J'ai alors créé un petit script comme tel :
<?php
$lien = $getAffiche['img']; //image a verifier
$lien_image_empty = "http://lien de l'image vide.jpg"; //image a afficher si vide
$img = getimagesize($lien);

if ($img['mime']) {
        echo "<div class="collection"><img src=' ".$lien." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}
else
{
    echo "<div class="collection"><img src=' ".$lien_image_empty." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}

?>
Voilà, en espérant que ça fonctionne..
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

12 déc. 2015, 02:50

D'accord je vais tester ça et je te redis ! mais concrètement ça fait quoi ? C'est pour afficher les films dont l'image est vide ? Ou ça affiche une image par défaut quand elle est vide ?

Eléphant du PHP | 243 Messages

12 déc. 2015, 02:55

Bah en gros, ça vérifie si l'image d'un lien existe bien.
Si elle existe, on l'affiche
Sinon on affiche une image que tu auras hébergé par défaut (un empty.png ou autre)
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

12 déc. 2015, 02:56

J'ai testé le code, ça me retourne une erreur : Warning: getimagesize(http://fr.web.img3.acsta.net/pictures/1 ... 126445.jpg): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found
in /public_html/accueil/modules/module-films.php on line 26

La ligne 26 étant $img = getimagesize($lien);

Eléphant du PHP | 243 Messages

12 déc. 2015, 03:10

Ah mince.
Essaye ce code
<?php
$lien = $getAffiche['img']; //image a verifier
$lien_image_empty = "http://lien de l'image vide.jpg"; //image a afficher si vide


if (getimagesize($lien)['mime']) {
        echo "<div class="collection"><img src=' ".$lien." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}
else
{
    echo "<div class="collection"><img src=' ".$lien_image_empty." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}

?>
Si ça fonctionne, tant mieux. Sinon va falloir se casser encore un peu la tête :lol:
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

12 déc. 2015, 03:36

ça me met ça maintenant :
Parse error: syntax error, unexpected '[' in /public_html/accueil/modules/module-films.php on line 27
La ligne 27 étant : if (getimagesize($lien)['mime']) {

Eléphant du PHP | 283 Messages

12 déc. 2015, 18:46

Et sinon c'est pas possible de faire une condition pour savoir la taille de l'image ? Car l'image empty d'allociné fait 1px donc ne pourrait on pas faire une condition qui précise que si la taille de l'image est < 2px alors on affiche l'image par défaut souhaité ?

Eléphant du PHP | 243 Messages

12 déc. 2015, 19:20

C'est presque ce que je t'ai proposé. Il faut utiliser getimagesize de Php :
http://php.net/manual/fr/function.getimagesize.php

En gros, pour récupérer la taille, il faudra utiliser l'argument 0 pour la largeur et 1 pour la hauteur.
<?php
$lien = $getAffiche['img']; //image a verifier
$lien_image_empty = "http://lien de l'image vide.jpg"; //image a afficher si vide
$img = getimagesize($lien);

if ($img[1] > 2) {
        echo "<div class="collection"><img src=' ".$lien." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}
else
{
    echo "<div class="collection"><img src=' ".$lien_image_empty." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}

?>
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

12 déc. 2015, 19:59

Merci vraiment pour ton aide Ascla. L'erreur suivante apparait:

Warning: getimagesize(http://fr.web.img3.acsta.net/pictures/1 ... 126445.jpg): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found
in /public_html/accueil/modules/module-films.php on line 25

La ligne 25 : $img = getimagesize($lien);

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

12 déc. 2015, 20:24

Faut peut être lire le message d'erreur... ;)
404 not found : http://fr.web.img3.acsta.net/pictures/1 ... 126445.jpg
L'image n'existe pas (et le serveur renvoie une erreur 404)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 283 Messages

12 déc. 2015, 20:47

Oui je comprends bien que ça renvoie une erreur car l'image n'existe plus, ça renvoie donc l'image empty.gif présent sur les serveurs d'allociné. Sauf que je voudrais mettre ma propre image quand l'image ne se charge pas. Jusque là tout ce qu'on a testé ne fonctionne pas et c'est assez étrange.