begin process at 2012 05 27 18:18:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > RÉCUPÉRER DES INFORMATIONS SUR ALLOCINE.FR

RÉCUPÉRER DES INFORMATIONS SUR ALLOCINE.FR


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :allocine, regex, php, parser Niveau :Initié Date de création :13/11/2009 Date de mise à jour :01/12/2010 15:26:31 Vu :8 106

Auteur : trasher

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

 Description

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/med ias/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

  • <?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;
  • }
  • ?>
<?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


 Historique

05 novembre 2010 21:27:42 :
maj 5/11/2010 : le script ne parsé plus très bien certaines infos d'allocine, donc correction
01 décembre 2010 15:26:31 :
allociné à modifier son code, donc maj :)

 Sources du même auteur

COPIE RAPIDE EN FXP

 Sources de la même categorie

Source avec une capture MODULE JOOMLA 1.5 NOW LISTENING par Alcantornet
Source avec Zip Source avec une capture UPLOAD CENTER par basssem81
Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK

 Sources en rapport avec celle ci

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture PARSER ALLOCINE par cyrhades
Source avec Zip Source avec une capture BASH CSVSQL: PARSER UN FICHIER CSV AVEC DES COMMANDES SQL par gentilKiki
Source avec Zip Source avec une capture FLEXIBLE TEMPLATE LANGUAGE (FTL) – TEMPLATE PARSER EXTENSIBL... par BlackWizzard

Commentaires et avis

Commentaire de Also know as le 13/11/2009 14:53:51

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.

@+

Commentaire de parweb le 13/11/2009 20:21:52

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

Commentaire de trasher le 13/11/2009 20:23:17

je ne suis pas assez expérimenté pour en faire une class :p

Commentaire de hornetbzz le 16/11/2009 09:19:56

"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

Commentaire de gordonbleu le 16/11/2009 10:18:31

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.

Commentaire de parweb le 16/11/2009 12:13:33

@hornetbzz le site allociné propose des flux rss pour récupérer les infos d'un film ?

Commentaire de trasher le 16/11/2009 15:37:09

ben non sinon je n'aurai pas fait ce genre de code X_X

Commentaire de Etn3000 le 09/10/2010 01:12:50

J'ai fait une API Allociné mais la mienne ne fait pas un parsing de la page, elle récupère les infos sous le format JSON et les adaptent sous forme d'un tableau multidimensionnel
http://www.phpcs.com/codes/API-ALLOCINE-V3_52259.aspx

Commentaire de trasher le 05/11/2010 21:29:15

pas mal etn3000 :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Parser xml en php [ par tahbre ] Bonjour à tous, Je dois accéder à un fichier xml qui est sur un autre site ftp que le mien, et je veux réaliser un parser en php de façon à stocker l Parser overture [ par yvain91 ] Bonjour,J'aurai besoin, grace à une fonction php, de récupérer des résultats affichés sur la page d'overture de suggestion de mot clé(http://inventory Problème avec les regex [PHP] [ par b4d ] Bonjour.Voil&#224;, j'ai un petit probl&#232;me avec une regex...Je ne sais pas comment la faire.Pouvez-vous m'aider?Le probl&#232;me:Je vais lire dan Mod rewrite, regex et autres joyeuseries [ par zmc ] Bonsoir,J'utilise actuellement de la redirection d'URL via .htaccess, aucun problemes jusqu'ici, par exemple "site.com/avis=xxxx" est redirigé vers "s parser un fichier doc en php [ par kayoo ] je n' arrive pas à parser un fichier de type word en php, le but est de réaliser un moteur de recherche sur le fichier .merci parser une page html en php [ par rose2009 ] J'ai besoin d'extraire des infos d'une page html pour les stocker dans une table MySQL et tout ca en PHP.Merci pour votre aide si vous avez une idee ! parser xml avec php(compatible php4 php5) [ par chezcodessources ] Bonjour je veux parser un fichier xml avec xml et je sais pas quel serveur m'hebergera(php4 ou php5) donc je veux du php qui sera compatible 4 ou 5 Parser une chaine UTF8 en php [ par SuperChouquette ] Bonjour, je ne parvient pas à "parser" une chaine en utf8. Chaque caractère à une largeur en pixel définie dans une table, et mon système passe une li Regex... à plusieurs conditions [ par hdh ] Bonjour Je voudrais utiliser une expression régulière dans une requète mysql pour ne selectionner que les tables qui m'intéressent... la base est bonn comment recuperer le code source du parser allocine pour mettre sur mon site [ par supra80 ] supra80 bonjour je viens de telecharger le parser allocine mais je ces pas comment il marche,je voudrais recuperer le code source pour le mettre sur m


Nos sponsors


Sondage...

Comparez les prix

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,468 sec (4)

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