git-svn-id: svn://euphorik.ch/pompage@23 02bbb61a-6d21-0410-aba0-cb053bdfd66a
[pompage.git] / src / film.rb
index 1eaa33f..91dcf37 100644 (file)
@@ -10,6 +10,12 @@ require 'personne.rb'
 \r
 require 'constantes.rb'\r
 \r
+class String\r
+   def virerBalisesHTML\r
+      return self.gsub(/<(.*?)>/, '')\r
+   end\r
+end\r
+\r
 class Film\r
    attr_accessor :id, :titre, :fichiers, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget\r
       \r
@@ -57,12 +63,15 @@ class Film
       if !File.exists?(xmlFile)\r
          return\r
       end\r
-            \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
+         id = e.attribute('id').to_s.to_i\r
        \r
-         @@idDisponible = id + 1         \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
@@ -129,12 +138,8 @@ class Film
 private\r
 \r
    def Film::filmsFactory(fichier)\r
-      /^.*?\.(.{3,4})$/ =~ fichier\r
-      if FILMS_EXTENSIONS.include?($1)\r
-         #convertit le code latin-1 en UTF8\r
-         Film::new(fichier.unpack("C*").pack("U*")).loadData\r
-      end\r
-    end\r
+      Film::new(fichier).loadData\r
+   end\r
     \r
    def Film::litRepertoireR(r)\r
       Dir::foreach(r){|f|\r
@@ -143,13 +148,23 @@ private
          if File::directory?(fichier)\r
             litRepertoireR(fichier) \r
          else\r
-         \r
-            #si le film n'existe pas déjà dans la liste\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} (#{film.fichiers[0]})"\r
+               puts "[i] Already exists in DB : #{film.titre} (#{fichier})"\r
                next\r
             end\r
             \r
+            #p fichier\r
+            \r
             film = nil\r
              \r
             @@nbConn += 1    \r
@@ -187,7 +202,7 @@ private
             @@films[film.titre].addFichier(film.fichiers[0])\r
             @@filmsFichier[film.fichiers[0]] = @@films[film.titre]                     \r
          else\r
-            puts "[!] Duplicate movie : #{film.titre} (#{film.fichier})"\r
+            puts "[!] Duplicate movie : #{film.titre} (#{film.fichiers[0]})"\r
          end\r
       else\r
          puts "[i] movie added : #{film.titre} (#{film.fichiers[0]})"\r
@@ -229,13 +244,46 @@ public
    # demande à l'utilisateur de faire un choix\r
    # ret : true si le conflit à été résolu sinon false\r
    def reglerConflitPlusieursReponses\r
-      puts "prout"\r
       \r
-      return false\r
+      @aPlusieursReponses = false # pour faire les choses bien\r
+      \r
+      puts\r
+      puts "Plop, ya un conflit : #{@fichiers[0]}"\r
+      puts "Fais ton choix jeune padawan (un caractère et pas plus)"\r
+      tabNoms = @idsAllocine.keys\r
+      choix = 1\r
+      loop do \r
+         i = 1\r
+         tabNoms.each{|n|\r
+           puts "#{i}. #{n}"\r
+           i += 1\r
+         }\r
+         puts "A. Passer et l'ajouter"\r
+         puts "B. Ignorer"\r
+         choix = STDIN.gets\r
+         \r
+         if /A/i =~ choix\r
+            return true\r
+         elsif /B/i =~ choix\r
+            return false\r
+         end\r
+         \r
+         choix = choix.to_i\r
+         if choix > 0 && choix <= tabNoms.length\r
+            break;\r
+         else\r
+            puts\r
+            puts "Choix pas bon !!"\r
+         end\r
+      end\r
+      \r
+      loadDepuisIdAllocine(@idsAllocine[tabNoms[choix-1]])\r
+      \r
+      return true\r
    end\r
    \r
    def addFichier(fichier)\r
-      if (!@fichiers.include?(fichier))\r
+      if !@fichiers.include?(fichier)\r
          @fichiers << fichier\r
       end\r
    end\r
@@ -269,7 +317,7 @@ public
       donneesHtml = nil\r
       begin\r
          begin\r
-            reponse, donneesHtml = connexionHttp.get("/recherche/?motcle=#{CGI::escape(titre)}")\r
+            reponse, donneesHtml = connexionHttp.get("/recherche/?motcle=#{CGI::escape(titre.unpack("U*").pack("C*"))}")\r
          rescue Exception => e\r
             p e\r
             puts "[!] Connexion lost, retry.."\r
@@ -292,12 +340,13 @@ public
       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>/)\r
+         r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>(?:<\/h4><h5 style="color: #666666">&nbsp;(.*?)<\/h5>){0,1}/)\r
          \r
          if r.length > 1\r
             @aPlusieursReponses = true\r
             r.each{|f|\r
-               @idsAllocine[f[1].gsub(/<(.*?)>/, '')] = f[0]\r
+               @idsAllocine[f[1].virerBalisesHTML + (f[2] != nil ? " " + f[2].virerBalisesHTML : "")] = f[0]\r
             }\r
          elsif r.length == 1\r
             loadDepuisIdAllocine(r[0][0], connexionHttp) \r
@@ -309,7 +358,11 @@ public
    end\r
    \r
 private\r
-   def loadDepuisIdAllocine(id, connexionHttp)\r
+   def loadDepuisIdAllocine(id, connexionHttp = nil)\r
+      if (connexionHttp == nil)\r
+         connexionHttp = Net::HTTP::new('www.allocine.fr')\r
+      end\r
+         \r
       r, ficheHtml = connexionHttp.get("/film/fichefilm_gen_cfilm=#{id}.html") \r
       \r
       #convertit le code latin-1 en UTF8\r
@@ -322,7 +375,7 @@ private
       /<title>(.*?)<\/title>/ =~ ficheHtml\r
       @titre = $1 unless $1.nil?\r
       \r
-      puts "Movie found : #{@titre} (#{@fichier})"\r
+      puts "Movie found : #{@titre} (#{@fichiers[0]})"\r
       \r
       # Année\r
       /<h4>Année de production : (\d+)<\/h4>/ =~ ficheHtml\r