From 84fd971104c7cc367ecca4b7ae7073fb7a7e5a7a Mon Sep 17 00:00:00 2001 From: pifou Date: Fri, 29 Jun 2007 16:29:33 +0000 Subject: [PATCH] ADD Pompage des images ! :) git-svn-id: svn://euphorik.ch/pompage@42 02bbb61a-6d21-0410-aba0-cb053bdfd66a --- js/yopyop.js | 2 +- src/basemodule.rb | 9 +- src/constantes.rb | 2 +- src/film.rb | 17 ++-- src/films.rb | 17 ++-- src/modules/allocine.rb | 37 ++++++-- src/yopyop.rb | 24 ++--- xml/test.xml | 194 +++++++++++++++++++++++++++++++++------- xsl/yopyop.xsl | 5 +- 9 files changed, 233 insertions(+), 74 deletions(-) diff --git a/js/yopyop.js b/js/yopyop.js index c4b2af0..da49920 100644 --- a/js/yopyop.js +++ b/js/yopyop.js @@ -122,7 +122,7 @@ function doRecherche(f) if ( afficherTout || document.getElementById("checkRechercheTitre").checked && rechercheRegExp.test(lignes[i].childNodes[2].textContent) - || document.getElementById("checkRechercheGenres").checked && rechercheRegExp.test(tableDetails[0].firstChild.nextSibling.textContent) + || document.getElementById("checkRechercheGenres").checked && rechercheRegExp.test(tableDetails[0].firstChild.nextSibling.nextSibling.textContent) || document.getElementById("checkRechercheRealisateurs").checked && rechercheRegExp.test(tableDetails[1].firstChild.nextSibling.textContent) || document.getElementById("checkRechercheActeurs").checked && rechercheRegExp.test(tableDetails[2].firstChild.nextSibling.textContent) || document.getElementById("checkRecherchePays").checked && rechercheRegExp.test(tableDetails[3].firstChild.nextSibling.textContent)) diff --git a/src/basemodule.rb b/src/basemodule.rb index 725b212..38849f2 100644 --- a/src/basemodule.rb +++ b/src/basemodule.rb @@ -1,5 +1,5 @@ -# Attention : les méthodes peuvent être accédées par plusieurs threads simultanément -class Basemodule + +class Basemodule # Retourne un Hash contenant les ids (de allocine) trouvés indexés par une chaine. # Cette chaine contient des infos du film, par exemple le titre et l'année. # Cette chaine sert, dans le cas ou il y a plusieurs réponses, à proposer un choix à l'utilisateur. @@ -15,4 +15,9 @@ class Basemodule def load(id) raise end + + # appelé lorsque le module n'est plus utile (permet de libérer des ressource par exemple). + def finish + + end end \ No newline at end of file diff --git a/src/constantes.rb b/src/constantes.rb index b0d2428..f7461c2 100644 --- a/src/constantes.rb +++ b/src/constantes.rb @@ -16,4 +16,4 @@ LOAD_DATA = true NB_CONN_MAX = 1 # une aide pour l'utilisateur -USAGE = 'USAGE : yopyop.rb -x [-d ] [-m ]' \ No newline at end of file +USAGE = 'USAGE : yopyop.rb -x [-d ] [-m ] [-a ]' \ No newline at end of file diff --git a/src/film.rb b/src/film.rb index a282441..309f686 100644 --- a/src/film.rb +++ b/src/film.rb @@ -21,18 +21,15 @@ class String end class Film - - def Film::setModule(m) - @@module = m - end - + # toutes les données membres sont accessibles par défaut (écriture/lecture) - attr_accessor :id, :titre, :url, :fichiers, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget + attr_accessor :id, :titre, :url, :fichiers, :mod, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget # Constructeur. N'entreprend aucune action (chargement), crée juste un film vide. # p1 [String] : le fichier correspondant au film - def initialize(fichier) + def initialize(fichier, mod) @fichiers = [fichier] # le chemin des fichiers est relatif au repertoire de base + @mod = mod @id = 0 @titre = '' @@ -102,7 +99,7 @@ class Film end end - @@module.load(@choix[tabNoms[choix-1]], self) + @mod.load(@choix[tabNoms[choix-1]], self) return 1 end @@ -135,11 +132,11 @@ class Film return self end - reponses = @@module.rechercherFilm(titre) + reponses = @mod.rechercherFilm(titre) @nbReponses = reponses.size if @nbReponses == 1 - @@module.load(reponses.values[0], self) + @mod.load(reponses.values[0], self) else @choix = reponses end diff --git a/src/films.rb b/src/films.rb index 585970e..e93e615 100644 --- a/src/films.rb +++ b/src/films.rb @@ -1,4 +1,4 @@ -# Représente un ensemble de films +# Représente un ensemble de films require 'rexml/document' require 'thwait' @@ -11,9 +11,11 @@ require 'constantes.rb' require 'iconv' class Films - def initialize(xmlFile) + def initialize(xmlFile, modClasse) @xmlFile = xmlFile + @modClasse = modClasse + # repertoire de base, par exemple C:/Divx/ @repBase = '' @@ -82,6 +84,10 @@ class Films i += 1 } + @films.each{|t,f| + f.mod.finish + } + Dir::chdir(repPrecedant) end @@ -120,7 +126,7 @@ class Films racine.each_element{|e| id = e.attribute('id').to_s.to_i - if id > @idDisponible + if id >= @idDisponible @idDisponible = id + 1 end @@ -138,7 +144,7 @@ class Films 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 = Film::new(fichiers[0].get_text.value, @modClasse::new) film.id = id film.titre = titre.value unless titre.nil? @@ -243,8 +249,9 @@ class Films @threadsWait.join_nowait( Thread::new{ begin - film = Film::new(fichier).loadData + film = Film::new(fichier, @modClasse::new) film.id = getNewId # on lui donne un nouvel ID + film.loadData # on charge ses données unless film.nil? # le film a été correctement construit ajouterFilm(film) diff --git a/src/modules/allocine.rb b/src/modules/allocine.rb index e4173bb..d5da08c 100644 --- a/src/modules/allocine.rb +++ b/src/modules/allocine.rb @@ -1,4 +1,5 @@ require 'net/http' +require 'uri' require 'cgi' require 'thread' require 'iconv' @@ -7,16 +8,15 @@ require "basemodule.rb" # un mixin pour allocine class Allocine < Basemodule - + # Voir le parent. def rechercherFilm(titre) - Thread.current["connexion"] = Net::HTTP::new('www.allocine.fr') if Thread.current["connexion"].nil? - connexion = Thread.current["connexion"] + @connexion = Net::HTTP::new('www.allocine.fr') if @connexion.nil? donneesHtml = nil begin begin - reponse, donneesHtml = connexion.get("/recherche/?rub=1&motcle=#{CGI::escape(Iconv.iconv("ISO-8859-1", "UTF-8", titre)[0])}") + reponse, donneesHtml = @connexion.get("/recherche/?rub=1&motcle=#{CGI::escape(Iconv.iconv("ISO-8859-1", "UTF-8", titre)[0])}") rescue Exception => e p e puts "[!] Connexion lost, retry.." @@ -38,7 +38,6 @@ class Allocine < Basemodule reponses = {} unless titre.nil? or titre.empty? - r = donneesHtml.scan(/(.*?)<\/a>(?:<\/h4>
 (.*?)<\/h5>){0,1}(?:


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

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

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

 \((.*?)\)<\/h4>){0,1}/) r.each{|f| @@ -50,11 +49,27 @@ class Allocine < Basemodule # Voir le parent. def load(id, film) - Thread.current["connexion"] = Net::HTTP::new('www.allocine.fr') if Thread.current["connexion"].nil? - connexion = Thread.current["connexion"] - - r, ficheHtml = connexion.get("/film/fichefilm_gen_cfilm=#{id}.html") + @connexion = Net::HTTP::new('www.allocine.fr') if @connexion.nil? + + r, ficheHtml = @connexion.get("/film/fichefilm_gen_cfilm=#{id}.html") + // =~ ficheHtml + unless $1.nil? + @threadImage = Thread::new($1){|imageUrl| + begin + imageUrl = URI.parse(imageUrl) + connexionImage = Net::HTTP::new(imageUrl.host) + r, image = connexionImage.get(imageUrl.path) + f = File::new($repBase + "/" + $repAffichette + film.id.to_s + ".jpg", 'w').binmode + f.write(image) + f.close + rescue Exception => e + puts e.message + puts e.backtrace + end + } + end + #convertit le code latin-1 en UTF8 ficheHtml = Iconv.iconv("UTF-8", "ISO-8859-1", ficheHtml)[0] @@ -121,4 +136,8 @@ class Allocine < Basemodule /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml film.budget = $1 unless $1.nil? end + + def finish + @threadImage.join if defined? @threadImage + end end \ No newline at end of file diff --git a/src/yopyop.rb b/src/yopyop.rb index 786e6a1..6514cec 100644 --- a/src/yopyop.rb +++ b/src/yopyop.rb @@ -20,42 +20,44 @@ require 'film.rb' $: << Dir::getwd + "/" + __FILE__.split('/')[0] # vérifie les arguments donnés -xmlFile = nil -rep = '.' +$xmlFile = nil +$repBase = Dir::getwd +$repFilms = '.' +$repAffichette = '../img/affichette/' mod = 'Allocine' aPrec = '' $*.each{|a| case aPrec when '-x' - xmlFile = a + $xmlFile = a when '-d' - rep = a + $repFilms = a when '-m' mod = a + when '-a' + mod = a end aPrec = a } -if xmlFile.nil? +if $xmlFile.nil? puts USAGE exit 0 end -unless File::directory?(rep) - puts "'#{rep}' is not a valid directory" +unless File::directory?($repFilms) + puts "'#{$repFilms}' is not a valid directory" exit 1 end require "modules/#{mod}" -Film::setModule(Module.class_eval(mod)::new) - # charge les films à partir du fichier xml -films = Films::new(xmlFile) +films = Films::new($xmlFile, Module.class_eval(mod)) # parcours le dossier donné et recherche les infos sur le net -films.pomper(rep) +films.pomper($repFilms) # ecrit le fichier XML films.sauverFilms() diff --git a/xml/test.xml b/xml/test.xml index 8e78ac3..8b710cc 100644 --- a/xml/test.xml +++ b/xml/test.xml @@ -1,7 +1,71 @@ + + + Rocky [x264 Aac] [Fr Eng] [Fr Eng].mkv + + Rocky Balboa + 2006 + + Sylvester Stallone + + + Sylvester Stallone + Burt Young + Antonio Tarver + + + américain + + 105 + 4 + 3 + + Drame + Action + + +

Rocky Balboa, le légendaire boxeur, a depuis longtemps quitté le ring. De ses succès, il ne reste plus que des histoires qu'il raconte aux clients de son restaurant. La mort de son épouse lui pèse chaque jour et son fils ne vient jamais le voir.

+

Le champion d'aujourd'hui s'appelle Mason Dixon, et tout le monde s'accorde à le définir comme un tueur sans élégance ni coeur. Alors que les promoteurs lui cherchent désespérément un adversaire à sa taille, la légende de Rocky refait surface. L'idée d'opposer deux écoles, deux époques et deux titans aussi différents enflamme tout le monde. Pour Balboa, c'est l'occasion de ranimer les braises d'une passion qui ne l'a jamais quitté. L'esprit d'un champion ne meurt jamais...

+
+ + http://www.allocine.fr/film/fichefilm_gen_cfilm=109061.html +
+ + Big Boss.avi + + Big boss + 1971 + + Lo Wei + + + Bruce Lee + James Tien + Yin-Chieh Han + + + hong-kongais + + 94 + + + + Drame + Arts Martiaux + Divers + Action + Drame + + +

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

+
+ + http://www.allocine.fr/film/fichefilm_gen_cfilm=53367.html +
+ Banlieue 13.avi @@ -32,7 +96,7 @@ http://www.allocine.fr/film/fichefilm_gen_cfilm=54107.html - + Le 51e Etat.rmvb @@ -65,36 +129,7 @@ http://www.allocine.fr/film/fichefilm_gen_cfilm=29085.html - - - Ace Ventura detective chiens et chats [x264 AC3] [Fr Eng] [Fr Eng] [™]..mkv - - Ace Ventura, détective chiens et chats - 1994 - - Tom Shadyac - - - Jim Carrey - Courteney Cox - Sean Young - - - américain - - 90 - - - - Comédie - - -

Ace Ventura, un jeune homme décontracté à la banane arrogante et à la démarche élastique, est le Sherlock Holmes de la gent canine. Le voici à nouveau sur les dents quand le dauphin Flocon de neige, la mascotte de l'équipe de football americain de Miami, manque à l'appel.

-
- - http://www.allocine.fr/film/fichefilm_gen_cfilm=11944.html -
- + Robocop 3.avi @@ -125,7 +160,7 @@ http://www.allocine.fr/film/fichefilm_gen_cfilm=8143.html - + Assaut sur le central 13 [H264 Aac] [Fr Eng] [Fr Eng Spa] [XCT].mkv @@ -140,8 +175,8 @@ John Leguizamo - français - américain + américain + français 110 4 @@ -156,4 +191,95 @@ http://www.allocine.fr/film/fichefilm_gen_cfilm=55907.html + + + A Toute Epreuve.rmvb + + A toute epreuve + 1992 + + John Woo + + + 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.

+
+ + http://www.allocine.fr/film/fichefilm_gen_cfilm=8035.html +
+ + + Sky High.avi + + L'Ecole fantastique + 2003 + + Mike Mitchell + + + Michael Angarano + Danielle Panabaker + Mary Elizabeth Winstead + + + américain + + 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...

+
+ + http://www.allocine.fr/film/fichefilm_gen_cfilm=50152.html +
+ + + Robocop 1.avi + + Robocop + 1987 + + Paul Verhoeven + + + 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.

+
+ + http://www.allocine.fr/film/fichefilm_gen_cfilm=3085.html +
\ No newline at end of file diff --git a/xsl/yopyop.xsl b/xsl/yopyop.xsl index e21f409..4ca43e9 100644 --- a/xsl/yopyop.xsl +++ b/xsl/yopyop.xsl @@ -12,7 +12,7 @@
-

DivX - TV

+

DivX

@@ -52,6 +52,9 @@ + -- 2.43.0
+ + Genres ,