MOD Petites modifs peux significatives
[pompage.git] / src / modules / allocine.rb
index 23a26b8..c26c214 100644 (file)
@@ -20,15 +20,14 @@ module Net
    end\r
 end\r
 \r
-\r
-# un module d'importation pour le site "www.allocine.fr"\r
+# Un module d'importation pour le site "www.allocine.fr".\r
 class Allocine  < Basemodule\r
    \r
    def createConnexion\r
       begin\r
          @connexion = Net::HTTP::new('www.allocine.fr').start if @connexion == nil || !@connexion.started?\r
       rescue \r
-         Puts "Impossible de se connecter à Allocine. Retry.."\r
+         Puts "[!] Impossible de se connecter à Allocine. Retry.."\r
          retry\r
       end\r
    end\r
@@ -38,7 +37,7 @@ class Allocine  < Basemodule
       @connexion = nil\r
    end\r
    \r
-   # voir le parent.\r
+   # Voir le parent.\r
    def rechercherFilm(titre)\r
       createConnexion\r
       \r
@@ -80,11 +79,20 @@ class Allocine  < Basemodule
    \r
    # Voir le parent.\r
    def load(id, film)   \r
+      loadPath("/film/fichefilm_gen_cfilm=#{id}.html", film)\r
+   end\r
+   \r
+   # Voir le parent.\r
+   def loadURL(url, film)\r
+      loadPath(URI.parse(url).path, film)\r
+   end\r
+   \r
+   def loadPath(path, film)\r
       createConnexion\r
 \r
       html = nil\r
       begin\r
-         html = @connexion.get("/film/fichefilm_gen_cfilm=#{id}.html").body \r
+         html = @connexion.get(path).body \r
       rescue Exception => e\r
          p e\r
          puts "[!] Erreur lors du chargement de #{film.fichiers[0]}, retry.."\r
@@ -92,97 +100,123 @@ class Allocine  < Basemodule
          createConnexion\r
          retry\r
       end\r
-         \r
-      /<img src="(.*?)" border="0" alt="" class="affichette" \/>/ =~ html\r
-      unless $1.nil?\r
-         @threadImage = Thread::start($1){|imageUrl|\r
-            nbRetry = 0\r
-            begin\r
-               imageUrlParsed = URI.parse(imageUrl)               \r
-               connexionImage = Net::HTTP::new(imageUrlParsed.host).start\r
-               image = connexionImage.get(imageUrlParsed.path).body\r
-               f = File::new($repBase + "/" + $repAffichette + film.id.to_s + ".jpg", 'w').binmode\r
-               f.write(image)\r
-               f.close\r
-               connexionImage.finish\r
-            rescue Exception => e\r
-               puts e.message\r
-               puts e.backtrace    \r
-               puts "[!] Erreur lors du chargement de l'image '#{imageUrl}', retry.."        \r
-               retry if (nbRetry += 1) < 5               \r
-            end\r
-         }\r
-      end\r
-\r
-      #convertit le code latin-1 en UTF8      \r
-      html = Iconv.iconv("UTF-8", "ISO-8859-1", html)[0]\r
-      #url\r
-      film.url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=#{id}.html"\r
       \r
-      # Titre\r
-      /<title>(.*?)<\/title>/ =~ html\r
-      film.titre = $1 unless $1.nil?\r
+      puts "Pompage de #{film.titre} (#{film.fichiers[0]}) ..."\r
       \r
-      puts "Movie found : #{film.titre} (#{film.fichiers[0]})"\r
+      # convertit le code latin-1 en UTF8      \r
+      html = Iconv.iconv("UTF-8", "ISO-8859-1", html)[0]\r
+            \r
+      # pompage de l'image dans un thread séparé\r
+      if take?("image") && ($force || !film.possedeImage?)\r
+         /<img src="(.*?)" border="0" alt="" class="affichette" \/>/ =~ html\r
+         unless $1.nil?\r
+            @threadImage = Thread::start($1){|imageUrl|\r
+               nbRetry = 0\r
+               begin\r
+                  imageUrlParsed = URI.parse(imageUrl)               \r
+                  connexionImage = Net::HTTP::new(imageUrlParsed.host).start\r
+                  film.setImage(connexionImage.get(imageUrlParsed.path).body)\r
+                  connexionImage.finish\r
+               rescue Exception => e\r
+                  puts e.message\r
+                  puts e.backtrace    \r
+                  puts "[!] Erreur lors du chargement de l'image '#{imageUrl}', retry.."        \r
+                  retry if (nbRetry += 1) < 5               \r
+               end\r
+            }\r
+         end\r
+      end\r
+\r
+      if take?("url") && ($force || film.url == nil)\r
+         #url\r
+         film.url = "http://www.allocine.fr" + path\r
+      end\r
       \r
-      # Année\r
-      /<h4>Année de production : (\d+)<\/h4>/ =~ html\r
-      film.annee = $1 unless $1.nil?\r
+      if take?("titre")\r
+         # Titre\r
+         /<title>(.*?)<\/title>/ =~ html\r
+         film.titre = $1\r
+      end\r
       \r
-      # Réalisateurs\r
-      /<h4>Réalisé par(.*?)<\/h4>/ =~ html\r
-      $1.scan(/\s*<a class="link1" href=".*?">(.*?)<\/a>\s*/m){|a|\r
-         film.realisateurs << Personne::ajouter(a[0]) unless a[0].nil?\r
-      } unless $1.nil?\r
+      if take?("annee") && ($force || film.annee == nil)      \r
+         # Année\r
+         /<h4>Année de production : (\d+)<\/h4>/ =~ html\r
+         film.annee = $1 unless $1.nil?\r
+      end\r
       \r
-      # Acteurs\r
-      /<h4>Avec(.*?)<\/h4>/ =~ html\r
-      $1.scan(/\s*<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>\s*/m){|a|\r
-         film.acteurs << Personne::ajouter(a[0]) unless a[0].nil? \r
-      } unless $1.nil? \r
-                \r
-      # Pays\r
-      /<h4>Film (.*?)\.&nbsp;<\/h4>/ =~ html\r
-      $1.split(',').each{|pays|\r
-         film.pays << Pays::ajouter(pays) unless pays.nil?\r
-      } unless $1.nil? \r
+      if take?("realisateurs") && ($force || film.realisateurs.empty?)  \r
+         # Réalisateurs\r
+         film.realisateurs.clear\r
+         /<h4>Réalisé par(.*?)<\/h4>/ =~ html\r
+         $1.scan(/\s*<a class="link1" href=".*?">(.*?)<\/a>\s*/m){|a|\r
+            film.realisateurs << Personne::ajouter(a[0]) unless a[0].nil?\r
+         } unless $1.nil?\r
+      end\r
       \r
-      # Duree (capture des heures et des minutes séparement vue que c'est le bordel sur allocine\r
-      /<h4>Durée :(?:.*?)(\d+)h/ =~ html\r
-      heure = $1.nil? ? 0 : $1.to_i\r
+      if take?("acteurs") && ($force || film.acteurs.empty?)  \r
+         # Acteurs\r
+         film.acteurs.clear\r
+         /<h4>Avec(.*?)<\/h4>/ =~ html\r
+         $1.scan(/\s*<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>\s*/m){|a|\r
+            film.acteurs << Personne::ajouter(a[0]) unless a[0].nil? \r
+         } unless $1.nil? \r
+      end\r
+           \r
+      if take?("pays") && ($force || film.pays.empty?)  \r
+         # Pays\r
+         film.pays.clear\r
+         /<h4>Film (.*?)\.&nbsp;<\/h4>/ =~ html\r
+         $1.split(',').each{|pays|\r
+            film.pays << Pays::ajouter(pays) unless pays.nil?\r
+         } unless $1.nil? \r
+      end\r
       \r
-      /<h4>Durée :(?:.*?)(\d+)min/ =~ html\r
-      min = $1.nil? ? 0 : $1.to_i\r
-         \r
-      film.duree = heure * 60 + min\r
+      if take?("duree") && ($force || film.duree == nil)  \r
+         # Duree (capture des heures et des minutes séparement vue que c'est le bordel sur allocine\r
+         /<h4>Durée :(?:.*?)(\d+)h/ =~ html\r
+         heure = $1.nil? ? 0 : $1.to_i      \r
+         /<h4>Durée :(?:.*?)(\d+)min/ =~ html\r
+         min = $1.nil? ? 0 : $1.to_i         \r
+         film.duree = heure * 60 + min\r
+      end\r
       \r
-      # Critiques presse et spectateur\r
-      /Presse.*etoile_([012345]).*Spectateurs.*etoile_([012345])"/m =~ html\r
-      film.critiquePresse = $1 unless $1.nil?\r
-      film.critiqueSpectateur = $2 unless $2.nil?\r
+      if take?("critiquenote") && ($force || film.critiquePresse == nil || film.critiqueSpectateur == nil)  \r
+         # Critiques presse et spectateur\r
+         /Presse.*etoile_([012345]).*Spectateurs.*etoile_([012345])"/m =~ html\r
+         film.critiquePresse = $1 unless $1.nil?\r
+         film.critiqueSpectateur = $2 unless $2.nil?\r
+      end\r
       \r
-      # Genre\r
-      /<h4>Genre : (.*?)<\/h4>/ =~ html\r
-      $1.scan(/<a href="\/film\/alaffiche_genre_gen_genre=.*?" class="link1">(.+?)<\/a>/m){|g|\r
-         film.genres << Genre::ajouter(g[0]) unless g[0].nil?\r
-      } unless $1.nil?     \r
+      if take?("genres") && ($force || film.genres.empty?)  \r
+         # Genre\r
+         film.genres.clear\r
+         /<h4>Genre : (.*?)<\/h4>/ =~ html\r
+         $1.scan(/<a href="\/film\/alaffiche_genre_gen_genre=.*?" class="link1">(.+?)<\/a>/m){|g|\r
+            film.genres << Genre::ajouter(g[0]) unless g[0].nil?\r
+         } unless $1.nil?     \r
+      end\r
       \r
-      # Synopsis            \r
-      /Synopsis.*?<h4>(.*?)<\/h4>/m =~ html\r
-      unless $1.nil?\r
-         film.synopsis = $1\r
-         film.synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
-         film.synopsis.virerBalisesHTML!\r
+      if take?("synopsis") && ($force || film.synopsis == nil)  \r
+         # Synopsis            \r
+         /Synopsis.*?<h4>(.*?)<\/h4>/m =~ html\r
+         unless $1.nil?\r
+            film.synopsis = $1\r
+            film.synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
+            film.synopsis.virerBalisesHTML!\r
+         end\r
       end\r
       \r
-      # Budget       \r
-      /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ html\r
-      film.budget = $1 unless $1.nil?\r
+      if take?("budget") && ($force || film.budget == nil)  \r
+         # Budget       \r
+         /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ html\r
+         film.budget = $1 unless $1.nil?\r
+      end\r
       \r
       fermerConnexion\r
-   end   \r
+   end\r
    \r
    def finish\r
+      # on attend que tous les threads de pompage d'image aient terminé\r
       @threadImage.join if defined? @threadImage\r
    end\r
 end
\ No newline at end of file