0/5 (10 avis)
Snippet vu 15 386 fois - Téléchargée 18 fois
<?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("’", "'", $synopsis[1]); $synopsis[1] = str_replace('…', '...', $synopsis[1]); $synopsis[1] = str_replace('–', '-', $synopsis[1]); $synopsis[1] = str_replace("\n", '', $synopsis[1]); $synopsis[1] = str_replace('', 'oe', $synopsis[1]); $synopsis[1] = str_replace('”', '"', $synopsis[1]); $synopsis[1] = str_replace('“', '"', $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; } ?>
13 nov. 2009 à 14:53
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.
@+
13 nov. 2009 à 20:21
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
13 nov. 2009 à 20:23
16 nov. 2009 à 09:19
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
16 nov. 2009 à 10:18
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.