9 require "basemodule.rb"
11 # doc : http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html
14 # hack : http://arosien.blogspot.com/2007/06/increasing-rubys-netbufferedio-buffer.html
18 timeout(@read_timeout) { @rbuf << @io.sysread(32768) }
24 # un module d'importation pour le site "www.allocine.fr"
25 class Allocine
< Basemodule
28 @connexion = Net
::HTTP::new('www.allocine.fr').start
if @connexion == nil || !
@connexion.started
?
32 @connexion.finish
if defined? @connexion && @connexion.started
? # on admet qu'après un load on a plus besoin de la connexion
37 def rechercherFilm(titre
)
43 reponse
= @connexion.get("/recherche/?rub=1&motcle=#{CGI::escape(Iconv.iconv("ISO-8859-1", "UTF-8", titre)[0])}")
46 puts
"[!] Erreur lors de la recherche du titre
#{titre}, retry.."
52 # convertit le code latin-1 en UTF8
53 html = Iconv.iconv("UTF-8
", "ISO-8859-1
", reponse.body)[0]
55 # si pas trouvé alors on enlève un mot à la fin
56 if /.*?Pas de résultats.*?/ =~ html || ! html
.include?("<h3><b>Films <h4>")
57 /(.*?)[^ ]+?$/ =~ titre
.strip
63 end while not titre
.nil? and not titre
.empty
?
66 unless titre
.nil? or titre
.empty
?
67 r
= html
.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}/)
70 reponses
[f
[1].virerBalisesHTML +
(f
[2] !
= nil ? " " + f
[2].virerBalisesHTML
: "") +
(f
[3] !
= nil ? " de " + f
[3].virerBalisesHTML
: "") +
(f
[4] !
= nil ? " avec " + f
[4].virerBalisesHTML
: "") +
(f
[5] !
= nil ? " (" + f
[5].virerBalisesHTML +
")" : "")] = f
[0]
82 html
= @connexion.get("/film/fichefilm_gen_cfilm=#{id}.html").body
85 puts
"[!] Erreur lors du chargement de
#{film.fichiers[0]}, retry.."
91 /<img src="(.*?)" border="0" alt="" class="affichette
" \/>/ =~ html
93 @threadImage = Thread::start($1){|imageUrl|
95 imageUrl = URI.parse(imageUrl)
96 connexionImage = Net::HTTP::new(imageUrl.host).start
97 image = connexionImage.get(imageUrl.path).body
98 f = File::new($repBase + "/" +
$repAffichette + film
.id
.to_s +
".jpg", 'w').binmode
101 connexionImage
.finish
102 rescue Exception
=> e
105 puts
"[!] Erreur lors du chargement de l
'image #{imageUrl}, retry.."
111 #convertit le code latin-1 en UTF8
112 html = Iconv.iconv("UTF-8", "ISO-8859-1", html)[0]
114 film.url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=#{id}.html"
117 /<title>(.*?)<\/title>/ =~ html
118 film.titre = $1 unless $1.nil?
120 puts "Movie found : #{film.titre} (#{film.fichiers[0]})"
123 /<h4>Année de production : (\d+)<\
/h4
>/ =~ html
124 film
.annee
= $1 unless $1.nil?
127 /<h4>Réalisé par(.*?)<\/h4
>/ =~ html
128 $1.scan(/\s*<a class="link1" href=".*?">(.*?)<\/a
>\s
*/m
){|a
|
129 film
.realisateurs
<< Personne
::ajouter(a
[0]) unless a
[0].nil?
133 /<h4>Avec(.*?)<\/h4
>/ =~ html
134 $1.scan(/\s*<a class="link1" href="\/personne\
/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a
>\s
*/m
){|a
|
135 film
.acteurs
<< Personne
::ajouter(a
[0]) unless a
[0].nil?
139 /<h4>Film (.*?)\. <\/h4
>/ =~ html
140 $1.split(',').each
{|pays
|
141 film
.pays
<< Pays
::ajouter(pays
) unless pays
.nil?
144 # Duree (capture des heures et des minutes séparement vue que c'est le bordel sur allocine
145 /<h4>Durée :(?:.*?)(\d+)h/ =~ html
146 heure
= $1.nil? ? 0 : $1.to_i
148 /<h4>Durée :(?:.*?)(\d+)min/ =~ html
149 min
= $1.nil? ? 0 : $1.to_i
151 film
.duree
= heure
* 60 + min
153 # Critiques presse et spectateur
154 /Presse.*etoile_([012345]).*Spectateurs.*etoile_([012345])"/m
=~ html
155 film
.critiquePresse
= $1 unless $1.nil?
156 film
.critiqueSpectateur
= $2 unless $2.nil?
159 /<h4>Genre : (.*?)<\/h4
>/ =~ html
160 $1.scan(/<a href="\/film\
/alaffiche_genre_gen_genre=.*?" class="link1">(.+?)<\/a
>/m
){|g
|
161 film
.genres
<< Genre
::ajouter(g
[0]) unless g
[0].nil?
165 /Synopsis.*?<h4>(.*?)<\/h4
>/m
=~ html
168 film
.synopsis
.gsub!
(/<br\s*\/>|<br\s
*>/, "\n")
169 film
.synopsis
.virerBalisesHTML!
173 /Budget<\/b
> : (.+
?) millions d
'euros<\/h4>/ =~ html
174 film.budget = $1 unless $1.nil?
180 @threadImage.join if defined? @threadImage