PROJET AUTOBLOG


Warrior du Dimanche

Site original : Warrior du Dimanche

⇐ retour index

All#OLDciné: ton API on s'en fout !

mercredi 1 mai 2013 à 06:00

 Quand on veut faire une appli php qui récupère les infos et affiches d'un film, jusqu'à très récemment, on avait deux choix: IMDb et allocine...

Si on voulait les synopsis en français, il ne restait qu'allocine... ça tombait bien, remarque, parce qu'ils avaient une API non officielle qui faisait bien son taf, même s'il fallait ruser pour pécho le code ID de l'appli Android pour l'utiliser... 

 

Mais voilà, Allociné a décidé de se réserver l'accès à cette API et du coup, on se retrouve dans la mouise... (mes récriminations sur le fil touït ici et )

Et si on ne dépendait plus de leur API ?


L'idée est de parser directement les pages allocine pour grabber les infos qui nous intéressent. 

J'ai pondu(cotcot) quelques fonctions qui font le job pour vous...

  1. search2array($recherche): on lui passe la chaine à rechercher (par exemple 'heros') et elle renvoie un tableau contenant les liens vers les fiches allociné des 20 premiers résultats,
  2. movielink2array($lien): charge et parse la page allociné correspondant au lien renvoyé par la fonction précédente; elle retroune un tableau contenant toutes les infos (titre, adresse de l'affiche, acteurs, genre, synopsis, lien vers la fiche allocine)
  3. url_array2list($array): renvoie une liste <ul> regroupant les résultats mis en forme d'une recherche.

Pour avoir la liste des films correspondant à la recherche 'heros', on fait donc: echo url_array2list(search2array('heros'));

En faisant simplement search2array('heros') on récupère les données sous forme de tableau ce qui permet de les stocker (par exemple pour créer une fois pour toutes les fiches de ses films )


 


Un (gros) bémol: c'est lourd ! Il faut charger la page de recherches, charger chaque page de résultat, parser le tout à coups de preg_match... c'est lent, lourd et ça consomme des ressources en veux-tu en voilà...

A réserver pour une utilisation perso dans une appli à soi, évidemment, pas en prod oO 

De plus, le passage par file_get_contents pour cherger les pages ne sera pas accepté par tous les serveurs: je pense que ça doit dépendre le la politique de sécurité (mais je peux me tromper).

En tout cas, pour mon appli de media center hébergée en local, ça remplacera l'usage de l'API.

Et si Allocine change la structure de ses pages, il suffit d'adapter les regex en conséquence...


Pour le zip, le voilà ...


[EDIT]

Plarem m'a signalé dans les commentaires que Gromez a fait une classe pour tipiak les infos sur Allociné: je l'ai testée rapidement et elle fonctionne très bien; elle est rapide et produit un résultat json directement utilisable...

C'est du bon boulot et ça marche. Je n'ai pas encore regardé comment il s'y prend, mais je pense qu'on a une solution plus élégante que le parsing de pages ^^

Ce post vaut de toutes façons comme solution de repli et éventuellement comme base pour parser d'autres pages de services dépourvus d'API :-P ^^