Page 1 sur 1

Problème Api Allociné

Posté : 24 mars 2016, 17:36
par Larker
Je rencontre un petit problème lorsque je lance l'api d'allociné. En fait elles récoltent les différents films avec leurs acteurs. Malheureusement quand je tombe sur un acteur qui a des accents et qui est déjà en bdd, la liste des acteurs cessent de s'ajouter et ça me retourne une erreur interne à l'api. Je me suis dis que ça venait surement des accents car la liste d'acteurs cesse de s'ajouter quand ils ont des accents justement.
Sauf que le problème c'est que ça cesse de fonctionner quand l'acteur est déjà en base de données et que ça veut l'ajouter dans ma table acteur_film. Donc théoriquement ça va juste chercher l'id de l'acteur et l'id du film. Donc pourquoi cela ne s'ajouterait pas correctement quand l'acteur en question à un accent ?

Voici mon code :
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);
     
     
    /*
    $servername = "127.0.0.1";
    $username = "root";
    $password = "";
    $dbname = "";
    */
     
    $servername = "";
    $username = "";
    $password =
    $dbname = "db619046598";
     
    // 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, id_posteur, posteur, contenu, synopsis_court, genre, img, critique, note, video, realisateur, date_sortie, duree, banniere, active, code)
            VALUES (\"".utf8_encode($title)."\" , current_timestamp, '34', '', '".addslashes(utf8_encode($synopsis))."' , '".addslashes(utf8_encode($synopsisShort))."', \"".utf8_encode($genre)."\", '".addslashes($posterURL)."','', '0', '', \"".utf8_encode($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 (\"".utf8_encode($nom)."\" , \"".utf8_encode($prenom)."\" , \"".utf8_encode($nom_complet)."\", '".utf8_encode($longue_biographie)."', '".utf8_encode($courte_biographie)."', '".$path."', '".utf8_encode($nationalityArray[0])."' , '".utf8_encode($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;
Merci à ceux qui pourront m'aider car je bloque totalement sur ce problème ! :/

Re: Problème Api Allociné

Posté : 24 mars 2016, 19:39
par Larker
Du coup j'ai remplacé la ligne 308 par ça :
$sql = "SELECT id FROM acteur WHERE nom_complet = '".utf8_encode($actor_name)."'";

Le problème c'est que maintenant l'acteur qui a un accent dans son nom est ajouté une nouvelle fois dans la bdd même s'il existe déjà.

Re: Problème Api Allociné

Posté : 28 mars 2016, 14:08
par Larker
Bonjour,

Du coup j'ai en partie résolu le problème. J'ai modifié la ligne que j'ai posté ci dessus par ça :
$sql = "SELECT id FROM acteur WHERE nom_complet = \"".$actor_name."\"";
Maintenant le script fonctionne correctement, j'ai juste un dernier problème au niveau de l'ajout des synopsis. Quand il y a des tirets ou des points de suspensions (...) il ne s'ajoute pas et à la place j'ai un point d'interrogation qui s'affiche. Mais je ne vois pas pourquoi car je fais un utf8_encode sur le synopsis dans ma requête d'insertion.
Quelqu'un aurait-il une idée de la raison de ce problème ?

Merci ;)