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

 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  

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

❝ 7 commentaires ❞

1  Plarem le

Gromez a l'air d'avoir fait une nouvelle version de son API avec du code en exemple (cf. https://github.com/gromez/allocine-api ). Je ne l'ai pas encore testé, et il va falloir... Car, comme dans ton cas, mon media center ne doit plus pouvoir fonctionner.


Sinon, pour le genre d'actions que tu fais, j'aurai une préférence pour les faire via Perl. Malheureusement, cela ne peut fonctionner que si on a la main sur son serveur...

 
2  Bronco le

En effet... Pour un truc en local c'est envisageable.
Je vais jeter un oeil sur l'api dont tu parles, merci !

 
3  Bronco le

Après un test rapide de cette API, elle fonctionne et s'avère très rapide Excellent boulot
Je vais éditer ce post pour en parler, merci encore pour le partage

 
4  Mickael le

Ca existe aussi pour IMDB au passage !
Mais comme tu l'as dit cela reste dépendant du code HTML et le jour où Allociné change un truc c'est la galère ! Ca fait de toutes petites modifs mais c'est quand même ennuyeux ! Et puis franchement le screening c'est sale.


Sinon il y a l'API de The Movie Database, qui au moins est pensée exactement pour ce genre d'applications, et propose les synopsis dans toutes les langues.
Et puis au moins c'est communautaire, c'est quand même plus sympa je trouve !

 
5  Yosko le

Tiens justement myCinema (mycinema-software.com) en est à sa deuxième mise à jour en moins d'un mois à cause des changements de Allocine. Le développeur doit commencer à s'arracher les cheveux.

 
6  Bronco le

@Mickael : Je ne savais pas du tout que l'API de TMD existait en français... Merci ;)
@Yosko: je me mets facilement à sa place : ça me gonflait gentiment alors que je suis le seul utilisateur de mon media center, j'imagine lui !

 
7  eric le

Sinon , dans le meme genre, y a weboob

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

les commentaires relevant du SPAM seront filtrés et dégagés direct...

Quelle est le premier caractère du mot ujaxtw ?