Récupérer des informations sur allocine.fr

0/5 (10 avis)

Snippet vu 15 386 fois - Téléchargée 18 fois

Contenu du snippet

Ce script va récupérer des informations sur le site Allocine.fr sous forme de tableau.

Ex :

Array
(
[titre_film] => Che - 1ère partie : L'Argentin
[realisateur] => Steven Soderbergh
[acteur] => Benicio Del Toro, Demian Bichir, Santiago Cabrera
[long_metrage] => français, américain, espagnol
[synopsis] => Cuba, 1952 : le général Fulgencio Batista fomente un putsch, s'empare du pouvoir et annule les élections générales. Bravant ce dictateur corrompu, un jeune avocat, Fidel Castro, candidat à la députation sous la bannière du Parti du Peuple, passe à l'action. Dans l'espoir de provoquer un soulèvement populaire, il attaque avec 150 jeunes la caserne de Monaca le 26 juillet 1953. L'opération échoue ; Castro passe deux ans en prison. Amnistié en 1955, il s'exile à Mexico. Pendant ce temps, au Guatemala, un jeune Argentin idéaliste, Ernesto Guevara, se lance en politique. En 1954, lorsqu'un complot militaire soutenu par la CIA renverse le gouvernement, démocratiquement élu, de Jacobo Arbenz, Guevara se réfugie au Mexique. Après une première prise de contact au Guatemala, il rejoint un groupuscule révolutionnaire cubain. le 13 juillet 1955, dans un modeste appartement de Mexico, Raul Castro présente Guevara à son frère aîné, Fidel. Une rencontre discrète, qui marque une date clé dans l'histoire de Cuba. Guevara se voit immédiatement confier une opération de guérilla en vue de renverser Batista. Les Cubains affublent le jeune rebelle d'un sobriquet courant en Argentine : "Che". 26 novembre 1956 : Fidel Castro embarque pour Cuba avec 80 rebelles. L'offensive se solde par un massacre : seuls douze hommes en réchappent, dont le Che (médecin du groupe) et Castro. Réfugiés dans la Sierra Maestra, les "barbudos" déclarent la "guerre totale" au régime de Batista. Guevara prouve ses qualités de combattant et se rend indispensable à ses compagnons. La résistante s'intensifie, gange toute l'île. 1er janvier 1959 : les rebelles célèbrent leur victoire à Santa Clara, le dictateur s'enfuit. Fin de la 1ère partie...
[affiche] => http://images.allocine.fr/r_160_214/b_1_cfd7e1/medias/nmedia/18/36/35/03/18997008.jpg
[duree] => 02h07min
[titre_vo] => Che: Part One
[sortie_cinema] => 2009-01-07
[sortie_salle_lien] => http://www.allocine.fr/film/agenda.html?week=2009-01-07
[sortie_salle] => 7 janvier 2009
[age] => inconnu
[annee_de_production] => 2008
)

Source / Exemple :


<?php
function allocine($allocine)
{
	$absent = Array(
		'titre_film' => 'inconnu',
		'realisateur' => 'inconnu',
		'acteur' => 'inconnu',
		'long_metrage' => 'inconnu',
		'synopsis' => 'inconnu',
		'affiche' => './img/image_introuvable_films.jpg',
		'duree' => 'inconnue',
		'titre_vo' => 'inconnu',
		'sortie_cinema' => 'inconnue',
		'age' => 'inconnu',
		'annee_de_production' => 'inconnue'
	);

	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, 'http://www.allocine.fr/film/fichefilm_gen_cfilm='.$allocine.'.html');
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_NOBODY, FALSE);
	$recup = curl_exec($curl);
	curl_close($curl);

	// on récupère le titre
	preg_match('#<h1 property="v:itemreviewed">(.*?)</h1>#is', $recup, $titre_film);
	$sortie['titre_film'] = (empty($titre_film)) ? $absent['titre_film'] : trim(utf8_decode(strip_tags($titre_film[0])));

	// on réupère le nom du/des réalisateur(s)
	preg_match('#<!-- End first block -->(.*?)</a>#is', $recup, $realisateur);
	$sortie['realisateur'] = (empty($realisateur)) ? $absent['realisateur'] : trim(utf8_decode(strip_tags($realisateur[0])));
	$sortie['realisateur'] = str_replace("\n", '', $sortie['realisateur']);
	$sortie['realisateur'] = str_replace("\r", '', $sortie['realisateur']);
	$sortie['realisateur'] = preg_replace('/\s\s+/', '', $sortie['realisateur']);
	$sortie['realisateur'] = explode('par', $sortie['realisateur']);
	$sortie['realisateur'] = trim($sortie['realisateur'][1]);

	// on réupère le nom du/des acteur(s)
	preg_match('#<!-- End first block -->(.*?)<!-- end paragraph for second block -->#is', $recup, $acteur);
	$sortie['acteur'] = (empty($acteur)) ? $absent['acteur'] : trim($acteur[0]);
	$sortie['acteur'] = preg_replace('#<p>(.*?)Avec#is', '', $sortie['acteur']);
	$sortie['acteur'] = preg_replace('#plus</a>(.*?)</p>#is', '', $sortie['acteur']);
	$sortie['acteur'] = strip_tags(utf8_decode(trim($sortie['acteur'])));
	$sortie['acteur'] = str_replace("\n", '', $sortie['acteur']);
	$sortie['acteur'] = str_replace("\r", '', $sortie['acteur']);
	$sortie['acteur'] = preg_replace('/\s\s+/', '', $sortie['acteur']);
	$sortie['acteur'] = substr($sortie['acteur'], 0, -1);

	// on réupère le long-métrage du film
	preg_match('#Long-m[^"]+trage(.*?)\.#is', $recup, $long_metrage);
	$sortie['long_metrage'] = (empty($long_metrage)) ? $absent['long_metrage'] : strip_tags(utf8_decode(trim($long_metrage[1])));
	$sortie['long_metrage'] = str_replace("\r", '', $sortie['long_metrage']);
	$sortie['long_metrage'] = str_replace("\t", '', $sortie['long_metrage']);
	$sortie['long_metrage'] = str_replace("\n", '', $sortie['long_metrage']);

	// on récupère le synopsis
	preg_match('#<span class="bold">Synopsis : </span>(.*?)</p>#is', $recup, $synopsis);
	$synopsis[1] = str_replace("&#8217;", "'", $synopsis[1]);
	$synopsis[1] = str_replace('&#8230;', '...', $synopsis[1]);
	$synopsis[1] = str_replace('&#8211;', '-', $synopsis[1]);
	$synopsis[1] = str_replace("\n", '', $synopsis[1]);
	$synopsis[1] = str_replace('œ', 'oe', $synopsis[1]);
	$synopsis[1] = str_replace('&#8221;', '"', $synopsis[1]);
	$synopsis[1] = str_replace('&#8220;', '"', $synopsis[1]);
	$sortie['synopsis'] = (empty($synopsis)) ? $absent['synopsis'] : trim(utf8_decode($synopsis[1]));

	// on récupère l'url de l'affiche
	preg_match('#<img src=\'http://images.allocine.fr/r_160_214/(.*?)\'[^"]+alt="[^"]+"[^"]+title="[^"]+"[^"]+/>#is', $recup, $affiche);
	$sortie['affiche'] = ($affiche[1] == 'http://images.allocine.fr/r_160_214/b_1_cfd7e1/commons/emptymedia/AffichetteAllocine.gif') ? $absent['affiche'] : 'http://images.allocine.fr/r_160_214/'.$affiche[1];

	// on récupère la durée
	preg_match_all('#[0-9]+h[0-9]+min#is', $recup, $duree);
	$sortie['duree'] = (empty($duree[0][0])) ? $absent['duree'] : trim(str_replace(' min', '', utf8_decode($duree[0][0])));

	// on récupère le titre original
	preg_match('#Titre original : <span class="purehtml"><em>(.*?)</em></span>#is', $recup, $titre_vo);
	$sortie['titre_vo'] = (empty($titre_vo)) ? $absent['titre_vo'] : trim(utf8_decode($titre_vo[1]));

	// on récupere la date de sortie au cinéma
	preg_match('#<a href="/film/agenda\.html\?week=(.*?)">(.*?)</a>#is', $recup, $sortie_cinema);
	$sortie['sortie_cinema'] = (empty($sortie_cinema)) ? $absent['sortie_cinema'] : trim(utf8_decode($sortie_cinema[1]));

	if($sortie['sortie_cinema'] != 'inconnue')
		$sortie['sortie_salle_lien'] = 'http://www.allocine.fr/film/agenda.html?week='.$sortie_cinema[1];
	else
		$sortie['sortie_salle_lien'] = 'inconnue';

	if($sortie['sortie_cinema'] != 'inconnue')
		$sortie['sortie_salle'] = trim(utf8_decode($sortie_cinema[2]));
	else
		$sortie['sortie_salle'] = 'inconnue';

	// on récupère les restriction d'âge si il y a
	preg_match('#<span class="insist">(.*?)</span>#is', $recup, $age);
	$sortie['age'] = (empty($age)) ? $absent['age'] : trim(utf8_decode($age[1]));

	// on récupère l'année de production
	preg_match('#Ann..?e de production.*<a href=["\'][^>]+["\']>([0-9]+)</a>#isU', $recup, $annee_de_production);
	$sortie['annee_de_production'] = (empty($annee_de_production)) ? $absent['annee_de_production'] : trim(utf8_decode($annee_de_production[1]));

	return $sortie;
}
?>

Conclusion :


Je suis ouvert à toute modification, amélioration... etc

et pensez à enregistrer votre page en UTF-8 sans BOM

A voir également

Ajouter un commentaire Commentaires
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
13 nov. 2009 à 14:53
Bon cela repose sur de nombreux système que tout le monde devrait je pense connaitre si quelqu'un à déjà voulu faire cela :)

Une petite maitrise des regexp est nécessaire.

Créer une classe pourrait être sympa, histoire de le rendre souple et de pouvoir l'utiliser sur plusieurs sites mais que cela soit toujours les mêmes infos.

@+
cs_parweb Messages postés 14 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
13 nov. 2009 à 20:21
plutôt qu'une fonction j'aurais fait une classe
ensuite je pense qu'il te manque une petite chose pour que le script soit complet c'est la jaquette du film.

et du coup si c'était une classe tu aurais put faire une méthode search qui t'aurais renvoyé le numéro allociné et aurais pioché les infos.

mais sinon c'est pas mal
Utilisateur anonyme
13 nov. 2009 à 20:23
je ne suis pas assez expérimenté pour en faire une class :p
cs_hornetbzz Messages postés 59 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 3 janvier 2011
16 nov. 2009 à 09:19
"Initié" !! à vrai dire, je mettrais plutôt ce bout de code en "débutant": le seul intéret de ce code est l'utilisation de qq regex et des 2 fonctions preg_match et preg_match_all. Qui plus est, c'est un travail restrictif dans le sens où ce code n'est pas utilisable sur d'autres sites, et qu'il serait obsolète au moindre changement du site source des informations (allocine).

Pour un initié, je conseillerai comme une bonne méthode de créer une classe pour aller chercher le flux rss (xml), par exemple par une requête cURL, et le réinjecter sur ton site.

Avec un intérêt majeur de cette méthode : ce code aurait ainsi été ré-utilisable facilement pour d'autres sites et flux rss.

C'est vrai, il faut y passer un peu de temps au départ, mais c'est un investissement payant. Si tu sais faire ce bout de code, tu devrais pouvoir t'y mettre sans soucis.

Bon courage
gordonbleu Messages postés 1 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 novembre 2009
16 nov. 2009 à 10:18
Salut Trasher,

Super, c'est le type de code que je recherche. J'utilise Ant Movie Catalog depuis quelques temps mais depuis le remaniement du site Allô Ciné (version bêta), le logiciel ne récupère plus rien sur ce site. Je suis pas calé du tout en codage et j'ai 2 questions à cette occasion :

- ce code est-il incrustable dans une macro excel ?
- si oui, est-ce que tu pourrais modifier les critères de champ ? Je voudrais récupérer les critères suivants : titre original, année de sortie ou de production, réalisateur, acteurs, synopsis, langue, pays.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.