From c967b07b58b4588996be0ebefa5a2d10e0663cf6 Mon Sep 17 00:00:00 2001 From: pifou Date: Thu, 28 Jun 2007 07:41:29 +0000 Subject: [PATCH] =?utf8?q?MOD=20Le=20fichier=20film.rb=20et=20divis=C3=A9?= =?utf8?q?=20en=20film.rb=20et=20films.rb=20pour=20une=20meilleure=20lectu?= =?utf8?q?re=20MOD=20correction=20de=20diff=C3=A9rents=20bugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: svn://euphorik.ch/pompage@32 02bbb61a-6d21-0410-aba0-cb053bdfd66a --- src/film.rb | 363 ++++++++++--------------------------------------- src/films.rb | 230 +++++++++++++++++++++++++++++++ src/yopyop.rb | 14 +- start_test.bat | 4 +- xml/test.xml | 178 +++++++++++++++++++----- 5 files changed, 456 insertions(+), 333 deletions(-) create mode 100644 src/films.rb diff --git a/src/film.rb b/src/film.rb index b8b3e07..30a5bc8 100644 --- a/src/film.rb +++ b/src/film.rb @@ -1,15 +1,14 @@ -# Attention, le but de ce fichier n'est pas d'être le plus clair possible ^-^´´ +# Représente un Film. +# Permet de charger des données depuis allocine.fr +# Permet d'effectuer des recherches depuis allocine.fr +# TODO : rendre la classe indépendant de la source de donnée pour pouvoir utiliser d'autres sites comme par exemple imdb.com -require 'rexml/document' require 'net/http' -require 'thread' -require 'thwait' require 'cgi' require 'pays.rb' require 'genre.rb' require 'personne.rb' - require 'constantes.rb' class String @@ -23,215 +22,8 @@ end class Film attr_accessor :id, :titre, :fichiers, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget - - # repertoire de base, par exemple C:/Divx/ - @@repBase = '' - - # Les films indexés par leur titre - @@films = {} - - # Les films indexés par leur nom de fichier, deux fichiers différents peuvent pointer sur le même film - @@filmsFichier = {} - - # Les films qui ont plusieurs réponses lors de la recherche, traités à la fin - @@filmsPlusieursReponses = [] - - @@threadsWait = ThreadsWait::new - @@nbConn = 0 - - # le prochain id disponible - @@idDisponible = 1 - - # retourne un nouvel id, utilisé lors de la création d'un nouveau film - def Film::getNewId - id = @@idDisponible - @@idDisponible += 1 - return id - end - - # Lit un repertoire de manière recursive - def Film::litRepertoire(r) - @@repBase = r - repPrecedant = Dir::getwd - Dir::chdir(r) - - Film::litRepertoireR('.') - - # on attends que les threads se terminent - @@threadsWait.all_waits - - # traite les films qui avaient plusieurs réponses lors de la recherche - # l'utilisateur doit faire un choix - i = 1 - @@filmsPlusieursReponses.each{|f| - puts - puts "Plop, ya un conflit #{i} / #{@@filmsPlusieursReponses.length} :" - if f.reglerConflitPlusieursReponses - Film::ajouterFilm(f) - end - i += 1 - } - - Dir::chdir(repPrecedant) - end - - # Charge les films contenus dans un fichier XML. - def Film::loadFilmsXml(xmlFile) - # si le fichier n'existe pas il n'y a rien à charger - if !File.exists?(xmlFile) - return - end - - racine = REXML::Document::new(File::new(xmlFile)).root - racine.each_element{|e| - id = e.attribute('id').to_s.to_i - - if id > @@idDisponible - @@idDisponible = id + 1 - end - - titre = e.get_elements('titre')[0].get_text - - fichiers = e.get_elements('fichiers')[0].get_elements('fichier') - annee = e.get_elements('annee')[0].get_text - duree = e.get_elements('duree')[0].get_text - critiquePresse = e.get_elements('critiquePresse')[0].get_text - critiqueSpectateur = e.get_elements('critiqueSpectateur')[0].get_text - synopsis = e.get_elements('synopsis')[0].get_text - budget = e.get_elements('budget')[0].get_text - realisateurs = e.get_elements('realisateurs')[0].get_elements('realisateur') - acteurs = e.get_elements('acteurs')[0].get_elements('acteur') - pays = e.get_elements('lespays')[0].get_elements('pays') - genres = e.get_elements('genres')[0].get_elements('genre') - - film = Film::new(fichiers[0].get_text.value) - - film.titre = titre.value unless titre.nil? - film.id = id - fichiers.each{|e| - film.addFichier(e.get_text.value) - @@filmsFichier[e.get_text.value] = film - } - film.annee = annee.value unless annee.nil? - acteurs.each{|e| - film.acteurs << Personne::ajouter(e.get_text.value) - } - pays.each{|e| - film.pays << Pays::ajouter(e.get_text.value) - } - film.duree = duree.value unless duree.nil? - film.critiquePresse = critiquePresse.value unless critiquePresse.nil? - film.critiqueSpectateur = critiqueSpectateur.value unless critiqueSpectateur.nil? - genres.each{|e| - film.genres << Genre::ajouter(e.get_text.value) if e.get_text != nil - } - film.synopsis = synopsis.value unless synopsis.nil? - film.budget = budget.value unless budget.nil? - @@films[film.titre] = film - } - end - - # Renvoie tous les films sous la forme d'un document XML. - def Film::getFilmsXml - # le document - docXml = REXML::Document::new - docXml.xml_decl().encoding = "UTF-8" # normalement UTF-8 - docXml.xml_decl().dowrite - - # la racine du document - racine = REXML::Element::new('filmographie') - docXml.add(racine) - pi = REXML::Instruction.new("xml-stylesheet", "type=\"text/xsl\" href=\"../xsl/yopyop.xsl\"") - racine.previous_sibling = pi - - # on ajoute chaque film à la racine - @@films.each{|nom, f| - racine.add(f.getXml) - } - - # revoie le document - docXml - end - -private - def Film::filmsFactory(fichier) - Film::new(fichier).loadData - end - - def Film::litRepertoireR(r) - Dir::foreach(r){|f| - next if f[0,1] == '.' - fichier = (r == '.' ? '' : r + "/") + f - if File::directory?(fichier) - litRepertoireR(fichier) - else - - # vérification de l'extension - /^.*?\.(.{3,4})$/ =~ fichier - if !FILMS_EXTENSIONS.include?($1) - next - end - - fichier = CGI::escapeHTML(fichier.unpack("C*").pack("U*")) - - # on skip si le film est déjàa dans la BD - if film = @@filmsFichier[fichier] - puts "[i] Already exists in DB : #{film.titre} (#{fichier})" - next - end - - #p fichier - - film = nil - - if @@nbConn >= NB_CONN_MAX - @@threadsWait.next_wait - end - - @@nbConn += 1 - @@threadsWait.join_nowait( - Thread::new{ - begin - film = Film::filmsFactory(fichier) - unless film.nil? # le film a été correctement construit - Film::ajouterFilm(film) - end - rescue Exception => e - puts e.message - puts e.backtrace - end - @@nbConn -= 1 - } - ) - end - } - end - - def Film::ajouterFilm(film) - if film.plusieursReponses? - @@filmsPlusieursReponses << film - return - end - - # le film existe déjà - if @@films.has_key?(film.titre) - # le fichier n'est pas connu -> nième partie d'un film - if !@@filmsFichier.has_key?(film.fichiers[0]) - puts "[i] movie #{film.titre} has a another file part : #{film.fichiers[0]}" - @@films[film.titre].addFichier(film.fichiers[0]) - @@filmsFichier[film.fichiers[0]] = @@films[film.titre] - else - puts "[!] Duplicate movie : #{film.titre} (#{film.fichiers[0]})" - end - else - puts "[i] movie added : #{film.titre} (#{film.fichiers[0]})" - @@films[film.titre] = film - @@filmsFichier[film.fichiers[0]] = film - end - end - - + # Constructeur. N'entreprend aucune action (chargement), crée juste un film vide. def initialize(fichier) @fichiers = [fichier] @@ -255,13 +47,12 @@ private @idsAllocine = {} end -public - + # Est-ce qu'il y a eu plusieurs réponses pour ce film lors de la cherche sur le net ? def plusieursReponses? return @aPlusieursReponses end - # demande à l'utilisateur de faire un choix + # Demande à l'utilisateur de faire un choix # ret : true si le conflit à été résolu sinon false def reglerConflitPlusieursReponses @@ -301,6 +92,7 @@ public return true end + # Ajoute un fichier comme faisant partie du film def addFichier(fichier) if !@fichiers.include?(fichier) @fichiers << fichier @@ -314,8 +106,6 @@ public @titre = @fichiers[0] return self end - - @id = Film::getNewId connexionHttp = Net::HTTP::new('www.allocine.fr') @@ -358,8 +148,6 @@ public unless titre.nil? or titre.empty? - #// =~ donneesHtml - #r = donneesHtml.scan(/(.*?)<\/a>/) r = donneesHtml.scan(/(.*?)<\/a>(?:<\/h4>
 (.*?)<\/h5>){0,1}(?:


<\/h4>){0,1}(?:

de (.*?)<\/h4>){0,1}(?:

 avec (.*?)<\/h4>){0,1}(?:

 \((.*?)\)<\/h4>){0,1}/) if r.length > 1 @@ -376,6 +164,69 @@ public self end + # Renvoie un film sous la forme d'un élément XML de type REXML::Element. + def getXml + + racine = REXML::Element::new('film') + racine.add_attribute('id', @id.to_s) + + fichiers = REXML::Element::new('fichiers') + @fichiers.each{|f| + fichiers.add(REXML::Element::new('fichier').add_text(f)) + } + racine.add(fichiers) + + racine.add(REXML::Element::new('titre').add_text(@titre)) + racine.add(REXML::Element::new('annee').add_text(@annee)) + + realisateurs = REXML::Element::new('realisateurs') + @realisateurs.each{|r| + realisateurs.add(REXML::Element::new('realisateur').add_text(r.nom)) + } + racine.add(realisateurs) + + acteurs = REXML::Element::new('acteurs') + @acteurs.each{|a| + acteurs.add(REXML::Element::new('acteur').add_text(a.nom)) + } + racine.add(acteurs) + + lespays = REXML::Element::new('lespays') + @pays.each{|p| + lespays.add(REXML::Element::new('pays').add_text(p.nom)) + } + racine.add(lespays) + + racine.add(REXML::Element::new('duree').add_text(@duree.to_s)) + + racine.add(REXML::Element::new('critiquePresse').add_text(@critiquePresse)) + racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur)) + + genres = REXML::Element::new('genres') + @genres.each{|g| + genres.add(REXML::Element::new('genre').add_text(g.nom)) + } + racine.add(genres) + + synopsisElement = REXML::Element::new('synopsis') + unless @synopsis.nil? + @synopsis.split("\n").each{|s| + next if s =~ /^\s*$/ + synopsisElement.add(REXML::Element::new('p').add_text(s)) + } + end + racine.add(synopsisElement) + + budgetElement = REXML::Element::new('budget') + budgetElement.add_text(@budget) + budgetElement.add_attribute('unite', @budgetUnite) + racine.add(budgetElement) + + racine.add(REXML::Element::new('url').add_text(@url)) + + racine + end + private def loadDepuisIdAllocine(id, connexionHttp = nil) if (connexionHttp == nil) @@ -402,13 +253,13 @@ private # Réalisateurs /

Réalisé par(.*?)<\/h4>/ =~ ficheHtml - $1.scan(/(.*?)<\/a>/m){|a| + $1.scan(/\s*(.*?)<\/a>\s*/m){|a| @realisateurs << Personne::ajouter(a[0]) unless a[0].nil? } unless $1.nil? # Acteurs /

Avec(.*?)<\/h4>/ =~ ficheHtml - $1.scan(/(.+?)<\/a>/m){|a| + $1.scan(/\s*(.+?)<\/a>\s*/m){|a| @acteurs << Personne::ajouter(a[0]) unless a[0].nil? } unless $1.nil? @@ -440,79 +291,15 @@ private # Synopsis /Synopsis.*?

(.*?)<\/h4>/m =~ ficheHtml - unless $1.nil - { + unless $1.nil? @synopsis = $1 @synopsis.gsub!(/|/, "\n") @synopsis.virerBalisesHTML! - } + end # Budget /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml @budget = $1 unless $1.nil? end - -public - - # Renvoie un film sous la forme d'un élément XML de type REXML - def getXml - - racine = REXML::Element::new('film') - racine.add_attribute('id', @id.to_s) - - fichiers = REXML::Element::new('fichiers') - @fichiers.each{|f| - fichiers.add(REXML::Element::new('fichier').add_text(f)) - } - racine.add(fichiers) - - racine.add(REXML::Element::new('titre').add_text(@titre)) - racine.add(REXML::Element::new('annee').add_text(@annee)) - - realisateurs = REXML::Element::new('realisateurs') - @realisateurs.each{|r| - realisateurs.add(REXML::Element::new('realisateur').add_text(r.nom)) - } - racine.add(realisateurs) - - acteurs = REXML::Element::new('acteurs') - @acteurs.each{|a| - acteurs.add(REXML::Element::new('acteur').add_text(a.nom)) - } - racine.add(acteurs) - - lespays = REXML::Element::new('lespays') - @pays.each{|p| - lespays.add(REXML::Element::new('pays').add_text(p.nom)) - } - racine.add(lespays) - - racine.add(REXML::Element::new('duree').add_text(@duree.to_s)) - - racine.add(REXML::Element::new('critiquePresse').add_text(@critiquePresse)) - racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur)) - - genres = REXML::Element::new('genres') - @genres.each{|g| - genres.add(REXML::Element::new('genre').add_text(g.nom)) - } - racine.add(genres) - - synopsisElement = REXML::Element::new('synopsis') - @synopsis.split("\n").each{|s| - next if s =~ /^\s*$/ - synopsisElement.add(REXML::Element::new('p').add_text(s)) - } - racine.add(synopsisElement) - - budgetElement = REXML::Element::new('budget') - budgetElement.add_text(@budget) - budgetElement.add_attribute('unite', @budgetUnite) - racine.add(budgetElement) - - racine.add(REXML::Element::new('url').add_text(@url)) - - racine - end end \ No newline at end of file diff --git a/src/films.rb b/src/films.rb new file mode 100644 index 0000000..a934dbb --- /dev/null +++ b/src/films.rb @@ -0,0 +1,230 @@ +# Représente un ensemble de films + +require 'rexml/document' +require 'thwait' + +require 'film.rb' +require 'pays.rb' +require 'genre.rb' +require 'personne.rb' +require 'constantes.rb' + +class Films + def initialize(xmlFile) + @xmlFile = xmlFile + + # repertoire de base, par exemple C:/Divx/ + @repBase = '' + + # Les films indexés par leur titre + @films = {} + + # Les films indexés par leur nom de fichier, deux fichiers différents peuvent pointer sur le même film + @filmsFichier = {} + + # Les films qui ont plusieurs réponses lors de la recherche, traités à la fin + @filmsPlusieursReponses = [] + + @threadsWait = ThreadsWait::new + @nbConn = 0 # le nombre de connexion + + # le prochain id disponible + @idDisponible = 1 + + chargerFilms + end + + # Lit un repertoire de manière recursive et va chercher les informations concernant le film sur le net + def pomper(r) + @repBase = r + repPrecedant = Dir::getwd + Dir::chdir(r) + + pomperR('.') + + # on attends que les threads se terminent + @threadsWait.all_waits + + # traite les films qui avaient plusieurs réponses lors de la recherche + # l'utilisateur doit faire un choix + i = 1 + @filmsPlusieursReponses.each{|f| + puts + puts "Plop, ya un conflit #{i} / #{@filmsPlusieursReponses.length} :" + if f.reglerConflitPlusieursReponses + ajouterFilm(f) + end + i += 1 + } + + Dir::chdir(repPrecedant) + end + + # Sauve les films dans un fichier XML + def sauverFilms + # le document + docXml = REXML::Document::new + docXml.xml_decl().encoding = "UTF-8" # normalement UTF-8 + docXml.xml_decl().dowrite + + # la racine du document + racine = REXML::Element::new('filmographie') + docXml.add(racine) + pi = REXML::Instruction.new("xml-stylesheet", "type=\"text/xsl\" href=\"../xsl/yopyop.xsl\"") + racine.previous_sibling = pi + + # on ajoute chaque film à la racine + @films.each{|nom, f| + racine.add(f.getXml) + } + + # sauve le document + docXml.write(File::new(@xmlFile, 'w'), 0) + end + + private + + # Charge les films depuis le fichier XML + def chargerFilms + # si le fichier n'existe pas il n'y a rien à charger + if !File.exists?(@xmlFile) + return + end + + racine = REXML::Document::new(File::new(@xmlFile)).root + racine.each_element{|e| + id = e.attribute('id').to_s.to_i + + if id > @idDisponible + @idDisponible = id + 1 + end + + titre = e.get_elements('titre')[0].get_text + + fichiers = e.get_elements('fichiers')[0].get_elements('fichier') + annee = e.get_elements('annee')[0].get_text + duree = e.get_elements('duree')[0].get_text + critiquePresse = e.get_elements('critiquePresse')[0].get_text + critiqueSpectateur = e.get_elements('critiqueSpectateur')[0].get_text + synopsis = e.get_elements('synopsis')[0].get_elements('p') + budget = e.get_elements('budget')[0].get_text + realisateurs = e.get_elements('realisateurs')[0].get_elements('realisateur') + acteurs = e.get_elements('acteurs')[0].get_elements('acteur') + pays = e.get_elements('lespays')[0].get_elements('pays') + genres = e.get_elements('genres')[0].get_elements('genre') + + film = Film::new(fichiers[0].get_text.value) + + film.titre = titre.value unless titre.nil? + film.id = id + fichiers.each{|e| + film.addFichier(e.get_text.value) + @filmsFichier[e.get_text.value] = film + } + film.annee = annee.value unless annee.nil? + acteurs.each{|e| + film.acteurs << Personne::ajouter(e.get_text.value) + } + pays.each{|e| + film.pays << Pays::ajouter(e.get_text.value) + } + film.duree = duree.value unless duree.nil? + film.critiquePresse = critiquePresse.value unless critiquePresse.nil? + film.critiqueSpectateur = critiqueSpectateur.value unless critiqueSpectateur.nil? + genres.each{|e| + film.genres << Genre::ajouter(e.get_text.value) if e.get_text != nil + } + debut = true + film.synopsis = "" + synopsis.each{|e| + film.synopsis += "\n" unless debut + film.synopsis += e.get_text.value if e.get_text != nil + debut = false + } + film.budget = budget.value unless budget.nil? + @films[film.titre] = film + } + end + + # Retourne un nouvel id, utilisé lors de la création d'un nouveau film + def getNewId + id = @idDisponible + @idDisponible += 1 + return id + end + + # Ajoute un film + def ajouterFilm(film) + if film.plusieursReponses? + @filmsPlusieursReponses << film + return + end + + # le film existe déjà + if @films.has_key?(film.titre) + # le fichier n'est pas connu -> nième partie d'un film + if !@filmsFichier.has_key?(film.fichiers[0]) + puts "[i] movie #{film.titre} has a another file part : #{film.fichiers[0]}" + @films[film.titre].addFichier(film.fichiers[0]) + @filmsFichier[film.fichiers[0]] = @films[film.titre] + else + puts "[!] Duplicate movie : #{film.titre} (#{film.fichiers[0]})" + end + else + puts "[i] movie added : #{film.titre} (#{film.fichiers[0]})" + @films[film.titre] = film + @filmsFichier[film.fichiers[0]] = film + end + end + + # Appelé par 'pomper'. Cette méthode est récursive. + def pomperR(r) + Dir::foreach(r){|f| + next if f[0,1] == '.' + fichier = (r == '.' ? '' : r + "/") + f + if File::directory?(fichier) + litRepertoireR(fichier) + else + + # vérification de l'extension + /^.*?\.(.{3,4})$/ =~ fichier + if !FILMS_EXTENSIONS.include?($1) + next + end + + fichier = CGI::escapeHTML(fichier.unpack("C*").pack("U*")) + + # on skip si le film est déjàa dans la BD + if film = @filmsFichier[fichier] + puts "[i] Already exists in DB : #{film.titre} (#{fichier})" + next + end + + film = nil + + # pour limiter le nombre de connexion simultanée + if @nbConn >= NB_CONN_MAX + @threadsWait.next_wait + end + + @nbConn += 1 + @threadsWait.join_nowait( + Thread::new{ + begin + film = Film::new(fichier).loadData + film.id = getNewId # on lui donne un nouvel ID + + unless film.nil? # le film a été correctement construit + ajouterFilm(film) + end + rescue Exception => e + puts e.message + puts e.backtrace + end + @nbConn -= 1 + } + ) + end + } + end +end \ No newline at end of file diff --git a/src/yopyop.rb b/src/yopyop.rb index f9ddd91..8d87adf 100644 --- a/src/yopyop.rb +++ b/src/yopyop.rb @@ -13,13 +13,11 @@ # - Rechercher chaque film sur le site 'allocine.com' et 'imdb.com' et en pomper un max d'infos # - Etablir une petit base de données des films au format xml +require 'films.rb' + # non ce n'est pas du perl ;) $: << Dir::getwd + "/" + __FILE__.split('/')[0] -#$KCODE = 'UTF-8' -#require 'jcode.rb' -require 'film.rb' - # vérifie les arguments donnés rep = '.' if $*.empty? @@ -38,10 +36,10 @@ unless File::directory?(rep) end # charge les films à partir du fichier xml -Film::loadFilmsXml(xmlFile) +films = Films::new(xmlFile) -# lit le repertoire -Film::litRepertoire(rep) +# parcours le dossier donné et recherche les infos sur le net +films.pomper(rep) # ecrit le fichier XML -Film::getFilmsXml.write(File::new(xmlFile, 'w'), 0) +films.sauverFilms() diff --git a/start_test.bat b/start_test.bat index 6524781..07dc28f 100644 --- a/start_test.bat +++ b/start_test.bat @@ -1 +1,3 @@ -C:\ruby\bin\ruby src/yopyop.rb xml/test.xml test \ No newline at end of file +cd src +C:\ruby\bin\ruby yopyop.rb ../xml/test.xml ../test +cd .. \ No newline at end of file diff --git a/xml/test.xml b/xml/test.xml index b19ebda..ced216a 100644 --- a/xml/test.xml +++ b/xml/test.xml @@ -1,15 +1,44 @@ - + + + Big Boss.avi + + Big boss + 1971 + + + Bruce Lee + James Tien + Yin-Chieh Han + + + hong-kongais + + 94 + + + + Drame + Divers + Action + Drame + Arts Martiaux + + +

Un ouvrier venant de la campagne se révolte contre la milice engagée par son patron pour briser une grève.

+
+ + +
+ Banlieue 13.avi Banlieue 13 2003 - - Pierre Morel - + Cyril Raffaelli David Belle @@ -30,17 +59,15 @@

Et c'est bien la mission la plus extrême de sa carrière qui vient de lui être confiée : une arme de destruction massive a été dérobée par le plus puissant gang de la banlieue. Damien est chargé d'infiltrer dans le secteur pour désamorcer la bombe ou la récupérer.

- http://www.allocine.fr/film/fichefilm_gen_cfilm=54107.html +
- + Le 51e Etat.rmvb Le 51e Etat 2001 - - Ronny Yu - + Samuel L. Jackson Robert Carlyle @@ -63,17 +90,15 @@

Ce qu'ignore Elmo c'est que son ex-patron est toujours vivant, déterminé à se venger et à mettre la main sur la formule chimique. Et en plus il n'est pas le seul : la superbe et dangereuse Dakota Phillips est également sur ses traces.

- http://www.allocine.fr/film/fichefilm_gen_cfilm=29085.html +
- + Robocop 3.avi Robocop 3 1992 - - Fred Dekker - + Robert John Burke Nancy Allen @@ -94,17 +119,44 @@

Dans un futur proche, la multinationale OCP decide de construire Delta City sur les ruines du vieux Detroit. Un groupe d'habitants irreductibles refuse de quitter les lieux. Pour les convaincre, OCP decide de reprogrammer Rococop, policier d'elite fabrique a partir de l'officier Murphy. Mais le docteur Lazarus, charge de l'entretien de Robocop, refuse d'effacer la memoire de Murphy.

- http://www.allocine.fr/film/fichefilm_gen_cfilm=8143.html +
- + + + A Toute Epreuve.rmvb + + A toute epreuve + 1992 + + + Tony Leung Chiu Wai + Chow Yun-Fat + Teresa Mo + + + hong-kongais + chinois + + 130 + + + + Policier + Action + + +

Hong-Kong 1997. Les Britannique vont rendre dans quelques mois a la Chine populaire une ville corrompue par le crime. Alors que les policiers ont baissé les bras, un groupe d'inspecteurs, mene par Yuen, surnommé Tequila, décide de mettre fin a la suprématie des gangs.

+
+ + +
+ Assaut sur le central 13 [H264 Aac] [Fr Eng] [Fr Eng Spa] [XCT].mkv Assaut sur le central 13 2004 - - Jean-Francois Richet - + Ethan Hawke Laurence Fishburne @@ -125,37 +177,91 @@

Alors que le monde entier fait la fête, flics et malfrats vont devoir s'unir pour avoir une chance de survivre à l'assaut mortel venu du dehors. Face aux moyens démesurés des attaquants, un seul objectif : tenir jusqu'à l'aube...

- http://www.allocine.fr/film/fichefilm_gen_cfilm=55907.html +
- + - A Toute Epreuve.rmvb + Sky High.avi - A toute epreuve - 1992 - - John Woo - + L'Ecole fantastique + 2003 + - Tony Leung Chiu Wai - Chow Yun-Fat - Teresa Mo + Michael Angarano + Danielle Panabaker + Mary Elizabeth Winstead - hong-kongais - chinois + américain - 130 + 102 + + + + Comédie + Famille + Fantastique + + +

Will est un jeune garçon tout à fait normal si ce n'est qu'il doit intégrer la prestigieuse école de super-héros appelée Sky High et qu'il n'a pour le moment, aucune idée des super-pouvoirs qui le caractérisent... Il devra jongler entre les super-moqueries de ses camarades et la déception de ses parents, un couple de super-héros légendaires...

+
+ + +
+ + + Robocop 1.avi + + Robocop + 1987 + + + Nancy Allen + Peter Weller + Dan O'Herlihy + + + américain + + 102 + + + + Fantastique + + +

A l'aube de l'an 2000, Detroit est, comme toujours dans cette sorte d'histoire, la proie du crime et de la corruption. Pour pallier ce terrible etat, les services de police inventent une nouvelle arme infaillible, Robocop, mi-homme, mi-robot, policier electronique de chair et d'acier qui a pour mission de sauvegarder la tranquillite de la ville. Mais comme souvent, ce cyborg a aussi une ame.

+
+ + +
+ + + Rocky [x264 Aac] [Fr Eng] [Fr Eng].mkv + + Rocky + 1976 + + + Sylvester Stallone + Talia Shire + Burt Young + + + américain + + 119 - Policier Action + Drame -

Hong-Kong 1997. Les Britannique vont rendre dans quelques mois a la Chine populaire une ville corrompue par le crime. Alors que les policiers ont baissé les bras, un groupe d'inspecteurs, mene par Yuen, surnommé Tequila, décide de mettre fin a la suprématie des gangs.

+

Dans les quartiers populaires de Philadelphie, Rocky Balboa collecte des dettes non payées pour Tony Gazzo, un usurier, et dispute de temps à autre, pour quelques dizaines de dollars, des combats de boxe sous l'appellation de "l'étalon italien". Cependant, Mickey, son vieil entraîneur, le laisse tomber. Son ami Paulie, qui travaille dans un entrepôt frigorifique, encourage Rocky à sortir avec sa soeur Adrian, une jeune vendeuse réservée d'un magasin d'animaux domestiques.

+

Pendant ce temps, Apollo Creed, le champion du monde de boxe catégorie poids lourd, recherche un nouvel adversaire pour remettre son titre en jeu. Son choix se portera sur Rocky.

- http://www.allocine.fr/film/fichefilm_gen_cfilm=8035.html +
\ No newline at end of file -- 2.43.0