-# Attention, le but de ce fichier n'est pas d'être le plus clair possible ^-^´´\r
+# Représente un Film.\r
+# Permet de charger des données depuis allocine.fr\r
+# Permet d'effectuer des recherches depuis allocine.fr\r
+# TODO : rendre la classe indépendant de la source de donnée pour pouvoir utiliser d'autres sites comme par exemple imdb.com\r
\r
-require 'rexml/document'\r
require 'net/http'\r
-require 'thread'\r
-require 'thwait'\r
require 'cgi'\r
\r
require 'pays.rb'\r
require 'genre.rb'\r
require 'personne.rb'\r
-\r
require 'constantes.rb'\r
\r
class String\r
\r
class Film\r
attr_accessor :id, :titre, :fichiers, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget\r
- \r
- # repertoire de base, par exemple C:/Divx/\r
- @@repBase = '' \r
- \r
- # Les films indexés par leur titre\r
- @@films = {}\r
- \r
- # Les films indexés par leur nom de fichier, deux fichiers différents peuvent pointer sur le même film\r
- @@filmsFichier = {}\r
- \r
- # Les films qui ont plusieurs réponses lors de la recherche, traités à la fin\r
- @@filmsPlusieursReponses = []\r
-\r
- @@threadsWait = ThreadsWait::new\r
- @@nbConn = 0\r
- \r
- # le prochain id disponible\r
- @@idDisponible = 1\r
- \r
- # retourne un nouvel id, utilisé lors de la création d'un nouveau film\r
- def Film::getNewId\r
- id = @@idDisponible\r
- @@idDisponible += 1\r
- return id\r
- end\r
-\r
- # Lit un repertoire de manière recursive\r
- def Film::litRepertoire(r)\r
- @@repBase = r\r
- repPrecedant = Dir::getwd\r
- Dir::chdir(r)\r
- \r
- Film::litRepertoireR('.')\r
- \r
- # on attends que les threads se terminent\r
- @@threadsWait.all_waits\r
- \r
- # traite les films qui avaient plusieurs réponses lors de la recherche\r
- # l'utilisateur doit faire un choix\r
- i = 1\r
- @@filmsPlusieursReponses.each{|f|\r
- puts\r
- puts "Plop, ya un conflit #{i} / #{@@filmsPlusieursReponses.length} :"\r
- if f.reglerConflitPlusieursReponses\r
- Film::ajouterFilm(f)\r
- end\r
- i += 1\r
- }\r
- \r
- Dir::chdir(repPrecedant) \r
- end\r
- \r
- # Charge les films contenus dans un fichier XML.\r
- def Film::loadFilmsXml(xmlFile)\r
- # si le fichier n'existe pas il n'y a rien à charger\r
- if !File.exists?(xmlFile)\r
- return\r
- end\r
- \r
- racine = REXML::Document::new(File::new(xmlFile)).root\r
- racine.each_element{|e| \r
- id = e.attribute('id').to_s.to_i\r
- \r
- if id > @@idDisponible\r
- @@idDisponible = id + 1 \r
- end\r
- \r
- titre = e.get_elements('titre')[0].get_text\r
- \r
- fichiers = e.get_elements('fichiers')[0].get_elements('fichier')\r
- annee = e.get_elements('annee')[0].get_text\r
- duree = e.get_elements('duree')[0].get_text\r
- critiquePresse = e.get_elements('critiquePresse')[0].get_text\r
- critiqueSpectateur = e.get_elements('critiqueSpectateur')[0].get_text\r
- synopsis = e.get_elements('synopsis')[0].get_text\r
- budget = e.get_elements('budget')[0].get_text \r
- realisateurs = e.get_elements('realisateurs')[0].get_elements('realisateur')\r
- acteurs = e.get_elements('acteurs')[0].get_elements('acteur')\r
- pays = e.get_elements('lespays')[0].get_elements('pays')\r
- genres = e.get_elements('genres')[0].get_elements('genre')\r
- \r
- film = Film::new(fichiers[0].get_text.value)\r
- \r
- film.titre = titre.value unless titre.nil?\r
- film.id = id\r
- fichiers.each{|e|\r
- film.addFichier(e.get_text.value)\r
- @@filmsFichier[e.get_text.value] = film\r
- }\r
- film.annee = annee.value unless annee.nil?\r
- acteurs.each{|e|\r
- film.acteurs << Personne::ajouter(e.get_text.value)\r
- }\r
- pays.each{|e|\r
- film.pays << Pays::ajouter(e.get_text.value)\r
- }\r
- film.duree = duree.value unless duree.nil?\r
- film.critiquePresse = critiquePresse.value unless critiquePresse.nil?\r
- film.critiqueSpectateur = critiqueSpectateur.value unless critiqueSpectateur.nil?\r
- genres.each{|e|\r
- film.genres << Genre::ajouter(e.get_text.value) if e.get_text != nil\r
- }\r
- film.synopsis = synopsis.value unless synopsis.nil?\r
- film.budget = budget.value unless budget.nil?\r
- @@films[film.titre] = film\r
- }\r
- end\r
-\r
- # Renvoie tous les films sous la forme d'un document XML.\r
- def Film::getFilmsXml\r
- # le document\r
- docXml = REXML::Document::new\r
- docXml.xml_decl().encoding = "UTF-8" # normalement UTF-8\r
- docXml.xml_decl().dowrite\r
- \r
- # la racine du document\r
- racine = REXML::Element::new('filmographie')\r
- docXml.add(racine)\r
- pi = REXML::Instruction.new("xml-stylesheet", "type=\"text/xsl\" href=\"../xsl/yopyop.xsl\"")\r
- racine.previous_sibling = pi\r
- \r
- # on ajoute chaque film à la racine\r
- @@films.each{|nom, f|\r
- racine.add(f.getXml)\r
- } \r
- \r
- # revoie le document\r
- docXml\r
- end\r
- \r
-private\r
\r
- def Film::filmsFactory(fichier)\r
- Film::new(fichier).loadData\r
- end\r
- \r
- def Film::litRepertoireR(r)\r
- Dir::foreach(r){|f|\r
- next if f[0,1] == '.'\r
- fichier = (r == '.' ? '' : r + "/") + f\r
- if File::directory?(fichier)\r
- litRepertoireR(fichier) \r
- else\r
- \r
- # vérification de l'extension\r
- /^.*?\.(.{3,4})$/ =~ fichier\r
- if !FILMS_EXTENSIONS.include?($1)\r
- next\r
- end\r
- \r
- fichier = CGI::escapeHTML(fichier.unpack("C*").pack("U*"))\r
- \r
- # on skip si le film est déjàa dans la BD\r
- if film = @@filmsFichier[fichier]\r
- puts "[i] Already exists in DB : #{film.titre} (#{fichier})"\r
- next\r
- end\r
- \r
- #p fichier\r
- \r
- film = nil\r
- \r
- if @@nbConn >= NB_CONN_MAX\r
- @@threadsWait.next_wait\r
- end\r
- \r
- @@nbConn += 1 \r
- @@threadsWait.join_nowait(\r
- Thread::new{\r
- begin \r
- film = Film::filmsFactory(fichier) \r
- unless film.nil? # le film a été correctement construit\r
- Film::ajouterFilm(film)\r
- end\r
- rescue Exception => e\r
- puts e.message\r
- puts e.backtrace\r
- end \r
- @@nbConn -= 1\r
- }\r
- )\r
- end\r
- }\r
- end\r
- \r
- def Film::ajouterFilm(film)\r
- if film.plusieursReponses?\r
- @@filmsPlusieursReponses << film\r
- return\r
- end\r
- \r
- # le film existe déjà\r
- if @@films.has_key?(film.titre)\r
- # le fichier n'est pas connu -> nième partie d'un film\r
- if !@@filmsFichier.has_key?(film.fichiers[0])\r
- puts "[i] movie #{film.titre} has a another file part : #{film.fichiers[0]}"\r
- @@films[film.titre].addFichier(film.fichiers[0])\r
- @@filmsFichier[film.fichiers[0]] = @@films[film.titre] \r
- else\r
- puts "[!] Duplicate movie : #{film.titre} (#{film.fichiers[0]})"\r
- end\r
- else\r
- puts "[i] movie added : #{film.titre} (#{film.fichiers[0]})"\r
- @@films[film.titre] = film\r
- @@filmsFichier[film.fichiers[0]] = film\r
- end\r
- end\r
- \r
- \r
+ # Constructeur. N'entreprend aucune action (chargement), crée juste un film vide.\r
def initialize(fichier)\r
@fichiers = [fichier]\r
\r
@idsAllocine = {}\r
end\r
\r
-public \r
-\r
+ # Est-ce qu'il y a eu plusieurs réponses pour ce film lors de la cherche sur le net ?\r
def plusieursReponses?\r
return @aPlusieursReponses\r
end \r
\r
- # demande à l'utilisateur de faire un choix\r
+ # Demande à l'utilisateur de faire un choix\r
# ret : true si le conflit à été résolu sinon false\r
def reglerConflitPlusieursReponses\r
\r
return true\r
end\r
\r
+ # Ajoute un fichier comme faisant partie du film\r
def addFichier(fichier)\r
if !@fichiers.include?(fichier)\r
@fichiers << fichier\r
@titre = @fichiers[0]\r
return self\r
end\r
- \r
- @id = Film::getNewId\r
\r
connexionHttp = Net::HTTP::new('www.allocine.fr')\r
\r
\r
unless titre.nil? or titre.empty?\r
\r
- #/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">/ =~ donneesHtml\r
- #r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>/)\r
r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>(?:<\/h4><h5 style="color: #666666"> (.*?)<\/h5>){0,1}(?:<h4><br \/><\/h4>){0,1}(?:<h4 style="color: #666666"> de (.*?)<\/h4>){0,1}(?:<h4 style="color: #666666"> avec (.*?)<\/h4>){0,1}(?:<h4 style="color: #666666"> \((.*?)\)<\/h4>){0,1}/)\r
\r
if r.length > 1\r
self\r
end\r
\r
+ # Renvoie un film sous la forme d'un élément XML de type REXML::Element.\r
+ def getXml\r
+ \r
+ racine = REXML::Element::new('film')\r
+ racine.add_attribute('id', @id.to_s)\r
+ \r
+ fichiers = REXML::Element::new('fichiers')\r
+ @fichiers.each{|f|\r
+ fichiers.add(REXML::Element::new('fichier').add_text(f)) \r
+ }\r
+ racine.add(fichiers) \r
+ \r
+ racine.add(REXML::Element::new('titre').add_text(@titre))\r
+ racine.add(REXML::Element::new('annee').add_text(@annee))\r
+\r
+ realisateurs = REXML::Element::new('realisateurs') \r
+ @realisateurs.each{|r|\r
+ realisateurs.add(REXML::Element::new('realisateur').add_text(r.nom))\r
+ }\r
+ racine.add(realisateurs)\r
+ \r
+ acteurs = REXML::Element::new('acteurs') \r
+ @acteurs.each{|a|\r
+ acteurs.add(REXML::Element::new('acteur').add_text(a.nom))\r
+ }\r
+ racine.add(acteurs) \r
+ \r
+ lespays = REXML::Element::new('lespays')\r
+ @pays.each{|p|\r
+ lespays.add(REXML::Element::new('pays').add_text(p.nom))\r
+ } \r
+ racine.add(lespays) \r
+ \r
+ racine.add(REXML::Element::new('duree').add_text(@duree.to_s))\r
+\r
+ racine.add(REXML::Element::new('critiquePresse').add_text(@critiquePresse))\r
+ racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur))\r
+ \r
+ genres = REXML::Element::new('genres')\r
+ @genres.each{|g|\r
+ genres.add(REXML::Element::new('genre').add_text(g.nom))\r
+ } \r
+ racine.add(genres) \r
+ \r
+ synopsisElement = REXML::Element::new('synopsis')\r
+ unless @synopsis.nil?\r
+ @synopsis.split("\n").each{|s|\r
+ next if s =~ /^\s*$/\r
+ synopsisElement.add(REXML::Element::new('p').add_text(s))\r
+ }\r
+ end \r
+ racine.add(synopsisElement)\r
+ \r
+ budgetElement = REXML::Element::new('budget')\r
+ budgetElement.add_text(@budget)\r
+ budgetElement.add_attribute('unite', @budgetUnite)\r
+ racine.add(budgetElement)\r
+ \r
+ racine.add(REXML::Element::new('url').add_text(@url))\r
+\r
+ racine\r
+ end\r
+ \r
private\r
def loadDepuisIdAllocine(id, connexionHttp = nil)\r
if (connexionHttp == nil)\r
\r
# Réalisateurs\r
/<h4>Réalisé par(.*?)<\/h4>/ =~ ficheHtml\r
- $1.scan(/<a class="link1" href=".*?">(.*?)<\/a>/m){|a|\r
+ $1.scan(/\s*<a class="link1" href=".*?">(.*?)<\/a>\s*/m){|a|\r
@realisateurs << Personne::ajouter(a[0]) unless a[0].nil?\r
} unless $1.nil?\r
\r
# Acteurs\r
/<h4>Avec(.*?)<\/h4>/ =~ ficheHtml\r
- $1.scan(/<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>/m){|a|\r
+ $1.scan(/\s*<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>\s*/m){|a|\r
@acteurs << Personne::ajouter(a[0]) unless a[0].nil? \r
} unless $1.nil? \r
\r
\r
# Synopsis \r
/Synopsis.*?<h4>(.*?)<\/h4>/m =~ ficheHtml\r
- unless $1.nil\r
- {\r
+ unless $1.nil?\r
@synopsis = $1\r
@synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
@synopsis.virerBalisesHTML!\r
- }\r
+ end\r
\r
# Budget \r
/Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml\r
@budget = $1 unless $1.nil?\r
end \r
- \r
-public\r
- \r
- # Renvoie un film sous la forme d'un élément XML de type REXML\r
- def getXml\r
- \r
- racine = REXML::Element::new('film')\r
- racine.add_attribute('id', @id.to_s)\r
- \r
- fichiers = REXML::Element::new('fichiers')\r
- @fichiers.each{|f|\r
- fichiers.add(REXML::Element::new('fichier').add_text(f)) \r
- }\r
- racine.add(fichiers) \r
- \r
- racine.add(REXML::Element::new('titre').add_text(@titre))\r
- racine.add(REXML::Element::new('annee').add_text(@annee))\r
-\r
- realisateurs = REXML::Element::new('realisateurs') \r
- @realisateurs.each{|r|\r
- realisateurs.add(REXML::Element::new('realisateur').add_text(r.nom))\r
- }\r
- racine.add(realisateurs)\r
- \r
- acteurs = REXML::Element::new('acteurs') \r
- @acteurs.each{|a|\r
- acteurs.add(REXML::Element::new('acteur').add_text(a.nom))\r
- }\r
- racine.add(acteurs) \r
- \r
- lespays = REXML::Element::new('lespays')\r
- @pays.each{|p|\r
- lespays.add(REXML::Element::new('pays').add_text(p.nom))\r
- } \r
- racine.add(lespays) \r
- \r
- racine.add(REXML::Element::new('duree').add_text(@duree.to_s))\r
-\r
- racine.add(REXML::Element::new('critiquePresse').add_text(@critiquePresse))\r
- racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur))\r
- \r
- genres = REXML::Element::new('genres')\r
- @genres.each{|g|\r
- genres.add(REXML::Element::new('genre').add_text(g.nom))\r
- } \r
- racine.add(genres) \r
- \r
- synopsisElement = REXML::Element::new('synopsis')\r
- @synopsis.split("\n").each{|s|\r
- next if s =~ /^\s*$/\r
- synopsisElement.add(REXML::Element::new('p').add_text(s))\r
- }\r
- racine.add(synopsisElement)\r
- \r
- budgetElement = REXML::Element::new('budget')\r
- budgetElement.add_text(@budget)\r
- budgetElement.add_attribute('unite', @budgetUnite)\r
- racine.add(budgetElement)\r
- \r
- racine.add(REXML::Element::new('url').add_text(@url))\r
-\r
- racine\r
- end\r
end\r
\ No newline at end of file
--- /dev/null
+# Représente un ensemble de films\r
+\r
+require 'rexml/document'\r
+require 'thwait'\r
+\r
+require 'film.rb'\r
+require 'pays.rb'\r
+require 'genre.rb'\r
+require 'personne.rb'\r
+require 'constantes.rb'\r
+\r
+class Films\r
+ def initialize(xmlFile)\r
+ @xmlFile = xmlFile\r
+ \r
+ # repertoire de base, par exemple C:/Divx/\r
+ @repBase = '' \r
+ \r
+ # Les films indexés par leur titre\r
+ @films = {}\r
+ \r
+ # Les films indexés par leur nom de fichier, deux fichiers différents peuvent pointer sur le même film\r
+ @filmsFichier = {}\r
+ \r
+ # Les films qui ont plusieurs réponses lors de la recherche, traités à la fin\r
+ @filmsPlusieursReponses = []\r
+\r
+ @threadsWait = ThreadsWait::new\r
+ @nbConn = 0 # le nombre de connexion\r
+ \r
+ # le prochain id disponible\r
+ @idDisponible = 1\r
+ \r
+ chargerFilms\r
+ end\r
+\r
+ # Lit un repertoire de manière recursive et va chercher les informations concernant le film sur le net\r
+ def pomper(r)\r
+ @repBase = r\r
+ repPrecedant = Dir::getwd\r
+ Dir::chdir(r)\r
+ \r
+ pomperR('.')\r
+ \r
+ # on attends que les threads se terminent\r
+ @threadsWait.all_waits\r
+ \r
+ # traite les films qui avaient plusieurs réponses lors de la recherche\r
+ # l'utilisateur doit faire un choix\r
+ i = 1\r
+ @filmsPlusieursReponses.each{|f|\r
+ puts\r
+ puts "Plop, ya un conflit #{i} / #{@filmsPlusieursReponses.length} :"\r
+ if f.reglerConflitPlusieursReponses\r
+ ajouterFilm(f)\r
+ end\r
+ i += 1\r
+ }\r
+ \r
+ Dir::chdir(repPrecedant) \r
+ end\r
+ \r
+ # Sauve les films dans un fichier XML\r
+ def sauverFilms\r
+ # le document\r
+ docXml = REXML::Document::new\r
+ docXml.xml_decl().encoding = "UTF-8" # normalement UTF-8\r
+ docXml.xml_decl().dowrite\r
+ \r
+ # la racine du document\r
+ racine = REXML::Element::new('filmographie')\r
+ docXml.add(racine)\r
+ pi = REXML::Instruction.new("xml-stylesheet", "type=\"text/xsl\" href=\"../xsl/yopyop.xsl\"")\r
+ racine.previous_sibling = pi\r
+ \r
+ # on ajoute chaque film à la racine\r
+ @films.each{|nom, f|\r
+ racine.add(f.getXml)\r
+ } \r
+ \r
+ # sauve le document\r
+ docXml.write(File::new(@xmlFile, 'w'), 0)\r
+ end \r
+ \r
+ private\r
+ \r
+ # Charge les films depuis le fichier XML\r
+ def chargerFilms\r
+ # si le fichier n'existe pas il n'y a rien à charger\r
+ if !File.exists?(@xmlFile)\r
+ return\r
+ end\r
+ \r
+ racine = REXML::Document::new(File::new(@xmlFile)).root\r
+ racine.each_element{|e| \r
+ id = e.attribute('id').to_s.to_i\r
+ \r
+ if id > @idDisponible\r
+ @idDisponible = id + 1 \r
+ end\r
+ \r
+ titre = e.get_elements('titre')[0].get_text\r
+ \r
+ fichiers = e.get_elements('fichiers')[0].get_elements('fichier')\r
+ annee = e.get_elements('annee')[0].get_text\r
+ duree = e.get_elements('duree')[0].get_text\r
+ critiquePresse = e.get_elements('critiquePresse')[0].get_text\r
+ critiqueSpectateur = e.get_elements('critiqueSpectateur')[0].get_text\r
+ synopsis = e.get_elements('synopsis')[0].get_elements('p')\r
+ budget = e.get_elements('budget')[0].get_text \r
+ realisateurs = e.get_elements('realisateurs')[0].get_elements('realisateur')\r
+ acteurs = e.get_elements('acteurs')[0].get_elements('acteur')\r
+ pays = e.get_elements('lespays')[0].get_elements('pays')\r
+ genres = e.get_elements('genres')[0].get_elements('genre')\r
+ \r
+ film = Film::new(fichiers[0].get_text.value)\r
+ \r
+ film.titre = titre.value unless titre.nil?\r
+ film.id = id\r
+ fichiers.each{|e|\r
+ film.addFichier(e.get_text.value)\r
+ @filmsFichier[e.get_text.value] = film\r
+ }\r
+ film.annee = annee.value unless annee.nil?\r
+ acteurs.each{|e|\r
+ film.acteurs << Personne::ajouter(e.get_text.value)\r
+ }\r
+ pays.each{|e|\r
+ film.pays << Pays::ajouter(e.get_text.value)\r
+ }\r
+ film.duree = duree.value unless duree.nil?\r
+ film.critiquePresse = critiquePresse.value unless critiquePresse.nil?\r
+ film.critiqueSpectateur = critiqueSpectateur.value unless critiqueSpectateur.nil?\r
+ genres.each{|e|\r
+ film.genres << Genre::ajouter(e.get_text.value) if e.get_text != nil\r
+ }\r
+ debut = true\r
+ film.synopsis = ""\r
+ synopsis.each{|e|\r
+ film.synopsis += "\n" unless debut\r
+ film.synopsis += e.get_text.value if e.get_text != nil\r
+ debut = false\r
+ }\r
+ film.budget = budget.value unless budget.nil?\r
+ @films[film.titre] = film\r
+ }\r
+ end\r
+ \r
+ # Retourne un nouvel id, utilisé lors de la création d'un nouveau film\r
+ def getNewId\r
+ id = @idDisponible\r
+ @idDisponible += 1\r
+ return id\r
+ end \r
+ \r
+ # Ajoute un film\r
+ def ajouterFilm(film)\r
+ if film.plusieursReponses?\r
+ @filmsPlusieursReponses << film\r
+ return\r
+ end\r
+ \r
+ # le film existe déjà\r
+ if @films.has_key?(film.titre)\r
+ # le fichier n'est pas connu -> nième partie d'un film\r
+ if !@filmsFichier.has_key?(film.fichiers[0])\r
+ puts "[i] movie #{film.titre} has a another file part : #{film.fichiers[0]}"\r
+ @films[film.titre].addFichier(film.fichiers[0])\r
+ @filmsFichier[film.fichiers[0]] = @films[film.titre] \r
+ else\r
+ puts "[!] Duplicate movie : #{film.titre} (#{film.fichiers[0]})"\r
+ end\r
+ else\r
+ puts "[i] movie added : #{film.titre} (#{film.fichiers[0]})"\r
+ @films[film.titre] = film\r
+ @filmsFichier[film.fichiers[0]] = film\r
+ end\r
+ end\r
+ \r
+ # Appelé par 'pomper'. Cette méthode est récursive.\r
+ def pomperR(r)\r
+ Dir::foreach(r){|f|\r
+ next if f[0,1] == '.'\r
+ fichier = (r == '.' ? '' : r + "/") + f\r
+ if File::directory?(fichier)\r
+ litRepertoireR(fichier) \r
+ else\r
+ \r
+ # vérification de l'extension\r
+ /^.*?\.(.{3,4})$/ =~ fichier\r
+ if !FILMS_EXTENSIONS.include?($1)\r
+ next\r
+ end\r
+ \r
+ fichier = CGI::escapeHTML(fichier.unpack("C*").pack("U*"))\r
+ \r
+ # on skip si le film est déjàa dans la BD\r
+ if film = @filmsFichier[fichier]\r
+ puts "[i] Already exists in DB : #{film.titre} (#{fichier})"\r
+ next\r
+ end\r
+ \r
+ film = nil\r
+ \r
+ # pour limiter le nombre de connexion simultanée\r
+ if @nbConn >= NB_CONN_MAX\r
+ @threadsWait.next_wait\r
+ end\r
+ \r
+ @nbConn += 1 \r
+ @threadsWait.join_nowait(\r
+ Thread::new{\r
+ begin \r
+ film = Film::new(fichier).loadData\r
+ film.id = getNewId # on lui donne un nouvel ID\r
+ \r
+ unless film.nil? # le film a été correctement construit\r
+ ajouterFilm(film)\r
+ end\r
+ rescue Exception => e\r
+ puts e.message\r
+ puts e.backtrace\r
+ end \r
+ @nbConn -= 1\r
+ }\r
+ )\r
+ end\r
+ }\r
+ end\r
+end
\ No newline at end of file
# - Rechercher chaque film sur le site 'allocine.com' et 'imdb.com' et en pomper un max d'infos\r
# - Etablir une petit base de données des films au format xml\r
\r
+require 'films.rb'\r
+\r
# non ce n'est pas du perl ;)\r
$: << Dir::getwd + "/" + __FILE__.split('/')[0]\r
\r
-#$KCODE = 'UTF-8'\r
-#require 'jcode.rb'\r
-require 'film.rb'\r
-\r
# vérifie les arguments donnés\r
rep = '.'\r
if $*.empty?\r
end \r
\r
# charge les films à partir du fichier xml\r
-Film::loadFilmsXml(xmlFile)\r
+films = Films::new(xmlFile)\r
\r
-# lit le repertoire\r
-Film::litRepertoire(rep)\r
+# parcours le dossier donné et recherche les infos sur le net\r
+films.pomper(rep)\r
\r
# ecrit le fichier XML\r
-Film::getFilmsXml.write(File::new(xmlFile, 'w'), 0)\r
+films.sauverFilms()\r
-C:\ruby\bin\ruby src/yopyop.rb xml/test.xml test
\ No newline at end of file
+cd src\r
+C:\ruby\bin\ruby yopyop.rb ../xml/test.xml ../test\r
+cd ..
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8'?>\r
<?xml-stylesheet type="text/xsl" href="../xsl/yopyop.xsl"?>\r
<filmographie>\r
- <film id='4'>\r
+ <film id='1'>\r
+ <fichiers>\r
+ <fichier>Big Boss.avi</fichier>\r
+ </fichiers>\r
+ <titre>Big boss</titre>\r
+ <annee>1971</annee>\r
+ <realisateurs/>\r
+ <acteurs>\r
+ <acteur>Bruce Lee</acteur>\r
+ <acteur>James Tien</acteur>\r
+ <acteur>Yin-Chieh Han</acteur>\r
+ </acteurs>\r
+ <lespays>\r
+ <pays>hong-kongais</pays>\r
+ </lespays>\r
+ <duree>94</duree>\r
+ <critiquePresse/>\r
+ <critiqueSpectateur/>\r
+ <genres>\r
+ <genre>Drame</genre>\r
+ <genre>Divers</genre>\r
+ <genre>Action</genre>\r
+ <genre>Drame</genre>\r
+ <genre>Arts Martiaux</genre>\r
+ </genres>\r
+ <synopsis>\r
+ <p>Un ouvrier venant de la campagne se révolte contre la milice engagée par son patron pour briser une grève.</p>\r
+ </synopsis>\r
+ <budget unite='euro'/>\r
+ <url/>\r
+ </film>\r
+ <film id='9'>\r
<fichiers>\r
<fichier>Banlieue 13.avi</fichier>\r
</fichiers>\r
<titre>Banlieue 13</titre>\r
<annee>2003</annee>\r
- <realisateurs>\r
- <realisateur>Pierre Morel</realisateur>\r
- </realisateurs>\r
+ <realisateurs/>\r
<acteurs>\r
<acteur>Cyril Raffaelli</acteur>\r
<acteur>David Belle</acteur>\r
<p>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.</p>\r
</synopsis>\r
<budget unite='euro'/>\r
- <url>http://www.allocine.fr/film/fichefilm_gen_cfilm=54107.html</url>\r
+ <url/>\r
</film>\r
- <film id='8'>\r
+ <film id='7'>\r
<fichiers>\r
<fichier>Le 51e Etat.rmvb</fichier>\r
</fichiers>\r
<titre>Le 51e Etat</titre>\r
<annee>2001</annee>\r
- <realisateurs>\r
- <realisateur>Ronny Yu</realisateur>\r
- </realisateurs>\r
+ <realisateurs/>\r
<acteurs>\r
<acteur>Samuel L. Jackson</acteur>\r
<acteur>Robert Carlyle</acteur>\r
<p>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.</p>\r
</synopsis>\r
<budget unite='euro'/>\r
- <url>http://www.allocine.fr/film/fichefilm_gen_cfilm=29085.html</url>\r
+ <url/>\r
</film>\r
- <film id='11'>\r
+ <film id='6'>\r
<fichiers>\r
<fichier>Robocop 3.avi</fichier>\r
</fichiers>\r
<titre>Robocop 3</titre>\r
<annee>1992</annee>\r
- <realisateurs>\r
- <realisateur>Fred Dekker</realisateur>\r
- </realisateurs>\r
+ <realisateurs/>\r
<acteurs>\r
<acteur>Robert John Burke</acteur>\r
<acteur>Nancy Allen</acteur>\r
<p>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.</p>\r
</synopsis>\r
<budget unite='euro'/>\r
- <url>http://www.allocine.fr/film/fichefilm_gen_cfilm=8143.html</url>\r
+ <url/>\r
</film>\r
- <film id='3'>\r
+ <film id='5'>\r
+ <fichiers>\r
+ <fichier>A Toute Epreuve.rmvb</fichier>\r
+ </fichiers>\r
+ <titre>A toute epreuve</titre>\r
+ <annee>1992</annee>\r
+ <realisateurs/>\r
+ <acteurs>\r
+ <acteur>Tony Leung Chiu Wai</acteur>\r
+ <acteur>Chow Yun-Fat</acteur>\r
+ <acteur>Teresa Mo</acteur>\r
+ </acteurs>\r
+ <lespays>\r
+ <pays>hong-kongais</pays>\r
+ <pays> chinois</pays>\r
+ </lespays>\r
+ <duree>130</duree>\r
+ <critiquePresse/>\r
+ <critiqueSpectateur/>\r
+ <genres>\r
+ <genre>Policier</genre>\r
+ <genre>Action</genre>\r
+ </genres>\r
+ <synopsis>\r
+ <p>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.</p>\r
+ </synopsis>\r
+ <budget unite='euro'/>\r
+ <url/>\r
+ </film>\r
+ <film id='8'>\r
<fichiers>\r
<fichier>Assaut sur le central 13 [H264 Aac] [Fr Eng] [Fr Eng Spa] [XCT].mkv</fichier>\r
</fichiers>\r
<titre>Assaut sur le central 13</titre>\r
<annee>2004</annee>\r
- <realisateurs>\r
- <realisateur>Jean-Francois Richet</realisateur>\r
- </realisateurs>\r
+ <realisateurs/>\r
<acteurs>\r
<acteur>Ethan Hawke</acteur>\r
<acteur>Laurence Fishburne</acteur>\r
<p>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... </p>\r
</synopsis>\r
<budget unite='euro'/>\r
- <url>http://www.allocine.fr/film/fichefilm_gen_cfilm=55907.html</url>\r
+ <url/>\r
</film>\r
- <film id='1'>\r
+ <film id='2'>\r
<fichiers>\r
- <fichier>A Toute Epreuve.rmvb</fichier>\r
+ <fichier>Sky High.avi</fichier>\r
</fichiers>\r
- <titre>A toute epreuve</titre>\r
- <annee>1992</annee>\r
- <realisateurs>\r
- <realisateur>John Woo</realisateur>\r
- </realisateurs>\r
+ <titre>L'Ecole fantastique</titre>\r
+ <annee>2003</annee>\r
+ <realisateurs/>\r
<acteurs>\r
- <acteur>Tony Leung Chiu Wai</acteur>\r
- <acteur>Chow Yun-Fat</acteur>\r
- <acteur>Teresa Mo</acteur>\r
+ <acteur>Michael Angarano</acteur>\r
+ <acteur>Danielle Panabaker</acteur>\r
+ <acteur>Mary Elizabeth Winstead</acteur>\r
</acteurs>\r
<lespays>\r
- <pays>hong-kongais</pays>\r
- <pays> chinois</pays>\r
+ <pays>américain</pays>\r
</lespays>\r
- <duree>130</duree>\r
+ <duree>102</duree>\r
+ <critiquePresse/>\r
+ <critiqueSpectateur/>\r
+ <genres>\r
+ <genre>Comédie</genre>\r
+ <genre>Famille</genre>\r
+ <genre>Fantastique</genre>\r
+ </genres>\r
+ <synopsis>\r
+ <p>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...</p>\r
+ </synopsis>\r
+ <budget unite='euro'/>\r
+ <url/>\r
+ </film>\r
+ <film id='4'>\r
+ <fichiers>\r
+ <fichier>Robocop 1.avi</fichier>\r
+ </fichiers>\r
+ <titre>Robocop</titre>\r
+ <annee>1987</annee>\r
+ <realisateurs/>\r
+ <acteurs>\r
+ <acteur>Nancy Allen</acteur>\r
+ <acteur>Peter Weller</acteur>\r
+ <acteur>Dan O'Herlihy</acteur>\r
+ </acteurs>\r
+ <lespays>\r
+ <pays>américain</pays>\r
+ </lespays>\r
+ <duree>102</duree>\r
+ <critiquePresse/>\r
+ <critiqueSpectateur/>\r
+ <genres>\r
+ <genre>Fantastique</genre>\r
+ </genres>\r
+ <synopsis>\r
+ <p>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.</p>\r
+ </synopsis>\r
+ <budget unite='euro'/>\r
+ <url/>\r
+ </film>\r
+ <film id='3'>\r
+ <fichiers>\r
+ <fichier>Rocky [x264 Aac] [Fr Eng] [Fr Eng].mkv</fichier>\r
+ </fichiers>\r
+ <titre>Rocky</titre>\r
+ <annee>1976</annee>\r
+ <realisateurs/>\r
+ <acteurs>\r
+ <acteur>Sylvester Stallone</acteur>\r
+ <acteur>Talia Shire</acteur>\r
+ <acteur>Burt Young</acteur>\r
+ </acteurs>\r
+ <lespays>\r
+ <pays>américain</pays>\r
+ </lespays>\r
+ <duree>119</duree>\r
<critiquePresse/>\r
<critiqueSpectateur/>\r
<genres>\r
- <genre>Policier</genre>\r
<genre>Action</genre>\r
+ <genre>Drame</genre>\r
</genres>\r
<synopsis>\r
- <p>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.</p>\r
+ <p>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.</p>\r
+ <p>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.</p>\r
</synopsis>\r
<budget unite='euro'/>\r
- <url>http://www.allocine.fr/film/fichefilm_gen_cfilm=8035.html</url>\r
+ <url/>\r
</film>\r
</filmographie>
\ No newline at end of file