begin process at 2012 05 27 16:47:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > API ALLOCINÉ HELPER

API ALLOCINÉ HELPER


 Information sur la source

Note :
8,5 / 10 - par 6 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Classé sous :PHP API, horaires cinéma, Allociné, films informations, Cinéma Niveau :Initié Date de création :04/09/2010 Date de mise à jour :28/03/2012 23:58:19 Vu :11 749

Auteur : Etn3000

Ecrire un message privé
Commentaire sur cette source (87)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Le code source à jour se trouve sur Github:
https://github.com/etienne-gauvin/api-allo cine-helper

La documentation se trouve ici:
https://github.com/etienne-gauvin/api-allocin e-helper/wiki

Source

  • <?php
  • /**
  • * API Allociné Helper 2
  • * =====================
  • *
  • * Utiliser plus facilement l'API d'Allociné.fr (api.allocine.fr), de Screenrush.co.uk (api.screenrush.co.uk), de Filmstarts.de (api.filmstarts.de), de Beyazperde.com (api.beyazperde.com) ou de Sensacine.com (api.sensacine.com) pour récupérer des informations sur les films, stars, séances, cinés, news, etc...
  • * Il est possible de supprimer la classe AlloData sans autre modification du code.
  • *
  • * Codes des erreurs:
  • * ------------------
  • * 1. Aucune fonction de récupération de données distantes n'est disponible (php_curl|file_get_contents).
  • * 2. Erreur durant la récupération des données sur le serveur d'Allociné.
  • * 3. Erreur durant la conversion des données JSON en array.
  • * 4. Les mots-clés pour la recherche doivent contenir plus d'un caractère.
  • * 5. Allociné a retourné une erreur (Le message de l'erreur est le message de l'ErrorException).
  • * 6. offset inexistant (Uniquement dans la classe AlloData).
  • * 7. Ce n'est pas un lien vers une image qui a été fournit en paramètre à la méthode __construct() de la classe AlloImage.
  • *
  • *
  • * @licence http://creativecommons.org/licenses/by-nc/2.0/
  • * @author Etienne Gauvin
  • * @version 2.2
  • */
  • ###################################################################
  • ## Modifier les constantes ci-dessous en fonction de vos besoins ##
  • ###################################################################
  • /**
  • * L'URL de l'API et du serveur des images (par défaut).
  • * The URL of the API and the server images (default).
  • *
  • * @var string
  • */
  • # Allociné.fr, France
  • define( 'ALLO_DEFAULT_URL_API', "api.allocine.fr" );
  • define( 'ALLO_DEFAULT_URL_IMAGES', "images.allocine.fr" );
  • # Screenrush.co.uk, United-Kingdom
  • // define( 'ALLO_DEFAULT_URL_API', "api.screenrush.co.uk" );
  • // define( 'ALLO_DEFAULT_URL_IMAGES', "images.screenrush.co.uk" );
  • # Beyazperde.com, Türkiye
  • // define( 'ALLO_DEFAULT_URL_API', "api.beyazperde.com" );
  • // define( 'ALLO_DEFAULT_URL_IMAGES', "tri.acimg.net" );
  • # Filmstarts.de, Deutschland
  • // define( 'ALLO_DEFAULT_URL_API', "api.filmstarts.de" );
  • // define( 'ALLO_DEFAULT_URL_IMAGES', "bilder.filmstarts.de" );
  • # Sensacine.com, España
  • // define( 'ALLO_DEFAULT_URL_API', "api.sensacine.com" );
  • // define( 'ALLO_DEFAULT_URL_IMAGES', "imagenes.sensacine.com" );
  • /**
  • * Activer/désactiver les Exceptions
  • * Enable/disable Exceptions
  • *
  • * @var bool
  • */
  • define( 'ALLO_THROW_EXCEPTIONS', true );
  • /**
  • * Décoder de l'UTF8 les données réceptionnées
  • * Automatically decode the received data from UTF8
  • *
  • * @var bool
  • */
  • define( 'ALLO_UTF8_DECODE', true );
  • /**
  • * Le partenaire utilisé pour toutes les requêtes.
  • * The partner used for all requests.
  • *
  • * @var string
  • */
  • define( 'ALLO_PARTNER', 'YW5kcm9pZC12M3M' );
  • ###################################################################
  • /**
  • * Exécuter les requêtes et traiter les données.
  • *
  • */
  • class AlloHelper
  • {
  • /**
  • * Contient la dernière ErrorException
  • * @var ErrorException|null
  • */
  • private static $_lastError;
  • /**
  • * Provoquer une ErrorException et/ou retourne la dernière provoquée.
  • *
  • * @param string $message=null Le message de l'erreur
  • * @param int $code=0 Le code de l'erreur
  • * @return ErrorException|null
  • */
  • public static function error( $message = null, $code = 0 )
  • {
  • if ($message !== null)
  • {
  • $error = new ErrorException( $message, $code );
  • if ( ALLO_THROW_EXCEPTIONS )
  • throw $error;
  • self::$_lastError = $error;
  • }
  • return self::$_lastError;
  • }
  • /**
  • * Contient l'adresse du site où chercher les données.
  • * @var string
  • */
  • public static $APIUrl = ALLO_DEFAULT_URL_API;
  • /**
  • * Contient l'adresse du site où chercher les images.
  • * @var string
  • */
  • public static $imagesUrl = ALLO_DEFAULT_URL_IMAGES;
  • /**
  • * Modifier le langage.
  • * Les initiales du langage sont telles que défini dans la liste des codes ISO 639-1.
  • * Le français (fr), l'allemand (de), l'anglais (en), le turque (tr) et l'espagnol (es) sont disponibles.
  • *
  • * @see http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
  • *
  • * @param string $lang=null Les initiales du langage.
  • */
  • public static function lang( $lang = null )
  • {
  • switch( (string) $lang )
  • {
  • case 'de': case 'filmstarts.de':
  • self::$APIUrl = "api.filmstarts.de";
  • self::$imagesUrl = "bilder.filmstarts.de";
  • break;
  • case 'es': case 'sensacine.com':
  • self::$APIUrl = "api.sensacine.com";
  • self::$imagesUrl = "imagenes.sensacine.com";
  • break;
  • case 'fr': case 'allocine.fr':
  • self::$APIUrl = "api.allocine.fr";
  • self::$imagesUrl = "images.allocine.fr";
  • break;
  • case 'en': case 'screenrush.co.uk':
  • self::$APIUrl = "api.screenrush.co.uk";
  • self::$imagesUrl = "images.screenrush.co.uk";
  • break;
  • case 'tr': case 'beyazperde.com':
  • self::$APIUrl = "api.beyazperde.com";
  • self::$imagesUrl = "tri.acimg.net";
  • break;
  • }
  • }
  • /**
  • * Préréglages pour les paramètres d'URL
  • * @var array
  • */
  • private $_presets = array();
  • /**
  • * Ajouter/modifier des préréglages.
  • *
  • * @param array|string $preset Si c'est un array alors chaque paire "clé" => "valeur" ou "clé=valeur" sera enregistrée dans les préréglages, sinon si c'est une chaîne alors c'est le nom du préréglage et $value est sa valeur.
  • * @param string|array|int $value La valeur du préréglage si $preset est une chaîne de caractères.
  • * @return this
  • */
  • public function set( $preset, $value=null )
  • {
  • if (is_array( $preset ))
  • foreach( $preset as $name => $value )
  • $this->_presets[ (string) $name ] = $value;
  • elseif (is_string( $preset ))
  • $this->_presets[ $preset ] = $value;
  • return $this;
  • }
  • /**
  • * Retourne les préréglages.
  • *
  • * @param string|null $preset=null Indiquer le nom d'un préréglage pour connaître sa valeur.
  • * @return mixed
  • */
  • public function getPresets( $preset = null )
  • {
  • if ($preset === null)
  • return $this->_presets;
  • else
  • return @$this->_presets[$preset];
  • }
  • /**
  • * Effacer un/des préréglages.
  • *
  • * @param array $presets=array() Indiquer les préréglages à effacer ou laisser vide pour tout effacer.
  • * @param bool $inverse=false Si $inverse vaut true alors tous les préréglages seront effacés sauf ceux indiqués dans $presets.
  • * @return this
  • */
  • public function clearPresets( $presets = array(), $inverse = false )
  • {
  • if (empty($presets))
  • $this->_presets = array();
  • else {
  • if ($inverse)
  • foreach($this->_presets as $psn => $ps)
  • if (!in_array($psn, $presets))
  • unset($this->_presets[$psn]);
  • else
  • foreach($presets as $ps)
  • unset($this->_presets[$ps]);
  • }
  • return $this;
  • }
  • /**
  • * Retourne un URL créé à partir de différentes données.
  • * Les paramètres seront ajoutés dans l'ordre, sous leur forme "clé=valeur" ou "valeur" si il n'y a pas de clé.
  • * Si c'est un array les sous éléments seront implosés et séparés par des virgules "clé" => array("val1", "val2", "val3") deviendra "clé=val1,val2,val3"
  • * Les valeurs et les clés ne passent pas par la fonction urlencode !
  • *
  • * @param string $type Le type de données à récupérer (exemple: "rest/v3/movie")
  • */
  • protected function creatURL( $type )
  • {
  • $this->set(array(
  • 'format' => 'json',
  • 'partner' => ALLO_PARTNER
  • ));
  • $options_str = array();
  • foreach ($this->getPresets() as $cle => $valeur) {
  • if (is_string($cle))
  • {
  • if (is_array($valeur))
  • $options_str[] = "$cle=" . implode(',', $valeur);
  • else
  • $options_str[] = "$cle=" . (string) $valeur;
  • }
  • else
  • $options_str[] = (string) $valeur;
  • }
  • return "http://". self::$APIUrl ."/$type?".implode('&',(array)$options_str);
  • }
  • /**
  • * Récupérer des données JSON et les convertir depuis un URL grâce à php_curl, ou à défaut file_get_contents().
  • *
  • * @param string $url L'URL vers lequel aller chercher les données JSON.
  • * @return array|false Un array contenant les données en cas de succès, false si une erreur est survenue.
  • */
  • protected function getDataFromURL ( $url )
  • {
  • if ( function_exists("curl_init") )
  • {
  • $curl = curl_init();
  • curl_setopt ($curl, CURLOPT_URL, $url);
  • curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 10);
  • curl_setopt ($curl, CURLOPT_RETURNTRANSFER, true);
  • $data = curl_exec($curl);
  • curl_close($curl);
  • }
  • else
  • {
  • if ( !function_exists("file_get_contents") )
  • {
  • $this->error("The extension php_curl must be installed with PHP or function file_get_contents must be enabled.", 1);
  • return false;
  • }
  • else
  • $data = @file_get_contents($url);
  • }
  • if (empty($data))
  • {
  • $this->error("An error occurred while retrieving the data.", 2);
  • return false;
  • }
  • $data = @json_decode( $data, 1 );
  • if (empty($data)) {
  • $this->error("An error occurred when converting data.", 3);
  • return false;
  • }
  • else return $data;
  • }
  • /*
  • * Méthodes de récupération des données
  • */
  • /**
  • * Récupérer les données pour un type de données et un élément du tableau retourné donné.
  • * Utilisé en interne pour diminuer et clarifier le code dans les méthodes ne nécessitant pas de traitement particulier sur leurs données.
  • *
  • * @param string $type Voir AlloHelper::creatURL()
  • * @param string $container L'élément contenant les données dans le tableau retourné par Allociné
  • * @return AlloData|array|false
  • */
  • protected function getData( $type, $container, &$url )
  • {
  • // Récupération des données
  • $data = $this->getDataFromURL( $url = $this->creatURL( $type ) );
  • // En cas d'erreur
  • if (empty( $data ))
  • return false;
  • // Succès ($data est encore un array)
  • else
  • {
  • if (empty($data['error']))
  • // On retourne les données
  • if (class_exists('AlloData'))
  • return new AlloData( $data[$container] );
  • else
  • return $data;
  • // En cas d'erreur signalée par Allociné
  • else
  • {
  • $this->error( $data['error']['$'], 5 );
  • return false;
  • }
  • }
  • }
  • /**
  • * Effectuer une recherche sur Allociné.
  • * Possibilité de trier les résultats de films par ressemblance avec la chaîne de recherche.
  • *
  • * @param string $q La chaîne de recherche.
  • * @param int $page=1 La page des résultats.
  • * @param int $count=10 Le nombre maximum de résultats par page.
  • * @param bool $sortMovies=false Réorganiser ou non les films selon la ressemblance entre leur titre et la chaîne de recherche.
  • * @param array $filter=array() Filtrer les résultats pour gagner en rapidité. Peut-être remplit par "movietheater", "movie", "theater", "person", "news", "tvseries", "location", "character", "video" ou "photo".
  • * @param &$url=null Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function search( $q, $page = 1, $count = 10, $sortMovies = false, array $filter = array(), &$url = null )
  • {
  • // Traitement de la chaîne de recherche
  • if (!is_string($q) || strlen($q) < 2 )
  • {
  • $this->error( "The keywords should contain more than one character.", 4 );
  • return false;
  • }
  • $accents = "àáâãäçèéêëìíîïñòóôõöùúûüýÿ'";
  • $normal = 'aaaaaceeeeiiiinooooouuuuyy ';
  • $q = utf8_encode(strtr(strtolower(trim($q)), $accents, $normal));
  • // Préréglages
  • $this->set(array(
  • 'q' => urlencode($q),
  • 'filter' => (array) $filter,
  • 'count' => (int) $count,
  • 'page' => (int) $page
  • ));
  • // Création de l'URL
  • $url = $this->creatURL( 'rest/v3/search' );
  • // Envoi de la requête
  • $data = $this->getDataFromURL( $url );
  • // En cas d'erreur
  • if (empty($data))
  • return false;
  • // Succès ($data est encore un array)
  • else
  • {
  • if (empty($data['error']))
  • {
  • $data = $data['feed'];
  • if (!empty($data['movie']))
  • {
  • foreach ($data['movie'] as $iresult => &$result)
  • {
  • $result['productionYear'] = (int) @$result['productionYear'];
  • $result['originalTitle'] = (string) @$result['originalTitle'];
  • if (empty($result['title']))
  • $result['title'] = @$result['originalTitle'];
  • $result['release'] = (array) @$result['release'];
  • $result['release']['releaseDate'] = (string) @$result['release']['releaseDate'];
  • $result['statistics'] = (array) @$result['statistics'];
  • $result['statistics']['pressRating'] = (float) @$result['statistics']['pressRating'];
  • $result['statistics']['userRating'] = (float) @$result['statistics']['userRating'];
  • $result['castingShort'] = (array) @$result['castingShort'];
  • $result['castingShort']['directors'] = (string) @$result['castingShort']['directors'];
  • $result['castingShort']['actors'] = (string) @$result['castingShort']['actors'];
  • if (!empty($result['poster']['href']))
  • $result['poster'] = new AlloImage($result['poster']['href']);
  • else
  • $result['poster'] = new AlloImage();
  • $result['posterURL'] = $result['poster']->url();
  • $result['link'] = (array) @$result['link'];
  • }
  • }
  • // Réorganisation des films
  • if ($sortMovies && !empty($data['movie']))
  • {
  • $movies = &$data['movie'];
  • $resultats = array();
  • // Tableau contenant $cleFilm => $similitude
  • $similitudes = array();
  • // Oncalcule la distance de levenstein entre la chaîne de recherche et le titre pour chaque film
  • foreach ($movies as $i => &$m)
  • $similitudes[$i] = levenshtein($q, strtr(strtolower($m['title']), $accents, $normal));
  • // On réorganise le tableau des similitudes, mais en gardant les clés.
  • asort($similitudes, true);
  • // On remplit le tableau des résultats dans l'ordre des similitudes.
  • foreach ($similitudes as $i => $sim)
  • $resultats[] = $movies[$i];
  • $data['movieSorted'] = $resultats;
  • $data['movie'] = $movies;
  • }
  • // Réorganisation des compteurs des résultats
  • if (!empty($data['results']))
  • {
  • foreach ($data['results'] as $r)
  • $data['results'][$r['type']] = (int) $r['$'];
  • }
  • // On retourne les données
  • if (class_exists('AlloData'))
  • return new AlloData( $data );
  • else
  • return $data;
  • }
  • // En cas d'erreur signalée par Allociné
  • else
  • {
  • $this->error( $data['error']['$'], 5 );
  • return false;
  • }
  • }
  • }
  • /**
  • * Récupérer les critiques des spectateurs et de la presse à propos d'un film, d'une série TV.
  • *
  • * @param int $code L'identifiant du film/de la série.
  • * @param string $filter='press' Le type de critique ('press' ou 'public') à renvoyer.
  • * @param string $type='movie' Le type de données ("movie" ou "tvseries") auquel faire correspondre l'identifiant $code.
  • * @param int $count=10 Le nombre maximum de résultats par page.
  • * @param int $page=1 La page des résultats.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function reviewlist( $code, $filter='press', $type='movie', $count = 10, $page = 1, &$url = null )
  • {
  • // Type de critiques (presse/public)
  • switch ($filter)
  • {
  • case 'press': case 'presse': case 'desk-press':
  • $filter = 'desk-press';
  • break;
  • default:
  • $filter = 'public';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => $code,
  • 'filter' => (array) $filter,
  • 'type' => (string) $type,
  • 'count' => (int) $count,
  • 'page' => (int) $page
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/reviewlist', 'feed', $url);
  • }
  • /**
  • * Récupérer une liste de films en fonction de différents paramètres.
  • *
  • * @param string $filter='nowshowing' Le type de résultats à afficher: 'nowshowing' (films au cinéma) ou 'comingsoon' (bientôt au cinéma);
  • * @param string $order='dateasc' L'ordre dans lequel afficher les données: 'dateasc' (chronologique), 'datedesc' (anti-chronologique), 'theatercount' (nombre de salles) ou 'toprank' (popularité).
  • * @param int $count=10 Le nombre maximum de résultats par page.
  • * @param int $page=1 La page des résultats.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function movielist( $filter=array('nowshowing'), $order=array('dateasc'), $count = 10, $page = 1, &$url = null )
  • {
  • // Préréglages
  • $this->set(array(
  • 'filter' => (array) $filter,
  • 'order' => (array) $order,
  • 'count' => (int) $count,
  • 'page' => (int) $page
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/movielist', 'feed', $url);
  • }
  • /**
  • * Récupérer une liste de cinémas et la liste des films qui y passent actuellement en fonction d'un code postal.
  • *
  • * @param mixed $zip Le code postal de la ville du/des cinéma(s).
  • * @param $date=null Spécifier une date pour les horaires.
  • * @param $movieCode=null Spécifier les horaires d'un film (par identifiant).
  • * @param int $count=10 Le nombre maximum de résultats par page.
  • * @param int $page=1 La page des résultats.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function showtimesByZip( $zip, $date=null, $movieCode=null, $count = 10, $page = 1, &$url = null )
  • {
  • // Préréglages
  • $this->set('zip', $zip);
  • $this->set('count', (int) $count);
  • $this->set('page', (int) $page);
  • if ($date !== null)
  • $this->set('date', $date);
  • if ($movieCode !== null)
  • $this->set('movie', $movieCode);
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/showtimelist', 'feed', $url);
  • }
  • /**
  • * Récupérer une liste de cinémas et la liste des films qui y passent actuellement en fonction de coordonnées géographiques (latitude, longitude [, rayon]).
  • *
  • * @param float $lat La coordonnée latitude du cinéma.
  • * @param float $long La coordonnée longitude du cinéma.
  • * @param int $radius Le rayon dans lequel chercher.
  • * @param $date=null Spécifier une date pour les horaires.
  • * @param $movieCode=null Spécifier les horaires d'un film (par identifiant).
  • * @param int $count=10 Le nombre maximum de résultats par page.
  • * @param int $page=1 La page des résultats.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function showtimesByPosition( $lat, $long, $radius=10, $date=null, $movieCode=null, $count = 10, $page = 1, &$url = null )
  • {
  • // Préréglages
  • $this->set('lat', (float) $lat);
  • $this->set('long', (float) $long);
  • $this->set('radius', (int) $radius);
  • $this->set('count', (int) $count);
  • $this->set('page', (int) $page);
  • if ($date !== null)
  • $this->set('date', $date);
  • if ($movieCode !== null)
  • $this->set('movie', $movieCode);
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/showtimelist', 'feed', $url);
  • }
  • /**
  • * Récupérer une liste de cinémas et la liste des films qui y passent actuellement en fonction d'un ou de plusieurs identifiant(s) de cinéma(s);
  • *
  • * @param array|string $theaters Un identifiant/une liste d'identifiants de cinéma(s).
  • * @param $date=null Spécifier une date pour les horaires.
  • * @param $movieCode=null Spécifier les horaires d'un film (par identifiant).
  • * @param int $count=10 Le nombre maximum de résultats par page.
  • * @param int $page=1 La page des résultats.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function showtimesByTheaters( $theaters, $date=null, $movieCode=null, $count = 10, $page = 1, &$url = null )
  • {
  • // Préréglages
  • $this->set('theaters', (array) $theaters);
  • $this->set('count', (int) $count);
  • $this->set('page', (int) $page);
  • if ($date !== null)
  • $this->set('date', $date);
  • if ($movieCode !== null)
  • $this->set('movie', $movieCode);
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/showtimelist', 'feed', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur un film.
  • *
  • * @param int $code L'identifiant du film.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function movie( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Création de l'URL
  • $url = $this->creatURL( 'rest/v3/movie' );
  • // Envoi de la requête
  • $data = $this->getDataFromURL( $url );
  • // En cas d'erreur
  • if (empty($data))
  • return false;
  • // Succès ($data est encore un array)
  • else
  • {
  • if (empty($data['error']))
  • {
  • $data = $data['movie'];
  • // Remplacer "title" par "originalTitle" (si il n'existe pas)
  • if (empty($data['title']))
  • $data['title'] = $data['originalTitle'];
  • // On retourne les données
  • if (class_exists('AlloData'))
  • return new AlloData( $data );
  • else
  • return $data;
  • }
  • // En cas d'erreur signalée par Allociné
  • else
  • {
  • $this->error( $data['error']['$'], 5 );
  • return false;
  • }
  • }
  • }
  • /**
  • * Récupérer toutes les informations sur un article.
  • *
  • * @param int $code L'identifiant de l'article.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function news( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/news', 'news', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur une personne.
  • *
  • * @param int $code L'identifiant de la personne.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function person( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/person', 'person', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur un media (vidéo/photo).
  • *
  • * @param int $code L'identifiant du media.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function media( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/media', 'media', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur la filmographie d'une personne.
  • *
  • * @param int $code L'identifiant de la personne.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function filmography( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/filmography', 'person', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur une série TV.
  • *
  • * @param int $code L'identifiant de la série TV.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function tvserie( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/tvseries', 'tvseries', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur une saison d'une série TV.
  • *
  • * @param int $code L'identifiant de la saison.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function season( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/season', 'season', $url);
  • }
  • /**
  • * Récupérer toutes les informations sur un épisode d'une saison d'une série TV.
  • *
  • * @param int $code L'identifiant de l'épisode.
  • * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
  • * @param &$url Contiendra l'URL utilisé.
  • *
  • * @return AlloData|array|false
  • */
  • public function episode( $code, $profile = 'medium', &$url = null )
  • {
  • // Profile (quantité d'informations)
  • switch($profile)
  • {
  • case 'small': break;
  • case 'large': break;
  • default: $profile = 'medium'; break;
  • case 1: $profile = 'small'; break;
  • case 3: $profile = 'large';
  • }
  • // Préréglages
  • $this->set(array(
  • 'code' => (int) $code,
  • 'profile' => (string) $profile,
  • ));
  • // Récupération et revoi des données
  • return $this->getData('rest/v3/episode', 'episode', $url);
  • }
  • }
  • /**
  • * Manipuler facilement les données reçues.
  • * Il est possible de supprimer complètement cette classe sans autre modification du code.
  • *
  • * @implements ArrayAccess, SeekableIterator, Countable
  • */
  • class AlloData implements ArrayAccess, SeekableIterator, Countable
  • {
  • /**
  • * Contiendra les données
  • * @var array
  • */
  • private $_data = array();
  • /**
  • * Valeur de remplacement pour les symboles '$' ou false pour ne rien modifier.
  • */
  • const REPLACEMENT_OF_DOLLAR_SIGN = 'value';
  • /**
  • * Décoder une variable depuis l'UTF8.
  • *
  • * @param mixed $var Seules les chaînes sont décodées, mais aucune erreur ne sera provoquée si ce n'en est pas une.
  • * @param mixed $tab=false Si ce paramètre vaut true alors le tableau sera parcouru de manière récursive et toutes les chaînes de caractèrezs seront converties.
  • * @return array|string Le tableau|la chaîne décodé(e)
  • */
  • public static function utf8_decode( $var, $tab = false )
  • {
  • if (ALLO_UTF8_DECODE)
  • {
  • if (is_string($var)) return utf8_decode(str_replace('â¤&#8482;', "'", $var));
  • elseif (!is_array($var) || !$tab) return $var;
  • else
  • {
  • $return = array();
  • foreach ($var as $i => $cell)
  • $return[utf8_decode($i)] = self::utf8_decode($cell, true);
  • return $return;
  • }
  • }
  • else
  • return $var;
  • }
  • /**
  • * Constructeur
  • */
  • public function __construct( $data )
  • {
  • $this->_data = (array) $data;
  • }
  • /**
  • * Retourne un pointeur sur une valeur existante dans les données enregistrées, ou null si elle n'existe pas.
  • *
  • * @param $offset=null Retourne un pointeur sur tout le tableau si $offset==null
  • * @return Une référence vers la valeur demandée, ou null si elle n'existe pas.
  • */
  • protected function &_getProperty( $offset = null, $ignoreException = false )
  • {
  • $data = &$this->_data;
  • if ( $offset === null )
  • return $data;
  • else
  • {
  • if (isset( $data[$offset] ))
  • return $data[$offset];
  • elseif ( $offset == self::REPLACEMENT_OF_DOLLAR_SIGN && isset($data['$']) )
  • return $data['$'];
  • else
  • if (!$ignoreException)
  • AlloHelper::error("This offset ($offset) does not exist.", 6);
  • }
  • }
  • /**
  • * Retourne les données sous forme d'un array
  • *
  • */
  • public function getArray()
  • {
  • return (array) self::utf8_decode($this->_getProperty(), true);
  • }
  • /**
  • * Si l'on essaie d'accéder à une propriété inexistante (donc un élément de $this->_data)
  • *
  • */
  • public function __get( $offset )
  • {
  • $data = $this->_getProperty($offset);
  • if (is_array($data))
  • return new AlloData( $data );
  • else return self::utf8_decode($data);
  • }
  • /**
  • * Impossible de créer/modifier une propriété
  • *
  • */
  • public function __set( $offset, $value )
  • {
  • $data = &$this->_getProperty($offset);
  • $data = $value;
  • }
  • /*
  • * Implémentation des interfaces
  • */
  • /**
  • * Pointeur interne
  • * @var int
  • */
  • private $_position = 0;
  • /**
  • * Retourne la valeur de l'index courant.
  • */
  • public function current( )
  • {
  • $data = $this->_getProperty($this->_position);
  • if (is_array($data))
  • return new AlloData( $data );
  • else return self::utf8_decode($data);
  • }
  • /**
  • * Retourne true ou false selon l'existence ou non d'une occurence dans les données.
  • */
  • public function valid( )
  • {
  • return ($this->_getProperty($this->_position, true) !== null);
  • }
  • /**
  • * Retourne la position actuelle.
  • */
  • public function key( )
  • {
  • return $this->_position;
  • }
  • /**
  • * Incrémente l'index.
  • */
  • public function next( )
  • {
  • $this->_position++;
  • }
  • /**
  • * Réinitialise l'index.
  • */
  • public function rewind( )
  • {
  • $this->_position = 0;
  • }
  • /**
  • * Pour modifier directement la position dans le tableau.
  • */
  • public function seek( $newPosition )
  • {
  • $lastPosition = $this->_position;
  • $this->_position = $newPosition;
  • if (!$this->valid())
  • {
  • AlloHelper::error("This offset ($offset) does not exist.", 6);
  • $this->position = $anciennePosition;
  • }
  • }
  • /**
  • * Retourne le nombre d'occurences dans le tableau.
  • */
  • public function count()
  • {
  • return count($this->_data);
  • }
  • /**
  • * Si l'on essaie d'accéder à l'objet comme à un tableau.
  • */
  • public function offsetGet( $offset )
  • {
  • $data = $this->_getProperty($offset);
  • if (is_array($data))
  • return new AlloData( $data );
  • else return self::utf8_decode($data);
  • }
  • /**
  • * Si l'on veut de créer/modifier une propriété (interface ArrayAccess)
  • */
  • public function offsetSet( $offset, $value )
  • {
  • $data = &$this->_getProperty($offset);
  • $data = $value;
  • }
  • /**
  • * Lors de la vérification de l'existence d'une propriété avec isset (interface ArrayAccess)
  • */
  • public function offsetExists( $offset )
  • {
  • return ($this->_getProperty($this->_position, true) !== null);
  • }
  • /**
  • * Il n'est pas possible de détruire une la variable référencée, seule la référence est détruite...
  • * De toute façon ça n'a pas d'utilité.
  • */
  • public function offsetUnset($offset)
  • {
  • return;
  • }
  • /**
  • * Coller toutes les valeurs/sous-valeurs du tableau associatif.
  • * Exemple : $film->genre->implode( 'value' ) implosera toutes les valeurs de $film->genre[i]->value
  • *
  • * @param string $separator=', ' Le séparateur des valeurs.
  • * @param string $lastSeparator=' et ' Le séparateur des dernière et l'avant-dernière valeurs.
  • * @param string $offset='value' Les offsets à concaténer ('$' == 'value').
  • */
  • public function implode( $separator = ', ', $lastSeparator = ' et ', $offset = 'value' )
  • {
  • $tab = (array) $this->_getProperty();
  • if ( count($tab) === 1 )
  • {
  • $data = new AlloData($tab[0]);
  • if ( isset($data[$offset]) && is_string($data[$offset]) )
  • return $data[$offset];
  • }
  • elseif ( count($tab) < 1 ) return '';
  • $values = array();
  • foreach ( $tab as $i => $stab )
  • {
  • $data = new AlloData( $stab );
  • if ( isset($data[$offset]) && is_string($data[$offset]) )
  • $values[] = $data[$offset];
  • }
  • $last = array_slice($values, -1, 1);
  • if ( $values )
  • return implode( (string) $separator, array_slice( $values, 0, -1 ) ) . (( count($values) > 1 ) ? (string) $lastSeparator . $last[0] : '' );
  • else
  • return '';
  • }
  • }
  • /**
  • * Manipuler facilement les URLs des images.
  • *
  • */
  • class AlloImage
  • {
  • /**
  • * Répertoire de l'image par défaut
  • * @const string
  • */
  • const DEFAULT_IMAGE_PATH = "commons/emptymedia/AffichetteAllocine.gif";
  • /**
  • * Liste des icônes diponibles
  • * @var array
  • */
  • public static $icons = array(
  • 'play.png' => null,
  • 'overplay.png' => null,
  • 'overlayVod120.png' => array('r', 120, 160),
  • );
  • /**
  • * Contient les paramètres de l'icône.
  • * @var array|false
  • */
  • private $imageIcon = false;
  • /**
  • * Contient les paramètres de la bordure
  • * @var array|false
  • */
  • private $imageBorder = false;
  • /**
  • * Contient les paramètres de la taille de l'image.
  • * @var array|false
  • */
  • private $imageSize = false;
  • /**
  • * Contient l'adresse du serveur de l'image.
  • * @var string
  • */
  • private $imageHost;
  • /**
  • * Contient le répertoire de l'image sur Allociné.
  • * @var string
  • */
  • private $imagePath;
  • /**
  • * Image par défaut
  • *
  • * @return this
  • */
  • public function reset( )
  • {
  • $this->destroyBorder();
  • $this->destroyIcon();
  • $this->maxSize();
  • return $this;
  • }
  • /**
  • * Modifier l'icône sur l'image.
  • *
  • * @param string $position='c' La position de l'icône par rapport au centre de l'image (en une ou deux lettres), d'après la rose des sable. Renseigner une position invalide (telle que 'c') pour centrer l'icône.
  • * @param int $margin=4 Le nombre de pixel entre l'icône et le(s) bord(s) le(s) plus proche(s).
  • * @param string $icon='play.png' Le nom de l'icône à ajouter. La liste des icônes se trouve dans AlloImage::$icons.
  • * @return this
  • */
  • public function icon( $position='c', $margin=4, $icon='play.png' )
  • {
  • if (!empty($this->icons[$icon]))
  • {
  • $p = $this->icons[$icon];
  • switch ($p[0])
  • {
  • case 'r': $this->resize($p[1], $p[2]); break;
  • case 'c': $this->cut($p[1], $p[2]); break;
  • }
  • }
  • $this->imageIcon = array(
  • 'position' => substr($position, 0, 2),
  • 'margin' => (int) $margin,
  • 'icon' => (string) $icon
  • );
  • return $this;
  • }
  • /**
  • * Renvoie les paramètres enregistrés pour l'icône.
  • *
  • * @return array|false
  • */
  • public function getIcon()
  • {
  • return $this->imageIcon;
  • }
  • /**
  • * Efface les paramètres enregistrés pour l'icône.
  • *
  • * @return this
  • */
  • public function destroyIcon()
  • {
  • $this->imageIcon = false;
  • return $this;
  • }
  • /**
  • * Modifier la bordure de l'image.
  • *
  • * @param int $size=1 L'épaisseur de la bordure en pixels.
  • * @param string $color='000000' La couleur de la bordure en hexadécimal (sans # initial). [http://en.wikipedia.org/wiki/Web_colors#Hex_triplet]
  • * @return this
  • */
  • public function border( $size=1, $color="000000" )
  • {
  • $this->imageBorder = array(
  • 'size' => (int) $size,
  • 'color' => (string) $color
  • );
  • return $this;
  • }
  • /**
  • * Renvoie les paramètres enregistrés de la bordure.
  • *
  • * @return array|false
  • */
  • public function getBorder()
  • {
  • return $this->imageBorder;
  • }
  • /**
  • * Efface la bordure.
  • *
  • * @return this
  • */
  • public function destroyBorder()
  • {
  • $this->imageBorder = false;
  • return $this;
  • }
  • /**
  • * Modifier proportionnellement la taille de l'image au plus petit.
  • * Si les deux paramètres sont laissés tels quels ($xmax='x' et $ymax='y'), l'image sera de taille normale.
  • * Appeler cette fonction efface les paramètres enregistrés pour AlloImage::cut() (Les deux méthodes ne peuvent être utilisées en même temps).
  • *
  • * @param int $xmax='x' La largeur maximale de l'image, en pixels. Laisser 'x' pour une largeur automatique en fonction de $ymax.
  • * @param int $ymax='y' La hauteur maximale de l'image, en pixels. Laisser 'y' pour une hauteur automatique en fonction de $xmax.
  • * @return this
  • */
  • public function resize( $xmax='x', $ymax='y' )
  • {
  • $this->imageSize = array(
  • 'method' => 'r',
  • 'xmax' => $xmax,
  • 'ymax' => $ymax
  • );
  • return $this;
  • }
  • /**
  • * Redimensionner l'image au plus petit, puis couper les bords trop grands.
  • * Appeler cette fonction efface les paramètres enregistrés pour AlloImage::resize() (Les deux méthodes ne peuvent être utilisées en même temps).
  • *
  • * @param int $xmax La largeur maximale de l'image, en pixels.
  • * @param int $ymax La hauteur maximale de l'image, en pixels.
  • * @return this
  • */
  • public function cut( $xmax, $ymax )
  • {
  • $this->imageSize = array(
  • 'method' => 'c',
  • 'xmax' => (int) $xmax,
  • 'ymax' => (int) $ymax
  • );
  • return $this;
  • }
  • /**
  • * Retourne les paramètres enregistrés du redimensionnement/recoupe de l'image.
  • *
  • * @return array|false
  • */
  • public function getSize()
  • {
  • return $this->imageSize;
  • }
  • /**
  • * Règle l'image à sa taille maximale (Effacer redimensionnement/recoupe)
  • *
  • * @return array|false
  • */
  • public function maxSize()
  • {
  • $this->imageSize = false;
  • return $this;
  • }
  • /**
  • * Retourne le host de l'image.
  • *
  • * @return string
  • */
  • public function getImageHost()
  • {
  • return $this->imageHost;
  • }
  • /**
  • * Modifier le serveur (host) de l'image.
  • *
  • * @param string $server L'adresse sans slash du serveur (ex: 'images.allocine.fr'), le même paramètre que pour AlloHelper::lang(), ou 'default' pour régler selon le langage enregistré.
  • * @return this
  • */
  • public function setImageHost( $server )
  • {
  • switch ($server)
  • {
  • case 'default':
  • case 'de': case 'filmstarts.de':
  • case 'es': case 'sensacine.com':
  • case 'fr': case 'allocine.fr':
  • case 'en': case 'screenrush.co.uk':
  • $this->imageHost = self::$imagesUrl;
  • break;
  • default:
  • $this->imageHost = $server;
  • }
  • return $this;
  • }
  • /**
  • * Créer une nouvelle image grâce à son URL.
  • * Si l'url est invalide, l'image utilisée sera celle par défaut.
  • *
  • * @param string $url=null L'URL de l'image.
  • */
  • public function __construct( $url = null )
  • {
  • if ( empty($url) || !filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED) )
  • {
  • $this->imageHost = AlloHelper::$imagesUrl;
  • $this->imagePath = self::DEFAULT_IMAGE_PATH;
  • }
  • else
  • {
  • $urlParse = parse_url($url);
  • $this->imageHost = !empty($urlParse['host']) ? $urlParse['host'] : AlloHelper::$imagesUrl;
  • if (!empty($urlParse['path']))
  • $this->imagePath = $urlParse['path'];
  • else
  • AlloHelper::error("This isn't a URL to an image.", 7);
  • // Parsage de l'URL
  • $explodePath = explode('/', $this->imagePath);
  • // Première partie vide ?
  • if (empty($explodePath[0]))
  • unset($explodePath[0]);
  • // Détecte les paramètres jusqu'au début du path réel.
  • foreach ($explodePath as $iPathPart => $pathPart)
  • {
  • if (strpos($pathPart, '_') === false)
  • break;
  • else
  • unset($explodePath[$iPathPart]);
  • // Icône
  • if (strpos($pathPart, 'o') === 0 && preg_match("#^o_(.+)_(.+)_(.+)$#i", $pathPart, $i) != false)
  • {
  • $this->icon($i[3], $i[2], $i[1]);
  • }
  • // Bordure
  • elseif (strpos($pathPart, 'b') === 0 && preg_match("#^b[xy]?_([0-9]+)_([0-9a-f]{6}|.*)$#i", $pathPart, $i) != false)
  • {
  • if (preg_match("#^[0-9a-f]{6}$#i", $i[2]) == false)
  • $i[2] = "000000";
  • $this->border($i[1], $i[2]);
  • }
  • // Redimensionnement
  • elseif (preg_match("#^r[xy]?_([0-9]+|[a-z0-9]+)_([0-9]+|[a-z0-9]+)$#i", $pathPart, $i) != false)
  • {
  • $this->resize((int) $i[1], (int) $i[2]);
  • }
  • // Recoupe
  • elseif (preg_match("#^c[xy]?_([0-9]+|[a-z0-9]+)_([0-9]+|[a-z0-9]+)$#i", $pathPart, $i) != false)
  • {
  • $this->cut((int) $i[1], (int) $i[2]);
  • }
  • }
  • $this->imagePath = implode('/', $explodePath);
  • }
  • }
  • /**
  • * Construit l'URL à partir des paramètres enregistrés.
  • *
  • * @return string
  • */
  • public function url()
  • {
  • $params = array();
  • // Taille
  • if ( $this->imageSize !== false )
  • $params[] = "{$this->imageSize['method']}_{$this->imageSize['xmax']}_{$this->imageSize['ymax']}";
  • // Bordure
  • if ( $this->imageBorder !== false )
  • $params[] = "b_{$this->imageBorder['size']}_{$this->imageBorder['color']}";
  • // Icône
  • if ( $this->imageIcon !== false )
  • $params[] = "o_{$this->imageIcon['icon']}_{$this->imageIcon['margin']}_{$this->imageIcon['position']}";
  • return "http://{$this->imageHost}" . (!empty($params) ? '/' . implode('/', $params) : '') . "/{$this->imagePath}";
  • }
  • /**
  • * Alias de AlloImage::url()
  • *
  • * @return string
  • */
  • public function __toString()
  • {
  • return $this->url();
  • }
  • }
<?php
    
    /**
    * API Allociné Helper 2
    * =====================
    * 
    * Utiliser plus facilement l'API d'Allociné.fr (api.allocine.fr), de Screenrush.co.uk (api.screenrush.co.uk), de Filmstarts.de (api.filmstarts.de), de Beyazperde.com (api.beyazperde.com) ou de Sensacine.com (api.sensacine.com) pour récupérer des informations sur les films, stars, séances, cinés, news, etc...
    * Il est possible de supprimer la classe AlloData sans autre modification du code.
    * 
    * Codes des erreurs:
    * ------------------
    * 1. Aucune fonction de récupération de données distantes n'est disponible (php_curl|file_get_contents).
    * 2. Erreur durant la récupération des données sur le serveur d'Allociné.
    * 3. Erreur durant la conversion des données JSON en array.
    * 4. Les mots-clés pour la recherche doivent contenir plus d'un caractère.
    * 5. Allociné a retourné une erreur (Le message de l'erreur est le message de l'ErrorException).
    * 6. offset inexistant (Uniquement dans la classe AlloData).
    * 7. Ce n'est pas un lien vers une image qui a été fournit en paramètre à la méthode __construct() de la classe AlloImage. 
    * 
    * 
    * @licence http://creativecommons.org/licenses/by-nc/2.0/
    * @author Etienne Gauvin
    * @version 2.2
    */
    
    ###################################################################
    ## Modifier les constantes ci-dessous en fonction de vos besoins ##
    ###################################################################
    
    /**
    * L'URL de l'API et du serveur des images (par défaut).
    * The URL of the API and the server images (default).
    * 
    * @var string
    */
    
    # Allociné.fr, France
    define( 'ALLO_DEFAULT_URL_API', "api.allocine.fr" );
    define( 'ALLO_DEFAULT_URL_IMAGES', "images.allocine.fr" );
    
    # Screenrush.co.uk, United-Kingdom
    // define( 'ALLO_DEFAULT_URL_API', "api.screenrush.co.uk" );
    // define( 'ALLO_DEFAULT_URL_IMAGES', "images.screenrush.co.uk" );
    
    # Beyazperde.com, Türkiye
    // define( 'ALLO_DEFAULT_URL_API', "api.beyazperde.com" );
    // define( 'ALLO_DEFAULT_URL_IMAGES', "tri.acimg.net" );
    
    # Filmstarts.de, Deutschland
    // define( 'ALLO_DEFAULT_URL_API', "api.filmstarts.de" );
    // define( 'ALLO_DEFAULT_URL_IMAGES', "bilder.filmstarts.de" );
    
    # Sensacine.com, España
    // define( 'ALLO_DEFAULT_URL_API', "api.sensacine.com" );
    // define( 'ALLO_DEFAULT_URL_IMAGES', "imagenes.sensacine.com" );
    
    
    /**
    * Activer/désactiver les Exceptions
    * Enable/disable Exceptions
    * 
    * @var bool
    */
    
    define( 'ALLO_THROW_EXCEPTIONS', true );
    
    
    /**
    * Décoder de l'UTF8 les données réceptionnées
    * Automatically decode the received data from UTF8
    * 
    * @var bool
    */
    
    define( 'ALLO_UTF8_DECODE', true );
    
    
    /**
    * Le partenaire utilisé pour toutes les requêtes.
    * The partner used for all requests.
    * 
    * @var string
    */
    
    define( 'ALLO_PARTNER', 'YW5kcm9pZC12M3M' );
    
    
    ###################################################################
    
    
    /**
    * Exécuter les requêtes et traiter les données.
    * 
    */
    
    class AlloHelper
    {
        
        /**
        * Contient la dernière ErrorException
        * @var ErrorException|null
        */
        
        private static $_lastError;
        
        
        /**
        * Provoquer une ErrorException et/ou retourne la dernière provoquée.
        * 
        * @param string $message=null Le message de l'erreur
        * @param int $code=0 Le code de l'erreur
        * @return ErrorException|null
        */
        
        public static function error( $message = null, $code = 0 )
        {
            if ($message !== null)
            {
                $error = new ErrorException( $message, $code );
                
                if ( ALLO_THROW_EXCEPTIONS )
                    throw $error;
                
                self::$_lastError = $error;
            }
            
            return self::$_lastError;
        }
        
        
        /**
        * Contient l'adresse du site où chercher les données.
        * @var string
        */
        
        public static $APIUrl = ALLO_DEFAULT_URL_API;
        
        
        /**
        * Contient l'adresse du site où chercher les images.
        * @var string
        */
        
        public static $imagesUrl = ALLO_DEFAULT_URL_IMAGES;
        
        
        /**
        * Modifier le langage.
        * Les initiales du langage sont telles que défini dans la liste des codes ISO 639-1.
        * Le français (fr), l'allemand (de), l'anglais (en), le turque (tr) et l'espagnol (es) sont disponibles.
        * 
        * @see http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
        * 
        * @param string $lang=null Les initiales du langage.
        */
        
        public static function lang( $lang = null )
        {
            switch( (string) $lang )
            {
                case 'de': case 'filmstarts.de':
                    self::$APIUrl = "api.filmstarts.de";
                    self::$imagesUrl = "bilder.filmstarts.de";
                break;
                
                case 'es': case 'sensacine.com':
                    self::$APIUrl = "api.sensacine.com";
                    self::$imagesUrl = "imagenes.sensacine.com";
                break;
                
                case 'fr': case 'allocine.fr':
                    self::$APIUrl = "api.allocine.fr";
                    self::$imagesUrl = "images.allocine.fr";
                break;
                
                case 'en': case 'screenrush.co.uk':
                    self::$APIUrl = "api.screenrush.co.uk";
                    self::$imagesUrl = "images.screenrush.co.uk";
                break;
                
                case 'tr': case 'beyazperde.com':
                    self::$APIUrl = "api.beyazperde.com";
                    self::$imagesUrl = "tri.acimg.net";
                break;
            }
        }
        
        
        /**
        * Préréglages pour les paramètres d'URL
		* @var array
        */
        
        private $_presets = array();
        
        
        /**
        * Ajouter/modifier des préréglages.
        * 
        * @param array|string $preset Si c'est un array alors chaque paire "clé" => "valeur" ou "clé=valeur" sera enregistrée dans les préréglages, sinon si c'est une chaîne alors c'est le nom du préréglage et $value est sa valeur.
        * @param string|array|int $value La valeur du préréglage si $preset est une chaîne de caractères.
        * @return this
        */
        
        public function set( $preset, $value=null )
        {
            if (is_array( $preset ))
                foreach( $preset as $name => $value )
                    $this->_presets[ (string) $name ] = $value;
            
            elseif (is_string( $preset ))
                $this->_presets[ $preset ] = $value;
            
            return $this;
        }
        
        
        /**
        * Retourne les préréglages.
        * 
        * @param string|null $preset=null Indiquer le nom d'un préréglage pour connaître sa valeur.
        * @return mixed
        */
        
        public function getPresets( $preset = null )
        {
            if ($preset === null)
                return $this->_presets;
            else
                return @$this->_presets[$preset];
        }
        
        
        /**
        * Effacer un/des préréglages.
        * 
        * @param array $presets=array() Indiquer les préréglages à effacer ou laisser vide pour tout effacer.
        * @param bool $inverse=false Si $inverse vaut true alors tous les préréglages seront effacés sauf ceux indiqués dans $presets.
        * @return this
        */
        
        public function clearPresets( $presets = array(), $inverse = false )
        {
            if (empty($presets))
                $this->_presets = array();
            else {
                if ($inverse)
                    foreach($this->_presets as $psn => $ps)
                        if (!in_array($psn, $presets))
                            unset($this->_presets[$psn]);
                else
                    foreach($presets as $ps)
                        unset($this->_presets[$ps]);
            }
            
            return $this;
        }
        
        
        /**
        * Retourne un URL créé à partir de différentes données.
        * Les paramètres seront ajoutés dans l'ordre, sous leur forme "clé=valeur" ou "valeur" si il n'y a pas de clé.
        * Si c'est un array les sous éléments seront implosés et séparés par des virgules "clé" => array("val1", "val2", "val3") deviendra "clé=val1,val2,val3"
        * Les valeurs et les clés ne passent pas par la fonction urlencode !
        * 
        * @param string $type Le type de données à récupérer (exemple: "rest/v3/movie")
        */
        
        protected function creatURL( $type )
        {
            $this->set(array(
                'format' => 'json',
                'partner' => ALLO_PARTNER
            ));
            
            $options_str = array();
            
            foreach ($this->getPresets() as $cle => $valeur) {
                if (is_string($cle))
                {
                    if (is_array($valeur))
                        $options_str[] = "$cle=" . implode(',', $valeur);
                    
                    else
                        $options_str[] = "$cle=" . (string) $valeur;
                }
                else
                    $options_str[] = (string) $valeur;
            }
            
            return "http://". self::$APIUrl ."/$type?".implode('&',(array)$options_str);
        }
        
        
        /**
        * Récupérer des données JSON et les convertir depuis un URL grâce à php_curl, ou à défaut file_get_contents().
        * 
        * @param string $url L'URL vers lequel aller chercher les données JSON.
        * @return array|false Un array contenant les données en cas de succès, false si une erreur est survenue.
        */
        
        protected function getDataFromURL ( $url )
        {
            if ( function_exists("curl_init") )
            {
                $curl = curl_init();
                curl_setopt ($curl, CURLOPT_URL, $url);
                curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 10);
                curl_setopt ($curl, CURLOPT_RETURNTRANSFER, true);
                $data = curl_exec($curl);
                curl_close($curl);
            }
            
            else
            {
                if ( !function_exists("file_get_contents") )
                {
                    $this->error("The extension php_curl must be installed with PHP or function file_get_contents must be enabled.", 1);
                    return false;
                }
                else
                    $data = @file_get_contents($url);
            }
            
            if (empty($data))
            {
                $this->error("An error occurred while retrieving the data.", 2);
                return false;
            }
            
            $data = @json_decode( $data, 1 );
            
            if (empty($data)) {
                $this->error("An error occurred when converting data.", 3);
                return false;
            }
            else return $data;
        }
        
        
        /*
        * Méthodes de récupération des données
        */
        
        /**
        * Récupérer les données pour un type de données et un élément du tableau retourné donné.
        * Utilisé en interne pour diminuer et clarifier le code dans les méthodes ne nécessitant pas de traitement particulier sur leurs données.
        * 
        * @param string $type Voir AlloHelper::creatURL()
        * @param string $container L'élément contenant les données dans le tableau retourné par Allociné
        * @return AlloData|array|false
        */
        
        protected function getData( $type, $container, &$url )
        {
            // Récupération des données
            $data = $this->getDataFromURL( $url = $this->creatURL( $type ) );
            
            // En cas d'erreur
            if (empty( $data ))
                return false;
                
            // Succès ($data est encore un array)
            else
            {
                if (empty($data['error']))
                    // On retourne les données
                    if (class_exists('AlloData'))
                        return new AlloData( $data[$container] );
                    else
                        return $data;
                
                // En cas d'erreur signalée par Allociné
                else
                {
                    $this->error( $data['error']['$'], 5 );
                    return false;
                }
            }
        }
        
        /**
        * Effectuer une recherche sur Allociné.
        * Possibilité de trier les résultats de films par ressemblance avec la chaîne de recherche.
        * 
        * @param string $q La chaîne de recherche.
        * @param int $page=1 La page des résultats.
        * @param int $count=10 Le nombre maximum de résultats par page.
        * @param bool $sortMovies=false Réorganiser ou non les films selon la ressemblance entre leur titre et la chaîne de recherche.
        * @param array $filter=array() Filtrer les résultats pour gagner en rapidité. Peut-être remplit par "movietheater", "movie", "theater", "person", "news", "tvseries", "location", "character", "video" ou "photo".
        * @param &$url=null Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function search( $q, $page = 1, $count = 10, $sortMovies = false, array $filter = array(), &$url = null )
        {
            
            // Traitement de la chaîne de recherche
            if (!is_string($q) || strlen($q) < 2 )
            {
                $this->error( "The keywords should contain more than one character.", 4 );
                return false;
            }
            
            $accents = "àáâãäçèéêëìíîïñòóôõöùúûüýÿ'";
            $normal  = 'aaaaaceeeeiiiinooooouuuuyy ';
            $q = utf8_encode(strtr(strtolower(trim($q)), $accents, $normal));
            
            // Préréglages
            $this->set(array(
                'q' => urlencode($q),
                'filter' => (array) $filter,
                'count' => (int) $count,
                'page' => (int) $page
            ));
            
            // Création de l'URL
            $url = $this->creatURL( 'rest/v3/search' );
            
            // Envoi de la requête
            $data = $this->getDataFromURL( $url );
            
            // En cas d'erreur
            if (empty($data))
                return false;
                
            // Succès ($data est encore un array)
            else
            {
                if (empty($data['error']))
                {
                    $data = $data['feed'];
                    
                    if (!empty($data['movie']))
                    {
                        foreach ($data['movie'] as $iresult => &$result)
                        {
                            $result['productionYear'] = (int) @$result['productionYear'];
                            $result['originalTitle'] = (string) @$result['originalTitle'];
                            
                            if (empty($result['title']))
                                $result['title'] = @$result['originalTitle'];
                            
                            $result['release'] = (array) @$result['release'];
                            $result['release']['releaseDate'] = (string) @$result['release']['releaseDate'];
                            
                            $result['statistics'] = (array) @$result['statistics'];
                            $result['statistics']['pressRating'] = (float) @$result['statistics']['pressRating'];
                            $result['statistics']['userRating'] = (float) @$result['statistics']['userRating'];
                            
                            $result['castingShort'] = (array) @$result['castingShort'];
                            $result['castingShort']['directors'] = (string) @$result['castingShort']['directors'];
                            $result['castingShort']['actors'] = (string) @$result['castingShort']['actors'];
                            
                            if (!empty($result['poster']['href']))
                                $result['poster'] = new AlloImage($result['poster']['href']);
                            else
                                $result['poster'] = new AlloImage();
                            
                            $result['posterURL'] = $result['poster']->url();
                            $result['link'] = (array) @$result['link'];
                        }
                    }
                    
                    // Réorganisation des films
                    if ($sortMovies && !empty($data['movie']))
                    {
                        $movies = &$data['movie'];
                        $resultats = array();
                        
                        // Tableau contenant $cleFilm => $similitude
                        $similitudes = array();
                        
                        // Oncalcule la distance de levenstein entre la chaîne de recherche et le titre pour chaque film
                        foreach ($movies as $i => &$m)
                            $similitudes[$i] = levenshtein($q, strtr(strtolower($m['title']), $accents, $normal));
                        
                        // On réorganise le tableau des similitudes, mais en gardant les clés.
                        asort($similitudes, true);
                        
                        // On remplit le tableau des résultats dans l'ordre des similitudes.
                        foreach ($similitudes as $i => $sim)
                            $resultats[] = $movies[$i];
                        
                        
                        $data['movieSorted'] = $resultats;
                        $data['movie'] = $movies;
                    }
                    
                    // Réorganisation des compteurs des résultats
                    if (!empty($data['results']))
                    {
                        foreach ($data['results'] as $r)
                            $data['results'][$r['type']] = (int) $r['$'];
                    }
                    
                    // On retourne les données
                    if (class_exists('AlloData'))
                        return new AlloData( $data );
                    else
                        return $data;
                }
                
                // En cas d'erreur signalée par Allociné
                else
                {
                    $this->error( $data['error']['$'], 5 );
                    return false;
                }
            }
        }
        
        
        /**
        * Récupérer les critiques des spectateurs et de la presse à propos d'un film, d'une série TV.
        * 
        * @param int $code L'identifiant du film/de la série.
        * @param string $filter='press' Le type de critique ('press' ou 'public') à renvoyer.
        * @param string $type='movie' Le type de données ("movie" ou "tvseries") auquel faire correspondre l'identifiant $code.
        * @param int $count=10 Le nombre maximum de résultats par page.
        * @param int $page=1 La page des résultats.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function reviewlist( $code, $filter='press', $type='movie', $count = 10, $page = 1, &$url = null )
        {
            // Type de critiques (presse/public)
            switch ($filter)
            {
                case 'press': case 'presse': case 'desk-press':
                $filter = 'desk-press';
                break;
                
                default:
                $filter = 'public';
            }
            
            // Préréglages
            $this->set(array(
                'code' => $code,
                'filter' => (array) $filter,
                'type' => (string) $type,
                'count' => (int) $count,
                'page' => (int) $page
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/reviewlist', 'feed', $url);
        }
        
        
        /**
        * Récupérer une liste de films en fonction de différents paramètres.
        * 
        * @param string $filter='nowshowing' Le type de résultats à afficher: 'nowshowing' (films au cinéma) ou 'comingsoon' (bientôt au cinéma);
        * @param string $order='dateasc' L'ordre dans lequel afficher les données: 'dateasc' (chronologique), 'datedesc' (anti-chronologique), 'theatercount' (nombre de salles) ou 'toprank' (popularité).
        * @param int $count=10 Le nombre maximum de résultats par page.
        * @param int $page=1 La page des résultats.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function movielist( $filter=array('nowshowing'), $order=array('dateasc'), $count = 10, $page = 1, &$url = null )
        {
            // Préréglages
            $this->set(array(
                'filter' => (array) $filter,
                'order' => (array) $order,
                'count' => (int) $count,
                'page' => (int) $page
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/movielist', 'feed', $url);
        }
        
        
        /**
        * Récupérer une liste de cinémas et la liste des films qui y passent actuellement en fonction d'un code postal.
        * 
        * @param mixed $zip Le code postal de la ville du/des cinéma(s).
        * @param $date=null Spécifier une date pour les horaires.
        * @param $movieCode=null Spécifier les horaires d'un film (par identifiant).
        * @param int $count=10 Le nombre maximum de résultats par page.
        * @param int $page=1 La page des résultats.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function showtimesByZip( $zip, $date=null, $movieCode=null, $count = 10, $page = 1, &$url = null )
        {
            // Préréglages
            $this->set('zip', $zip);
            $this->set('count', (int) $count);
            $this->set('page', (int) $page);
            
            if ($date !== null)
                $this->set('date', $date);
            
            if ($movieCode !== null)
                $this->set('movie', $movieCode);
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/showtimelist', 'feed', $url);
        }
        
        
        
        /**
        * Récupérer une liste de cinémas et la liste des films qui y passent actuellement en fonction de coordonnées géographiques (latitude, longitude [, rayon]).
        * 
        * @param float $lat La coordonnée latitude du cinéma.
        * @param float $long La coordonnée longitude du cinéma.
        * @param int $radius Le rayon dans lequel chercher.
        * @param $date=null Spécifier une date pour les horaires.
        * @param $movieCode=null Spécifier les horaires d'un film (par identifiant).
        * @param int $count=10 Le nombre maximum de résultats par page.
        * @param int $page=1 La page des résultats.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function showtimesByPosition( $lat, $long, $radius=10, $date=null, $movieCode=null, $count = 10, $page = 1, &$url = null )
        {
            // Préréglages
            $this->set('lat', (float) $lat);
            $this->set('long', (float) $long);
            $this->set('radius', (int) $radius);
            $this->set('count', (int) $count);
            $this->set('page', (int) $page);
            
            if ($date !== null)
                $this->set('date', $date);
            
            if ($movieCode !== null)
                $this->set('movie', $movieCode);
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/showtimelist', 'feed', $url);
        }
        
        
        
        /**
        * Récupérer une liste de cinémas et la liste des films qui y passent actuellement en fonction d'un ou de plusieurs identifiant(s) de cinéma(s);
        * 
        * @param array|string $theaters Un identifiant/une liste d'identifiants de cinéma(s).
        * @param $date=null Spécifier une date pour les horaires.
        * @param $movieCode=null Spécifier les horaires d'un film (par identifiant).
        * @param int $count=10 Le nombre maximum de résultats par page.
        * @param int $page=1 La page des résultats.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function showtimesByTheaters( $theaters, $date=null, $movieCode=null, $count = 10, $page = 1, &$url = null )
        {
            // Préréglages
            $this->set('theaters', (array) $theaters);
            $this->set('count', (int) $count);
            $this->set('page', (int) $page);
            
            if ($date !== null)
                $this->set('date', $date);
            
            if ($movieCode !== null)
                $this->set('movie', $movieCode);
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/showtimelist', 'feed', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur un film.
        * 
        * @param int $code L'identifiant du film.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function movie( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Création de l'URL
            $url = $this->creatURL( 'rest/v3/movie' );
            
            // Envoi de la requête
            $data = $this->getDataFromURL( $url );
            
            // En cas d'erreur
            if (empty($data))
                return false;
                
            // Succès ($data est encore un array)
            else
            {
                if (empty($data['error']))
                {
                    $data = $data['movie'];
                    
                    // Remplacer "title" par "originalTitle" (si il n'existe pas)
                    if (empty($data['title']))
                        $data['title'] = $data['originalTitle'];
                    
                    // On retourne les données
                    if (class_exists('AlloData'))
                        return new AlloData( $data );
                    else
                        return $data;
                }
                
                // En cas d'erreur signalée par Allociné
                else
                {
                    $this->error( $data['error']['$'], 5 );
                    return false;
                }
            }
        }
        
        
        /**
        * Récupérer toutes les informations sur un article.
        * 
        * @param int $code L'identifiant de l'article.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function news( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/news', 'news', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur une personne.
        * 
        * @param int $code L'identifiant de la personne.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function person( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/person', 'person', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur un media (vidéo/photo).
        * 
        * @param int $code L'identifiant du media.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function media( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/media', 'media', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur la filmographie d'une personne.
        * 
        * @param int $code L'identifiant de la personne.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function filmography( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/filmography', 'person', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur une série TV.
        * 
        * @param int $code L'identifiant de la série TV.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function tvserie( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/tvseries', 'tvseries', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur une saison d'une série TV.
        * 
        * @param int $code L'identifiant de la saison.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function season( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/season', 'season', $url);
        }
        
        
        /**
        * Récupérer toutes les informations sur un épisode d'une saison d'une série TV.
        * 
        * @param int $code L'identifiant de l'épisode.
        * @param int $profile='medium' La quantité d'informations à renvoyer: 'small', 'medium', 'large', 1 pour 'small', 2 pour 'medium', 3 pour 'large'.
        * @param &$url Contiendra l'URL utilisé.
        * 
        * @return AlloData|array|false
        */
        
        public function episode( $code, $profile = 'medium', &$url = null )
        {
            // Profile (quantité d'informations)
            switch($profile)
            {
                case 'small': break;
                case 'large': break;
                default: $profile = 'medium'; break;
                
                case 1: $profile = 'small'; break;
                case 3: $profile = 'large';
            }
            
            // Préréglages
            $this->set(array(
                'code' => (int) $code,
                'profile' => (string) $profile,
            ));
            
            // Récupération et revoi des données
            return $this->getData('rest/v3/episode', 'episode', $url);
        }
        
    }
    
    
    /**
    * Manipuler facilement les données reçues.
    * Il est possible de supprimer complètement cette classe sans autre modification du code.
    * 
    * @implements ArrayAccess, SeekableIterator, Countable
    */
    
    class AlloData implements ArrayAccess, SeekableIterator, Countable
    {
        
        /**
        * Contiendra les données
        * @var array
        */
        
        private $_data = array();
        
        
        /**
        * Valeur de remplacement pour les symboles '$' ou false pour ne rien modifier.
        */
        
        const REPLACEMENT_OF_DOLLAR_SIGN = 'value';
        
        
        /**
        * Décoder une variable depuis l'UTF8.
        * 
        * @param mixed $var Seules les chaînes sont décodées, mais aucune erreur ne sera provoquée si ce n'en est pas une.
        * @param mixed $tab=false Si ce paramètre vaut true alors le tableau sera parcouru de manière récursive et toutes les chaînes de caractèrezs seront converties.
        * @return array|string Le tableau|la chaîne décodé(e)
        */
        
        public static function utf8_decode( $var, $tab = false )
        {
            if (ALLO_UTF8_DECODE)
            {
                if (is_string($var)) return utf8_decode(str_replace('â¤&#8482;', "'", $var));
                elseif (!is_array($var) || !$tab) return $var;
                else
                {
                    $return = array();
                    foreach ($var as $i => $cell)
                        $return[utf8_decode($i)] = self::utf8_decode($cell, true);
                    return $return;
                }
            }
            else
                return $var;
        }
        
        
        /**
        * Constructeur
        */
        
        public function __construct( $data )
        {
            $this->_data = (array) $data;
        }
        
        
        /**
        * Retourne un pointeur sur une valeur existante dans les données enregistrées, ou null si elle n'existe pas.
        * 
        * @param $offset=null Retourne un pointeur sur tout le tableau si $offset==null
        * @return Une référence vers la valeur demandée, ou null si elle n'existe pas.
        */
        
        protected function &_getProperty( $offset = null, $ignoreException = false )
        {
            $data = &$this->_data;
            
            if ( $offset === null )
                return $data;
            
            else
            {
                if (isset( $data[$offset] ))
                    return $data[$offset];
                
                
                elseif ( $offset == self::REPLACEMENT_OF_DOLLAR_SIGN && isset($data['$']) )
                    return $data['$'];
                
                else
                    if (!$ignoreException)
                        AlloHelper::error("This offset ($offset) does not exist.", 6);
            }
        }
        
        /**
        * Retourne les données sous forme d'un array
        * 
        */
        
        public function getArray()
        {
            return (array) self::utf8_decode($this->_getProperty(), true);
        }
        
        
        /**
        * Si l'on essaie d'accéder à une propriété inexistante (donc un élément de $this->_data)
        * 
        */
        
        public function __get( $offset )
        {
            $data = $this->_getProperty($offset);
            if (is_array($data))
                return new AlloData( $data );
            else return self::utf8_decode($data);
        }
        
        
        /**
        * Impossible de créer/modifier une propriété
        * 
        */
        
        public function __set( $offset, $value )
        {
            $data = &$this->_getProperty($offset);
            $data = $value;
        }
        
        
        /*
        * Implémentation des interfaces
        */
        
        /**
        * Pointeur interne
        * @var int
        */
        
        private $_position = 0;
        
        /**
        * Retourne la valeur de l'index courant.
        */
        
        public function current( )
        {
            $data = $this->_getProperty($this->_position);
            if (is_array($data))
                return new AlloData( $data );
            else return self::utf8_decode($data);
        }
        
        /**
        * Retourne true ou false selon l'existence ou non d'une occurence dans les données.
        */
        
        public function valid( )
        {
            return ($this->_getProperty($this->_position, true) !== null);
        }
        
        /**
        * Retourne la position actuelle.
        */
        
        public function key( )
        {
            return $this->_position;
        }
        
        /**
        * Incrémente l'index.
        */
        
        public function next( )
        {
            $this->_position++;
        }
        
        
        /**
        * Réinitialise l'index.
        */
        
        public function rewind( )
        {
            $this->_position = 0;
        }
        
        
        /**
        * Pour modifier directement la position dans le tableau.
        */
        
        public function seek( $newPosition )
        {
            $lastPosition = $this->_position;
            $this->_position = $newPosition;
            
            if (!$this->valid())
            {
                AlloHelper::error("This offset ($offset) does not exist.", 6);
                $this->position = $anciennePosition;
            }
        }
        
        
        /**
        * Retourne le nombre d'occurences dans le tableau.
        */
        
        public function count()
        {
            return count($this->_data);
        }
        
        /**
        * Si l'on essaie d'accéder à l'objet comme à un tableau.
        */
        
        public function offsetGet( $offset )
        {
            $data = $this->_getProperty($offset);
            if (is_array($data))
                return new AlloData( $data );
            else return self::utf8_decode($data);
        }
        
        
        /**
        * Si l'on veut de créer/modifier une propriété (interface ArrayAccess)
        */
        
        public function offsetSet( $offset, $value )
        {
            $data = &$this->_getProperty($offset);
            $data = $value;
        }
        
        
        /**
        * Lors de la vérification de l'existence d'une propriété avec isset (interface ArrayAccess)
        */
        
        public function offsetExists( $offset )
        {
            return ($this->_getProperty($this->_position, true) !== null);
        }
        
        
        /**
        * Il n'est pas possible de détruire une la variable référencée, seule la référence est détruite...
        * De toute façon ça n'a pas d'utilité.
        */
        
        public function offsetUnset($offset)
        {
            return;
        }
        
        
        /**
        * Coller toutes les valeurs/sous-valeurs du tableau associatif.
        * Exemple : $film->genre->implode( 'value' ) implosera toutes les valeurs de $film->genre[i]->value
        * 
        * @param string $separator=', '         Le séparateur des valeurs.
        * @param string $lastSeparator=' et '   Le séparateur des dernière et l'avant-dernière valeurs.
        * @param string $offset='value'         Les offsets à concaténer ('$' == 'value').
        */
        
        public function implode( $separator = ', ', $lastSeparator = ' et ', $offset = 'value' )
        {
            $tab = (array) $this->_getProperty();
            
            if ( count($tab) === 1 )
            {
                $data = new AlloData($tab[0]);
                if ( isset($data[$offset]) && is_string($data[$offset]) )
                    return $data[$offset];
            }
            
            elseif ( count($tab) < 1 )   return '';
            
            $values = array();
            
            foreach ( $tab as $i => $stab )
            {
                $data = new AlloData( $stab );
                if ( isset($data[$offset]) && is_string($data[$offset]) )
                    $values[] = $data[$offset];
            }
            
            $last = array_slice($values, -1, 1);
            
            if ( $values )
                return implode( (string) $separator, array_slice( $values, 0, -1 ) ) . (( count($values) > 1 ) ? (string) $lastSeparator . $last[0] : '' );
            else
                return '';
        }
        
    }
    
    
    /**
    * Manipuler facilement les URLs des images.
    * 
    */
    
    class AlloImage
    {
        
        /**
        * Répertoire de l'image par défaut
        * @const string
        */
        
        const DEFAULT_IMAGE_PATH = "commons/emptymedia/AffichetteAllocine.gif";
        
        
        /**
        * Liste des icônes diponibles
        * @var array
        */
        
        public static $icons = array(
            'play.png' => null,
            'overplay.png' => null,
            'overlayVod120.png' => array('r', 120, 160),
        );
        
        
        /**
        * Contient les paramètres de l'icône.
        * @var array|false
        */
        
        private $imageIcon = false;
        
        
        /**
        * Contient les paramètres de la bordure
        * @var array|false
        */
        
        private $imageBorder = false;
        
        
        /**
        * Contient les paramètres de la taille de l'image.
        * @var array|false
        */
        
        private $imageSize = false;
        
        
        /**
        * Contient l'adresse du serveur de l'image.
        * @var string
        */
        
        private $imageHost;
        
        
        /**
        * Contient le répertoire de l'image sur Allociné.
        * @var string
        */
        
        private $imagePath;
        
        
        /**
        * Image par défaut
        * 
        * @return this
        */
        
        public function reset( )
        {
            $this->destroyBorder();
            $this->destroyIcon();
            $this->maxSize();
            
            return $this;
        }
        
        /**
        * Modifier l'icône sur l'image.
        * 
        * @param string $position='c' La position de l'icône par rapport au centre de l'image (en une ou deux lettres), d'après la rose des sable. Renseigner une position invalide (telle que 'c') pour centrer l'icône.
        * @param int $margin=4 Le nombre de pixel entre l'icône et le(s) bord(s) le(s) plus proche(s).
        * @param string $icon='play.png' Le nom de l'icône à ajouter. La liste des icônes se trouve dans AlloImage::$icons.
        * @return this
        */
        
        public function icon( $position='c', $margin=4, $icon='play.png' )
        {
            if (!empty($this->icons[$icon]))
            {
                $p = $this->icons[$icon];
                
                switch ($p[0])
                {
                    case 'r': $this->resize($p[1], $p[2]); break;
                    case 'c': $this->cut($p[1], $p[2]); break;
                }
            }
            
            $this->imageIcon = array(
                'position' => substr($position, 0, 2),
                'margin' => (int) $margin,
                'icon' => (string) $icon
            );
            
            return $this;
        }
        
        
        /**
        * Renvoie les paramètres enregistrés pour l'icône.
        * 
        * @return array|false
        */
        
        public function getIcon()
        {
            return $this->imageIcon;
        }
        
        
        /**
        * Efface les paramètres enregistrés pour l'icône.
        * 
        * @return this
        */
        
        public function destroyIcon()
        {
            $this->imageIcon = false;
            return $this;
        }
        
        
        /**
        * Modifier la bordure de l'image.
        * 
        * @param int $size=1 L'épaisseur de la bordure en pixels.
        * @param string $color='000000' La couleur de la bordure en hexadécimal (sans # initial). [http://en.wikipedia.org/wiki/Web_colors#Hex_triplet]
        * @return this
        */
        
        public function border( $size=1, $color="000000" )
        {
            $this->imageBorder = array(
                'size' => (int) $size,
                'color' => (string) $color
            );
            
            return $this;
        }
        
        
        /**
        * Renvoie les paramètres enregistrés de la bordure.
        * 
        * @return array|false
        */
        
        public function getBorder()
        {
            return $this->imageBorder;
        }
        
        
        /**
        * Efface la bordure.
        * 
        * @return this
        */
        
        public function destroyBorder()
        {
            $this->imageBorder = false;
            return $this;
        }
        
        
        /**
        * Modifier proportionnellement la taille de l'image au plus petit.
        * Si les deux paramètres sont laissés tels quels ($xmax='x' et $ymax='y'), l'image sera de taille normale.
        * Appeler cette fonction efface les paramètres enregistrés pour AlloImage::cut() (Les deux méthodes ne peuvent être utilisées en même temps).
        * 
        * @param int $xmax='x' La largeur maximale de l'image, en pixels. Laisser 'x' pour une largeur automatique en fonction de $ymax.
        * @param int $ymax='y' La hauteur maximale de l'image, en pixels. Laisser 'y' pour une hauteur automatique en fonction de $xmax.
        * @return this
        */
        
        public function resize( $xmax='x', $ymax='y' )
        {
            $this->imageSize = array(
                'method' => 'r',
                'xmax' => $xmax,
                'ymax' => $ymax
            );
            
            return $this;
        }
        
        
        /**
        * Redimensionner l'image au plus petit, puis couper les bords trop grands.
        * Appeler cette fonction efface les paramètres enregistrés pour AlloImage::resize() (Les deux méthodes ne peuvent être utilisées en même temps).
        * 
        * @param int $xmax La largeur maximale de l'image, en pixels.
        * @param int $ymax La hauteur maximale de l'image, en pixels.
        * @return this
        */
        
        public function cut( $xmax, $ymax )
        {
            $this->imageSize = array(
                'method' => 'c',
                'xmax' => (int) $xmax,
                'ymax' => (int) $ymax
            );
            
            return $this;
        }
        
        
        /**
        * Retourne les paramètres enregistrés du redimensionnement/recoupe de l'image.
        * 
        * @return array|false
        */
        
        public function getSize()
        {
            return $this->imageSize;
        }
        
        
        /**
        * Règle l'image à sa taille maximale (Effacer redimensionnement/recoupe)
        * 
        * @return array|false
        */
        
        public function maxSize()
        {
            $this->imageSize = false;
            return $this;
        }
        
        
        /**
        * Retourne le host de l'image.
        * 
        * @return string
        */
        
        public function getImageHost()
        {
            return $this->imageHost;
        }
        
        
        /**
        * Modifier le serveur (host) de l'image.
        * 
        * @param string $server L'adresse sans slash du serveur (ex: 'images.allocine.fr'), le même paramètre que pour AlloHelper::lang(), ou 'default' pour régler selon le langage enregistré.
        * @return this
        */
        
        public function setImageHost( $server )
        {
            switch ($server)
            {
                case 'default':
                case 'de': case 'filmstarts.de':
                case 'es': case 'sensacine.com':
                case 'fr': case 'allocine.fr':
                case 'en': case 'screenrush.co.uk':
                    $this->imageHost = self::$imagesUrl;
                break;
                
                default:
                    $this->imageHost = $server;
            }
            
            return $this;
        }
        
        
        /**
        * Créer une nouvelle image grâce à son URL.
        * Si l'url est invalide, l'image utilisée sera celle par défaut.
        * 
        * @param string $url=null L'URL de l'image.
        */
        
        public function __construct( $url = null )
        {
            if ( empty($url) || !filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED) )
            {
                $this->imageHost = AlloHelper::$imagesUrl;
                $this->imagePath = self::DEFAULT_IMAGE_PATH;
                
            }
            else
            {
                $urlParse = parse_url($url);
                
                $this->imageHost = !empty($urlParse['host']) ? $urlParse['host'] : AlloHelper::$imagesUrl;
                
                if (!empty($urlParse['path']))
                    $this->imagePath = $urlParse['path'];
                else
                    AlloHelper::error("This isn't a URL to an image.", 7);
                
                // Parsage de l'URL
                $explodePath = explode('/', $this->imagePath);
                
                // Première partie vide ?
                if (empty($explodePath[0]))
                    unset($explodePath[0]);
                
                // Détecte les paramètres jusqu'au début du path réel.
                foreach ($explodePath as $iPathPart => $pathPart)
                {
                    if (strpos($pathPart, '_') === false)
                        break;
                    else
                        unset($explodePath[$iPathPart]);
                    
                    // Icône
                    if (strpos($pathPart, 'o') === 0 && preg_match("#^o_(.+)_(.+)_(.+)$#i", $pathPart, $i) != false)
                    {
                        $this->icon($i[3], $i[2], $i[1]);
                    }
                    
                    // Bordure
                    elseif (strpos($pathPart, 'b') === 0 && preg_match("#^b[xy]?_([0-9]+)_([0-9a-f]{6}|.*)$#i", $pathPart, $i) != false)
                    {
                        if (preg_match("#^[0-9a-f]{6}$#i", $i[2]) == false)
                            $i[2] = "000000";
                        
                        $this->border($i[1], $i[2]);
                    }
                    
                    // Redimensionnement
                    elseif (preg_match("#^r[xy]?_([0-9]+|[a-z0-9]+)_([0-9]+|[a-z0-9]+)$#i", $pathPart, $i) != false)
                    {
                        $this->resize((int) $i[1], (int) $i[2]);
                    }
                    
                    // Recoupe
                    elseif (preg_match("#^c[xy]?_([0-9]+|[a-z0-9]+)_([0-9]+|[a-z0-9]+)$#i", $pathPart, $i) != false)
                    {
                        $this->cut((int) $i[1], (int) $i[2]);
                    }
                }
                
                $this->imagePath = implode('/', $explodePath);
            }
        }
        
        
        /**
        * Construit l'URL à partir des paramètres enregistrés.
        * 
        * @return string
        */
        
        public function url()
        {
            $params = array();
            
            // Taille
            if ( $this->imageSize !== false )
                $params[] = "{$this->imageSize['method']}_{$this->imageSize['xmax']}_{$this->imageSize['ymax']}";
            
            // Bordure
            if ( $this->imageBorder !== false )
                $params[] = "b_{$this->imageBorder['size']}_{$this->imageBorder['color']}";
            
            // Icône
            if ( $this->imageIcon !== false )
                $params[] = "o_{$this->imageIcon['icon']}_{$this->imageIcon['margin']}_{$this->imageIcon['position']}";
            
            return "http://{$this->imageHost}" . (!empty($params) ? '/' . implode('/', $params) : '') . "/{$this->imagePath}";
        }
        
        
        /**
        * Alias de AlloImage::url()
        * 
        * @return string
        */
        
        public function __toString()
        {
            return $this->url();
        }
        
    }



 Historique

05 septembre 2010 12:54:15 :
Ajout d'informations
07 septembre 2010 15:18:24 :
Passage à la V2.0: -> Ajout du système de News
07 septembre 2010 15:23:17 :
Correction d'une erreur dans "lisez-moi.html"
04 octobre 2010 01:23:28 :
Passage à la V3.0
05 octobre 2010 00:59:04 :
Passage à la V3.1
05 octobre 2010 21:17:21 :
Changement d'icône
05 octobre 2010 21:19:36 :
Changement d'icône
06 octobre 2010 01:26:11 :
Passage à la V3.2
06 octobre 2010 19:10:59 :
Passage à la V3.3
06 octobre 2010 19:17:54 :
Changement d'image
08 octobre 2010 18:35:21 :
Correction d'une erreur
13 octobre 2010 11:45:45 :
Passage à la V3.3.3
14 octobre 2010 13:27:12 :
Passage à la V3.3.4
16 octobre 2010 17:23:33 :
Passage V3.4.1
16 octobre 2010 19:49:32 :
Passage sous licence Creative Commons CC-by
17 octobre 2010 18:37:15 :
Passage à la V3.5.0
17 octobre 2010 19:17:06 :
Documentation abrégée dans le .zip Une version plus complète sera bientôt disponible
19 octobre 2010 09:07:05 :
Correction d'une erreur
19 octobre 2010 18:24:18 :
Passage à la V3.5.1
19 octobre 2010 18:25:22 :
Correction d'une erreur
26 octobre 2010 20:47:41 :
Passage à la V3.5.2
26 octobre 2010 21:19:38 :
Passage à la V3.5.3
26 octobre 2010 21:22:42 :
Correction d'une erreur
27 octobre 2010 19:33:13 :
Passage à la V3.5.4
28 octobre 2010 15:10:12 :
Passage à la V3.6.0
28 octobre 2010 17:15:57 :
Passage à la V3.6.1
14 novembre 2010 14:46:49 :
Passage à la V3.6.2
19 décembre 2010 19:00:12 :
Passage à la V3.6.2
06 février 2011 15:52:59 :
MàJ VERSION 4
20 mars 2011 12:21:08 :
Passage V5
28 mars 2012 23:58:21 :
Mise à jour.

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MOTEUR DE RECHERCHE YOUTUBE API par mtrix000

Commentaires et avis

Commentaire de daquad le 06/09/2010 09:54:43 7/10

Bonjour,
Cette source est sympa, elle est aussi très rapide pour aller chercher les infos.

Par contre il serait bien de peut être développer une page supplémentaire qui ferait office de moteur de recherche.
Car sur certains sites, ce genre d'infos se doivent d'être automatique. Et demander à chaque fois de donner l'id de la fiche ça peut être quelque peut embêtant.

Au sinon c'est assez bien.

Commentaire de LeFauve42 le 06/09/2010 11:27:41

Bonjour,

Ca a l'air pas mal, mais pourrais tu nous preciser les conditions d'utilisation de ce service ?

Eric

Commentaire de Etn3000 le 06/09/2010 14:07:18

Daquad >> la version 2.0 que je mettrai bientôt à disposition comportera le même système que pour les films mais avec les News, et la V3.0 aura des fonctions de recherche de films et de news.

Eric >> Il n'y a pas de conditions d'utilisation, mis à part que vous pouvez me dire si vous l'utilisez sur votre site, ça me fera plaisir de le savoir :D

Commentaire de LeFauve42 le 06/09/2010 17:53:36

Je parlais des conditions d'utilisation du service Allo-Cine :o)

Ca m'etonnerait qu'ils autorise n'importe qui a faire une site web qui va faire 100000 requetes par jour sur leur base, et il faut probablement leur donner des credits.

Commentaire de daquad le 06/09/2010 17:55:52

Ce ne sont en cas des requêtes sur leur base.
Ce sont tout simplement du curl comme si un visiteur visité Allociné !

Commentaire de LeFauve42 le 06/09/2010 18:14:24

DAQUAD: Ce sont des requetes sur leur base (d'ou penses-tu que viennent les informations retournees ?). Le fait que tu puisses te faire passer pour un visiteur du site ne rend pas la pratique legale pour autant.

Vu l'url qui renvoie le xml, je pense qu'il s'agit effectivement d'une api ouverte creee par Allocine.fr, mais il y a surement des conditions contractuelles pour pouvoir l'utiliser (comme toutes les apis (google search, google map, ...)).

Commentaire de Tamplan le 06/09/2010 18:27:18

Bonjour,

On en parle ici aussi http://wiki.gromez.fr/dev/api/allocine

Commentaire de webdeb le 15/09/2010 09:13:53 6/10

Il aurait été judicieux de namespacer tes classes car une classe News ou Movie c'est trop générique. Si je développe une application qui contient déjà une classe News, il y aura conflit. Tu as trois possibilités pour éviter ça :

  * Tu préfixes tes classes par AlloCine par exemple (AlloCineMovie, AlloCineNews...)
  * Tu utilises la nomenclature PEAR / Zend et tu fournis l'autoloader qui va bien (AlloCine/News.php == classe AlloCine_News)
  * Tu utilises PHP 5.3 et les namespaces :

<?php

namespace AlloCine;

class News {

}

?>

Et quand tu l'instancies tu fais :

<?php

$news = new AlloCine\News();

?>

Ou alors:

<?php

use AlloCine\News;

$news = new News();

?>

Comme ça, si j'ai deux classes News dans mon projet, je peux les utiliser sans conflit de cette manière:

<?php

use MyApp\News as News;
use AlloCine\News as AlloCineNews;

$news = new News();
$allocine = new AlloCineNews();

?>

Hugo.

Commentaire de Etn3000 le 15/09/2010 10:04:36

Tu as raison je n'y avais pas pensé... je vais renommer les deux classes en AllocineMovie et AllocineNews, ce sera plus simple.

Merci :)

Commentaire de Etn3000 le 05/10/2010 21:28:33

Pour la V3.0 j'ai tout changé en utilisant uniquement des fonctions, pas la POO.
Je pense que c'est mieux ainsi, l'utilisation des objets n'avait pas grand intérêt ici.

Commentaire de glumbob le 08/10/2010 16:09:04

Bonjour,
bravo pour ce travail d api, mais j ai une erreur au niveau de la récupération des noms de réalisateurs :

Voici mon code :
include_once('API_Allocine.php');
$film = getMovieById("nomdufilm");
if ($film) {
foreach( $film['réalisateur'] as $i => $r) {
echo "Réalisateur: ".$r['nom']."<br />";
}else echo "Erreur !";

Il me retourne une erreur :
Warning: usort() expects parameter 1 to be array, null given in ...API_Allocine.php on line 113
et
Warning: Invalid argument supplied for foreach() in ..monscript.php on line 4

Je pense que ca viens de variable "réalisateur" avec un pb d encodage utf8 mais je bloque un peux as tu tester avec la version 3.3 ?
Merci

Commentaire de Etn3000 le 08/10/2010 18:33:09

L'erreur est corrigée (normalement) c'était bien un problème d'encodage.
Merci de me l'avoir signalée :)

Commentaire de lkaiman le 09/10/2010 12:31:39

salut, tu pourrai mettre en variable globale le lien API
s'il change (on sait jamais), ce serai plus simple de le changer ;)

Commentaire de Etn3000 le 10/10/2010 20:11:00

Salut,
Que veux tu dire par "le lien API" ?

Commentaire de lkaiman le 10/10/2010 21:54:54

ben ce lien là:
"http://api.allocine.fr/xml/"

Commentaire de glumbob le 11/10/2010 10:12:45

Bonjour,
merci ca marche nickel !
Super script Bravo !

Commentaire de Etn3000 le 12/10/2010 14:38:27

glumbob >> Merci !
lkaiman >> Je vais faire ça mais je doute qu'il change

Commentaire de glumbob le 13/10/2010 11:08:37

Bonjour,
un ptit ajout qui me manqué si ca vous intéresse :
la durée du film en 00h00 :
dans la fonction getMovieById j ai ajoute :

    // Duree du film
    if (isset($tab2['runtime'])){
    $temp = $tab2['runtime'];
    $Minutes = $temp / 60;
    $lHeure = floor( $Minutes / 60 );
    $lesMinutes = $Minutes % 60;
    $duree =  $lHeure."h".$lesMinutes;
    $tab3['duree'] = $duree;
    }

Bye

Commentaire de Etn3000 le 13/10/2010 11:17:12

Merrrci ! :D
Je cherchais ce que signifiais runtime, et je n'avais même pas pensé que ça pouvait être la durée du film !
Je rajoute cette fonctionnalité dès que possible, et vraiment encore merci :)

Commentaire de Etn3000 le 13/10/2010 11:49:04

C'est fait, mais je l'ai modifié, on la retrouve sous cette forme:
$film['durée']['heures']
$film['durée']['minutes'] // En plus des heures
$film['durée']['totalMinutes'] // Nombre total de minutes

Commentaire de jdalton42 le 15/10/2010 10:41:34

salut
très bonne source, je suis en train d'adapter ma petite vidéothèque que j'ai réalisé pour qu'elle fonctionne avec ton script. mais j'ai un petit problème au niveau de la fonction getmoviebyid, en essayant de récupérer le réalisateur j'ai cette erreur:

Notice: Undefined index: réalisateur in allocine.php on line 71

Warning: Invalid argument supplied for foreach() in allocine.php on line 71

je ne vois pas d'où cela provient ni comment régler le problème.
quelqu'un pourrait m'éclairer ?

merci

Commentaire de jdalton42 le 15/10/2010 10:45:32

petit truc aussi, ['totalMinutes'] renvoie un totale en secondes, pas en minutes ;)

Commentaire de jdalton42 le 15/10/2010 10:53:52

je précise que ma recherche qui a buggé pour le réalisateur, c'était le film Démineurs.

Commentaire de glumbob le 15/10/2010 11:11:38

Salut,
j ai effectivement le même pb, cela viens du fait que le champ est vide, pas de réalisateur trouvé, mais cela le fait pour d autre champ comme les notes, je travail dessus pour trouver une solution je vous tiens au courant.

Commentaire de jdalton42 le 15/10/2010 11:13:39

ah bon ... pourtant sur le site allocine.fr, pour le film démineurs sur lequel j'ai eu l'erreur, il y a le réalisateur ! ...

Commentaire de glumbob le 15/10/2010 11:39:23

C bon, corrigé !
en faite cela viens que c une réalisatrice ^^ donc :

après ligne 112  =>  if ($act == "actrice") $act = "acteur";
Ajouter la ligne =>  if ($act == "réalisatrice") $act = "réalisateur";

Et voila +

Commentaire de jdalton42 le 15/10/2010 11:42:52

Effectivement, sa fonctionne maintenant :) merci

Commentaire de Etn3000 le 16/10/2010 17:15:55

Je corrige ça dans le fichier, merci de vous en être occupé (avant moi :p)

Commentaire de Hellmer le 24/10/2010 19:59:58 9/10

Très bien!
Malheureusement, si une des données relatives aux notes n'est pas renseignée on a une erreur, il faut peut être gérer ca de la manière suivante :

dans la fonction function getMovieById($id=0)

if (isset($tab2['statistics']))
{
$tab3['statistiques']['notePresse'] = (isset($tab2['statistics']['pressRating']) ? utf8_decode($tab2['statistics']['pressRating']) : "" );
$tab3['statistiques']['avisPresse'] = (isset($tab2['statistics']['pressReviewCount']) ? utf8_decode($tab2['statistics']['pressReviewCount']) : "" );
$tab3['statistiques']['notePublic'] = (isset($tab2['statistics']['userRating']) ? utf8_decode($tab2['statistics']['userRating']) : "" );
$tab3['statistiques']['avisPublic'] = (isset($tab2['statistics']['userReviewCount']) ? utf8_decode($tab2['statistics']['userReviewCount']) : "" );
$tab3['statistiques']['votesPublic'] = (isset($tab2['statistics']['userNoteCount']) ? utf8_decode($tab2['statistics']['userNoteCount']) : "" );
}

De la même manière suite à une erreur lors de l'appel successif de cette fonction j'ai extrait les fonctions minuscules et _tri_

J'ai aussi envisagé une fonction qui met à plat la liste des réalisateurs/acteurs :
function transformArrayToList($personnes)
{
$resultat = "";
foreach ($personnes as $personne)
{
$resultat .= $personne["nom"] . ", ";
}
$resultat = substr($resultat, 0, strlen($resultat) - 2);
return $resultat;
}

en l'utilisant avec echo transformArrayToList($data["réalisateur"]) $data étant le résultat de la fonction getMovieById

Preneur de toutes autres bonnes idées
Merci Etn3000 pour ton super boulot.
Pour moi ca vaut bien un 9/10

Commentaire de leomat le 25/10/2010 01:14:44 9/10

Vraiment ravi de ce code. J'étais justement en train de développer une petite application pour gérer ma vidéothèque, et mon principal souci était la récup' des infos des films.
Je te remercie, et je n'hésiterai pas à poster des retours d'utilisation!

Commentaire de Etn3000 le 26/10/2010 19:37:17

Merci à vous Hellmer et Leomat ça me fait plaisir de lire des commentaires comme ça.
Hellmer >>> Je vais voir ça pour la gestion des erreurs des votes (copier-coller de ton code, et je te remercie ;)
Et la fonction transformArrayToList que tu as fait elle est inutile car elle existe déjà: c'est implode() http://www.php.net/manual/fr/function.implode.php (contraire de explode, logique)
Je me suis déjà moi aussi fait avoir à faire une fonction équivalente avant de voir qu'elle existait déjà :)
Merci à toi.

Commentaire de tutur1994 le 26/10/2010 23:38:21 10/10

Merci pour ce code exceptionnelle mais dans l'exemple donné avec l'API il ne marque pas le réalisateur ainsi que les acteurs alors que sur la fiche allociné ils y sont

Commentaire de Etn3000 le 27/10/2010 19:04:35

Euuuh oui j'ai même pas vérifié ! La honte !
Je traque ce bug immonde et je planterai sa tête sur un piquet !
(Et dans la foulée je corrige l'exemple ^^)

Commentaire de Etn3000 le 27/10/2010 19:33:50

Correction effectuée :)

Commentaire de tutur1994 le 28/10/2010 17:06:51

Le développement va super vite

J'ai vu que vous aviez ajouter les séries TV
mais que la liste des épisodes n'est pas géré
pourriez vous les ajouter s'il vous plais
enfin si c'est possible je n'est pas vraiment regarder de quoi était capable leur API
Merci

Commentaire de Etn3000 le 28/10/2010 17:09:30

Non désolé ce n'est pas possible (pour l'instant)

Commentaire de Hellmer le 28/10/2010 17:43:27

TheTVDB.com met à disposition une interface permettant de récupérer les infos relatives aux séries TV (cf : http://www.thetvdb.com/wiki/index.php/Programmers_API )

Commentaire de tutur1994 le 28/10/2010 18:10:50

j'ai un petit problème concernant la fonction searchMoviesByKeywords

comment fait-t-on pour récupéré le titre des 10 résultat car $variable_de_la_recherche['titre']

Commentaire de Etn3000 le 28/10/2010 19:15:28

Salut,
Chaque résultat est enregistré dans ta variable de cette façon:
$variable_de_la_recherche[$numéro_du_résultat]['titre']

Par exemple pour afficher le titre de tous les résultats je te conseille de faire:
<?php
// Boucle pour parcourir le tableau
foreach ($variable_de_la_recherche as $numéro_du_résultat => $film)
{
// Affichage du titre pour chaque résultat
echo "<strong>Résultat n°" . $numéro_du_résultat . ": " . $film['titre'] .'</strong><br />';
}
?>

Si tu n'as pas compris regarde l'architecture de tout ton tableau de cette manière:

<pre><?php print_r($variable_de_la_recherche); ?></pre>

C'est ok ?

Commentaire de tutur1994 le 28/10/2010 21:45:18

okay c'est bon j'ai compris

Commentaire de rivaldovitor le 29/10/2010 16:46:34

Salut,

Est-il possible de récupérer tous les films ou tous les acteurs en fonction du critère de recherche? J'arrive à récupérer 100 films (en ajoutant &count=100 à la requête) ou 35 acteurs/actrices mais pas plus.

Merci d'avance pour votre aide

Commentaire de Etn3000 le 29/10/2010 17:26:52

Je regarde ça dès que possible.
Je vais ajouter une option pour modifier le nombre de résultats (maximum) retournés, ... mais avant je ne m'y étais pas spécialement intéressé.
Ce sera pour la V3.6.2

Commentaire de rivaldovitor le 29/10/2010 17:31:19

OK Merci.

Très bon travail en tout cas.

Commentaire de Hellmer le 30/10/2010 13:08:05

Salut Etn3000,

Je pense que tu peux aussi rajouter un paramètre au niveau de l'appel de la fonction :

function getMovieById($id=0, $profile="medium")
{
$url = 'http://api.allocine.fr/xml/movie?code='.$id.'&partner=1&json=1&profile='.$profile;

sachant que $profile peut prendre les valeurs : small, medium, large

Commentaire de Hellmer le 30/10/2010 13:19:27

Je crois qu'il y a une petite erreur aux lignes  169 et 170 où tu utilises $glue

$tab3[$AAm['acteurs_str']] = implode($glue, $tab3['acteur']);
$tab3[$AAm['réalisateurs_str']] = implode($glue, $tab3['réalisateur']);

Pourtant dans la méthode getMovieById($id=0) il n'y a pas de paramètre $glue comme dans les autres

Commentaire de Hellmer le 30/10/2010 13:33:09

J'aurais du réfléchir avant d'écrire... Une autre modification à apporter à mon avis toujours aux lignes 169 et 170:

$tab3[$AAm['acteurs_str']] = (isset($tab3['acteur']) ? implode($glue, $tab3['acteur']) : "");
$tab3[$AAm['réalisateurs_str']] = (isset($tab3['réalisateur']) ? implode($glue, $tab3['réalisateur']) : "");

En effet, si il n'y a pas d'acteurs ou de réalisateur défini une erreur est affichée

Commentaire de tutur1994 le 30/10/2010 13:55:52

Pour retiré l'erreur il faut rajouté $glue a la fonction

function getMovieById($id=0, $glue=', ')

Commentaire de Etn3000 le 03/11/2010 11:47:18

Normalement si $glue n'est pas précisé il prend automatiquement la valeur ', '
Je regarde tout ça dès que possible

Commentaire de Etn3000 le 14/11/2010 14:41:33

Erreur corrigée, je met la source à jour

Commentaire de antoinevischurel le 18/11/2010 17:29:27

Bonjour,

Je travaille également avec l'api allocine et j'ai quelques problèmes avec la date de sortie du film.

Prenons l'exemple de la fiche film n° 2818 : http://www.allocine.fr/film/fichefilm_gen_cfilm=2818.html

On observe une fois sur la page que la date de sortie cinéma est 21/05/1980 et que la date de reprise cinéma est 22/12/2010

Pourtant en utilisant l'api : http://api.allocine.fr/xml/movie?code=2818&partner=1&profile=large

J'obtiens releaseDate = 2010-12-22 (qui est à priori erroné) et reissueDate = 2010-12-22

Comment faire pour récupérer la bonne date de sortie cinéma ?

Et puis tant qu'on y est comment faire pour récupérer les date de sortie en DVD et en BLURAY ?

Merci et bonne prog à tous !

Antoine

Commentaire de Etn3000 le 20/11/2010 11:41:56

Salut,
Là je ne sais pas trop quoi répondre car je ne suis pas intéressé à l'exactitude des informations reçues.
Ce sont celles utilisées par Allociné, donc je ne comprend pas pourquoi tu obtiens deux résultats différents.
Et je ne sais pas récupérer les dates de sortie DVD et Blue-Ray, mais peut-être en faisant un profile=large

Commentaire de Tamplan le 25/12/2010 13:29:19

Beau travail, il y a plein de nouvelles fonctions depuis les précédentes versions !

Cependant, une classe aurait certainement plus pratique contrairement à ce que tu as indiqué plus haut.

En effet, quelqu'un te suggère de mettre des choses en variables globales, zou une propriété de la classe à définir et/ou modifier.

L'utilisation d'une classe est à mon avis préférable pour regrouper tout le code et permet de travailler avec la classe dans un projet POO ou pas.

A noter cette petite astuce à utiliser dans la fonction getMovieById par exemple :

// Récupération du JSON

$json = file_get_contents($url);



// Correction du json

$json = str_replace('"$"', '"value"', $json);

Aprés, un simple print_r(json_decode($json)); devrait te permettre de voir l'intérêt de cette petite modification... ;-)

Commentaire de Etn3000 le 05/01/2011 18:30:49

Merci à toi, je vais voir si je pourrais transformer le tout en classe, et merci pour ton astuce du "str_replace" :)

Commentaire de Badman1 le 09/01/2011 10:54:16 10/10

Bonjour à tous,

Tous d'abord félicitation pour ce code qui est tout simplement génial et qui de mon point de vu est promis à un grand avenir.

Je suis novice en PHP est je bloque sur le tout début, à savoir la mise en place du moteur de recherche qui permet de renvoyer les résultats. Pour l'affichage de ceux-ci j'ai pu récupérer le code de Etn3000.

Merci de votre aide SVP

Commentaire de Etn3000 le 09/01/2011 15:03:14

Salut,
J'ai un peu de mal à comprendre ton problème.
Tu veux simplement afficher les résultats d'une recherche?

Commentaire de Badman1 le 12/01/2011 08:14:22

Non en faite je souhaite faire comme l'exemple de votre site. Le moteur de recherche qui renvoi vers les résultats puis vers la fiche. Sauf que je n'arrive pas à mettre en place le code... (Question de novice DSL). Dans les commentaires, je pense avoir trouvé le bout de code pour afficher les résultats (Votre commentaire du 28/10/2010 19:15:28), sur un autre site le code pour afficher la fiche mais je n'arrive pas à compiler le tout.
Merci de votre réactivité, c'est impressionnant ;-)

Commentaire de Vidda76 le 24/01/2011 12:03:53

Salut moi ca me donne ca (mi ton code dans les balises html )
Film de nationalité(s) ".$film['nationalités']."
Produit en ".$film['annéeProduction']." par ".$film['réalisateur']."
Avec ".$film['acteurs']."
Date de sortie: le ".$film['dateSortie']."
Genre(s): ".$film['genres']."
Durée: ".$film['durée']."
Synopsis:
".$film['synopsis']."

J'ai aucun resultat
Faut il installé quelque chose pour exploiter le php ?

Commentaire de lkaiman le 24/01/2011 19:20:45

pour les débutants il y a wampapache (recherche dans google)

une fois installé et démarré, tu utilise le code de notre cher ami dans le dossier c:/wamp/www

et tu ouvre la page depuis ton navigateur à l'adresse suivante http://localhost/

have fun

Commentaire de Etn3000 le 25/01/2011 10:05:24

lkaiman a bien raison.
Attention il faut au moins PHP5, le code ne fonctionnera pas sous PHP4
++

Commentaire de Vidda76 le 26/01/2011 10:48:52

Salut merci Lkaiman ca fonctionne sous http://localhost/ en renommant toutes mes pages en *.php
Il me semble que le javascript n'est pas reconnu
Faut il activé un module/service apache ou php dans wampserver?

Commentaire de Vidda76 le 26/01/2011 12:36:27

Salut merci Lkaiman ca fonctionne sous http://localhost/ en renommant toutes mes pages en *.php
Il me semble que le javascript n'est pas reconnu
Faut il activé un module/service apache ou php dans wampserver?
En fait je n'ai pas trop envie de passer par localhost(par le navigateur) puisque j'ai fait une application HTA et j'aimerai intégrer l'api allociné en php dedans

Commentaire de Etn3000 le 27/01/2011 10:05:46

Dans une application HTA?
Tu vas devoir utiliser de l'AJAX, si tu connais pas tu risques de galérer...
Mais même si tu y arrives tu devra utiliser http://localhost/

Commentaire de kennygthebest le 29/01/2011 12:42:28

Bonjour je fait un projet tutoré en informatique , j'essaye de parser allocine pour ma médiathèque.

J'ai copier le code source dans un fichier que j'ai renommé en index !

je l'ai transféré sur mon ftp mais la page et blanche , quelqu'un pourrai m'aider ?


mon site : http://kennygthebest001.free.fr/

merci

Commentaire de Etn3000 le 29/01/2011 13:22:25

Salut,
Si tu copie juste le code source dans une page, c'est normal que ça ne fasse rien.
Tu dois télécharger le fichier "API_Allocine.php" dans le dossier de "index.php", puis mettre le code de l'exemple ci-dessus dans ta page index.php.
Si tu n'as pour l'instant besoin que de récupérer les infos des films je te conseille de prendre la V4:
http://api-allocine.netne.net/?page_id=8

Commentaire de kennygthebest le 30/01/2011 14:27:24

excuse moi j'ai un peu de mal a comprendre , le code source ci dessus , c'est juste pour un exemple , je veux pourvoir quand je tape un film quelconque récupérer les info sur celui si !! ??

Commentaire de kennygthebest le 30/01/2011 14:33:53

http://kennygthebest001.free.fr/

nouveau probléme !! :s

Fatal error : Call to undefined function: json_decode () dans / mnt/140/sdb/b/9/kennygthebest001/API_Allocine.php à la ligne 599

Commentaire de Badman1 le 30/01/2011 14:58:46

Bonjour,
Il y a une chose que je ne comprend pas (ou plutôt que je n'arrive pas a faire), c'est la recherche des films avec la variable $film de la fonction getmovie. Dans l'exemple de la version 3 on entrait le nom dans film dans un champ de recherche puis on avait les résultats puis la fiche.
J'arrive à afficher la fiche de différents films mais en modifiant manuellement le nom du film dans le fichier exemple-getMovie-3.php (en gros une page un film...). Pouvez-vous m'expliquer comment mettre en place la recherche que propose la fonction getmovie.
Merci d'avance pour votre réponse
Bonne journée

Commentaire de Etn3000 le 30/01/2011 19:14:55

@kennygthebest : Si tu as cette erreur alors tu ne dois sans doute pas avoir PHP5... vérifie ta version de PHP.
L'API Allociné ne fonctionne pas avec PHP4!
"Fatal error : Call to undefined function: json_decode ()"

@Badman1 : la fonction getMovie fait partie de la V4, il n'y a pas pas encore de fonction pour faire une "vrai" recherche, (sauf dans la V3).
Je suis en train de développer la suite de la V4, afin retrouver les fonctions de la V3 (en mieux).
Le fichier exemple-getMovie-3.php n'est qu'une page de test!

Commentaire de ben00000 le 01/02/2011 12:31:53

Bonjour,

Bravo pour cette source, c'est très bien codé et bien expliqué. Par contre, J'utilise la version 3.6.3 et j'ai quelques soucis :
- Concernant le nom du réalisateur. La recherche (en l'occurrence celle de l'exemple mais pas que celle-ci) ne renvoie rien ou plutôt Array.
- Question personnelle : Comment faire pour avoir la liste des films en fonction des mots clés et ensuite choisir celui qu'on cherchait(avec son id par exemple) pour en tirer toutes les informations(comme avec getMovieByKeywords)?

Merci d'avance pour votre réponse.

Commentaire de ben00000 le 01/02/2011 17:32:50

Rebonjour,

En fait, en cherchant j'ai réussi à faire ce que je voulais en ce qui concerne mon deuxième problème.
Cependant, j'ai remarqué que la recherche par mot clés n'était pas pertinente quand il y a avait des chiffres dans le titre, comme "Terminator 2" par exemple mais je pense que ce problème vient de site d'allociné et non de la source. Donc il ne reste plus qu'à trouver d'où vient le vide à la place du réalisateur lors d'une recherche.

Commentaire de kennygthebest le 02/02/2011 17:44:01

Bonjour j'ai enfin réussi a le faire marche en local , cependant j'essaye de développer un index qui aurai une fonction recherche et qui changerai automatiquement le nom du film dans le script index,

( je rentre un titre , la des pages s'affiche et je choisis le bon film.


quelqun a une idée ?

cordialement

chatelain theophile

Commentaire de Etn3000 le 03/02/2011 16:45:06

Salut,
C'est simple (enfin, façon de parler ^^) utilise l'AJAX.
Tu fais une requête depuis ta page HTML (avec du JavaScript) vers une page PHP et tu récupères le résultat pour l'afficher, sans changer de page.
C'est difficile à expliquer en quelques lignes, alors une petite recherche sur le net t'aidera.

Commentaire de lkaiman le 03/02/2011 17:51:38

hey les gars!

C'est un outil qu'il nous a concocté, à vous de l'utiliser. Et si vous ne savez pas manier le php, et bien direction lesiteduzero.com

vous n'allez pas harceler le vendeur de leroy merlin aprés avoir acheté un tourne vis si vous n'arrivez pas à monter un meuble ikea !!!
la c'est pareil

C'est une classe qui renvoit des résultats, à vous de l'utiliser correctement pour faire votre gestion de vidéothéque.

Et vous êtes encore chanceux q'ETN3000 vous réponde encore

Have fun

Commentaire de leomat le 11/02/2011 23:31:21

+1 LKAIMAN

Sinon j'voulais te dire que c'est du bon boulot! J'utilise ton API depuis un bon bout de temps, et j'attends impatiemment la V4 finale.
La V3 ne fonctionne plus trop bien pour le moment (Lors de la récup des infos, il me met "Il est temps de mettre à jour votre application" comme titre du film :) )

Enfin, continue comme ça, c'est cool.

Commentaire de RBert le 14/03/2011 19:16:12

Merci pour code ETN, il est vraiment bien

Commentaire de RBert le 18/03/2011 12:32:38

une autre page exemple : exemple1.php

<?php

$film_dem = ( empty($_POST['film_dem']) )  ? '' : $_POST['film_dem'];

echo '
    <form method="post" action="">
        <p><input type="texte" name="film_dem" value="' . $film_dem . '" /><strong> <<< Titre du film.</strong></p>
    </form>
';

if ( $film_dem != '' ) {

    // Inclure le fichier de l'API
    include_once('API_Allocine.php');

    // Récupération des infos
    $film = getMovieByKeywordsSimple($film_dem, ', ');

echo var_dump($film);

    echo '
        <p>&nbsp;</p>
        <h2 align="center">' . $film['titre'] . '</h2>
        <table align="center">
            <tr>
                <td align="right"><strong>Film de nationalité(s)</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['nationalités'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Produit en</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['annéeProduction'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Et réalisé par</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' .$film['réalisateurs'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Avec</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['acteurs'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Date de sortie le</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['dateSortie'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Genre(s)</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['genres'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Durée</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['durée'] . '</td>
            </tr>
            <tr>
                <td align="right"><strong>Genre</strong></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>' . $film['genres'] . '</td>
            </tr>
            <br />
        </table>
        <p>
            <strong>Synopsis :</strong><br />
            ' . $film['synopsis'] . '<br />
            <br />
            <a href="' . $film['BA'] . '"><strong> >>> Voir la bande-annonce</strong></a><br />
        </p>
        <img src="' . $film['posterHref'] . '" alt="' . $film['titre'] . '" />
    ';
}
else {
    echo '<strong>Entrez un titre de film !</strong>';
}

?>

Commentaire de Etn3000 le 21/03/2011 18:45:12

La V3.6.3 est OBSOLETE !
La V5 est disponible sur api-allocine.netne.net !

Commentaire de jbtv le 19/12/2011 00:20:42

bonjour je viens de tester tes code et j'ai un probleme au niveau de la réponce sa me met "Il est temps de mettre à jour votre application" pourriez vous m'indiquez comment faire svp??? merci

Commentaire de Etn3000 le 20/12/2011 13:26:50

La V3.6.3 est OBSOLÈTE !
Maintenant, c'est l'API Allociné Helper et vous pouvez la trouver ici: http://sites.google.com/site/apiallocine/telechargements
Cordialement,

Etn3000

Commentaire de jbtv le 20/12/2011 16:10:10

Désoler ETN3000 je suis actuellement sur http://sites.google.com/site/apiallocine/telechargements et la derniere version proposer est
Version 2.1 25/09/11
Version 2.0 24/09/11
Version 1.4 13/08/11
Version 1.3 13/08/11
Version 1.2 12/08/11
Version 1.1 10/08/11
Version 1.0 08/08/11
c'est touts

Commentaire de Etn3000 le 27/12/2011 12:44:18

Oui, la numérotation est revenue à zéro lors du changement de nom.
API Allociné -> API Allociné Helper
La dernière version est donc la 2.1

Commentaire de Shaun20 le 26/01/2012 11:58:02

Et comment on utilise la nouvelle version j'ai pas trop compris le wiki...

Commentaire de Etn3000 le 28/01/2012 15:05:13

Regarde dans les exemples: https://sourceforge.net/projects/api-allocine/files/PHP/exemples/
Ou directement la source, toutes les fonctionnalités sont très commentées.

J'avoue ne pas avoir trouvé d'outil pour créer une bonne documentation, et je n'ai pas eu le courage de faire ça à la main (Il faudrait quand même que je le fasse un de ces jours...).
La source et les exemples devraient suffire pour comprendre le fonctionnement global, non ?

Commentaire de Shaun20 le 30/01/2012 14:33:42

Merciiii de m'avoir répondu :D en faite j'ai commencé à regarder ton code php (j'ai bcp plus pratiqué le java...heureusement que sais du php objet) et tes commentaires...heureusement il y a des commentaires ^^, je commence a comprendre ton système de tableaux dans d'autres tableaux...c'est chaud faut vraiment savoir à quoi ça correspond...mais ça va c'est du très bon boulot...
en faite je sais pas si tu peux m'aider je fais un mini site pour répertorier mes divx et dvd, et je veux prendre les infos sur allociné, le seul problème c'est comment je pourrai récupérer la liste des tout mes divx et mes dvd ? en écrivant dans un fichier texte tout les titres ? ou dans une base de donnée ? enfin le problème c'est que si on fait une recherche avec un réalisateur ou un acteur j'aurai pas les infos...

Commentaire de Etn3000 le 30/01/2012 18:20:48

Je t'ai envoyé un message privé.

Commentaire de slash135 le 27/03/2012 23:04:39

Bonjour, super boulot...bravo
j'ai juste un probleme: je suis sur la version 3.6.3, tout marche nikel sauf le réalisateur toujours vide.
y a un bug quelque part?

Commentaire de Etn3000 le 28/03/2012 23:54:35

Le premier problème, c'est que la version 3.6.3 est dépassée depuis environ... 1 an et demi.
La nouvelle version se trouve ici => https://github.com/etienne-gauvin/api-allocine-helper
Le projet ne s'appelle plus "API Allociné", mais "API AlloCiné Helper" (raison pour laquelle le versionnage est revenu à 0 entre temps).

Pour le problème du réalisateur, je pense qu'il sera réglé en même temps que le premier petit problème.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

script d'affichage de séance de cinéma [ par thierry34600 ] bonjour à tous voila je cherche un script séance de cinéma [url=http://www.cgrcinemas.fr/villeneuve/horaires/]horaire[/url] car je doit crée un si probleme d'insertion dans une base de donnée [ par esteller ] Document sans titre <?php function afficherformulaire($nom='',$prenom='',$genre=1,$datnais='',$datemb='',$salbrut='',$sitmat=1,$nbenf='


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales