X-Git-Url: http://git.euphorik.ch/?p=pompage.git;a=blobdiff_plain;f=src%2Ffilm.rb;h=a7bcc54d2a2a2ee2ee51be7dc7c21cc6879e0f65;hp=658b9d3a1f4550dd532cf4e84efb0bb5687fbedb;hb=868d7866eee089c6e9f9a9a4304b8ab55a05fca1;hpb=352486aa8c9b00a3208267f24980d09190d18003 diff --git a/src/film.rb b/src/film.rb index 658b9d3..a7bcc54 100644 --- a/src/film.rb +++ b/src/film.rb @@ -13,10 +13,10 @@ require 'constantes.rb' class Film attr_accessor :titre, :fichier, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget - # Les films indexés par leur titre + # Les films indexés par leur titre @@films = {} - # Les films indexés par leur nom de fichier + # Les films indexés par leur nom de fichier @@filmsFichier = {} @@mutex = Mutex::new @@ -24,7 +24,7 @@ class Film @@nbConn = 0 - # Lit un repertoire de manière recursive + # Lit un repertoire de manière recursive def Film::litRepertoire(r) Film::litRepertoireR(r) # on attends que les threads se terminent @@ -82,15 +82,21 @@ class Film # Renvoie tous les films sous la forme d'un document XML. def Film::getFilmsXml - racine = REXML::Element::new('filmographie') + # 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) - docXml.xml_decl().encoding = "UTF-8" - docXml.xml_decl().dowrite + # on ajoute chaque film à la racine @@films.each{|nom, f| racine.add(f.getXml) } + + # revoie le document docXml end @@ -111,7 +117,7 @@ private litRepertoireR(fichier) else - #si le film n'existe pas déjà dans la liste + #si le film n'existe pas déjà dans la liste if film = @@filmsFichier[fichier] puts "[i] Already exists in DB : #{film.titre} (#{film.fichier})" next @@ -149,7 +155,9 @@ private def initialize(fichier) - @fichier = fichier + #convertit le code latin-1 en UTF8 + @fichier = fichier.unpack("C*").pack("U*") + @titre = '' @annee = nil @realisateurs = [] @@ -162,12 +170,13 @@ private @synopsis = nil @budget = nil @budgetUnite = 'euro' + @url end public - # Charge les informations du films à partir d'allocine.fr - # ret [Film] : soit même + # Charge les informations du films à partir d'allocine.fr + # ret [Film] def loadData unless LOAD_DATA @titre = @fichier @@ -176,23 +185,29 @@ public connexionHttp = Net::HTTP::new('www.allocine.fr'); - #extrait le nom à partire du nom du fichier + #extrait le nom à partir du nom du fichier /^.*?([^\/]*?)\.(.{3,4})$/ =~ @fichier #remplace undescores et points par des espaces titre = $1.gsub(/[_\.]/, ' ') - #vire les espaces au début et à la fin - titre.strip! #remplace les suites d'espaces par un seul titre.gsub!(/ {2,}/,' ') titre.gsub!(/\[.*?\]/,'') titre.gsub!(/\(.*?\)/,'') + titre.gsub!(/\{.*?\}/,'') + #vire les espaces au début et à la fin + titre.strip! + @titre = titre.dup donneesHtml = nil begin reponse, donneesHtml = connexionHttp.get("/recherche/?motcle=#{CGI::escape(titre)}") - #si pas trouvé alors on enlève un mot à la fin - if /.*?Pas de résultats.*?/ =~ donneesHtml + + #convertit le code latin-1 en UTF8 + donneesHtml = donneesHtml.unpack("C*").pack("U*") + + #si pas trouvé alors on enlève un mot à la fin + if /.*?Pas de résultats.*?/ =~ donneesHtml /(.*?)[^ ]+?$/ =~ titre.strip titre = $1 titre.strip! @@ -204,7 +219,13 @@ public unless titre.nil? or titre.empty? // =~ donneesHtml if $1 - r, ficheHtml = connexionHttp.get("/film/fichefilm_gen_cfilm=#{$1}.html") + r, ficheHtml = connexionHttp.get("/film/fichefilm_gen_cfilm=#{$1}.html") + + #convertit le code latin-1 en UTF8 + ficheHtml = ficheHtml.unpack("C*").pack("U*") + + #url + @url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=#{$1}.html" # Titre /(.*?)<\/title>/ =~ ficheHtml @@ -212,28 +233,31 @@ public puts "Movie found : #{@titre} (#{@fichier})" - # Année - /<h4>Année de production : (\d+)<\/h4>/ =~ ficheHtml - @annee = $1.to_i unless $1.nil? + # Année + /<h4>Année de production : (\d+)<\/h4>/ =~ ficheHtml + @annee = $1.to_i unless $1.nil? + + # Réalisateurs + /<h4>Réalisé par(.*?)<\/h4>/ =~ ficheHtml + $1.scan(/<a class="link1" href=".*?">(.*?)<\/a>/m){|a| + @realisateurs << Personne::ajouter(a[0]) unless a[0].nil? + } unless $1.nil? - # Réalisateurs - /Réalisé par <a class="link1" href=".*?" target="">(.*?)<\/a>/ =~ ficheHtml - @realisateurs << Personne::ajouter($1) unless $1.nil? - # Acteurs - /Avec(.*)/ =~ ficheHtml - $1.scan(/<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html" target="">(.+?)<\/a>/m){|a| + /<h4>Avec(.*?)<\/h4>/ =~ ficheHtml + $1.scan(/<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>/m){|a| @acteurs << Personne::ajouter(a[0]) unless a[0].nil? - } unless $1.nil? + } unless $1.nil? + # Pays - /^<h4>Film (.*?)\.<\/h4>/ =~ ficheHtml + /<h4>Film (.*?)\. <\/h4>/ =~ ficheHtml $1.split(',').each{|pays| @pays << Pays::ajouter(pays) unless pays.nil? } unless $1.nil? # Duree - /<h4>Durée : (\d+)h (\d+)min./ =~ ficheHtml + /<h4>Durée : (\d+)h (\d+)min./ =~ ficheHtml @duree = $1.nil? ? $2.to_i : $1.to_i * 60 + $2.to_i # Critiques presse et spectateur @@ -242,7 +266,7 @@ public @critiqueSpectateur = $2.to_i unless $2.nil? # Genre - /Genre : (.*)/ =~ ficheHtml + /<h4>Genre : (.*?)<\/h4>/ =~ ficheHtml $1.scan(/<a href="\/film\/alaffiche_genre_gen_genre=.*?" class="link1">(.+?)<\/a>/m){|g| @genres << Genre::ajouter(g[0]) unless g[0].nil? } unless $1.nil? @@ -261,34 +285,49 @@ public self end - def getXml + # Renvoie un film sous la forme d'un élément XML de type REXML + def getXml racine = REXML::Element::new('film') racine.add(REXML::Element::new('fichier').add_text(@fichier)) racine.add(REXML::Element::new('titre').add_text(@titre)) racine.add(REXML::Element::new('annee').add_text(@annee.to_s)) + realisateurs = REXML::Element::new('realisateurs') @realisateurs.each{|r| - racine.add(REXML::Element::new('realisateur').add_text(r.nom)) + realisateurs.add(REXML::Element::new('realisateur').add_text(r.nom)) } + racine.add(realisateurs) + acteurs = REXML::Element::new('acteurs') @acteurs.each{|a| - racine.add(REXML::Element::new('acteur').add_text(a.nom)) + acteurs.add(REXML::Element::new('acteur').add_text(a.nom)) } + racine.add(acteurs) + + lespays = REXML::Element::new('lespays') @pays.each{|p| - racine.add(REXML::Element::new('pays').add_text(p.nom)) + 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.to_s)) racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur.to_s)) + + genres = REXML::Element::new('genres') @genres.each{|g| - racine.add(REXML::Element::new('genre').add_text(g.nom)) + genres.add(REXML::Element::new('genre').add_text(g.nom)) } + racine.add(genres) + racine.add(REXML::Element::new('synopsis').add_text(@synopsis)) budgetElement = REXML::Element::new('budget') budgetElement.add_text(@budget.to_s) budgetElement.add_attribute('unite', @budgetUnite) racine.add(budgetElement) + + racine.add(REXML::Element::new('url').add_text(@url)) racine end