d5da08cc09e49d23ec8efba2debf1f5aeebeee3c
[pompage.git] / src / modules / allocine.rb
1 require 'net/http'
2 require 'uri'
3 require 'cgi'
4 require 'thread'
5 require 'iconv'
6
7 require "basemodule.rb"
8
9 # un mixin pour allocine
10 class Allocine < Basemodule
11
12 # Voir le parent.
13 def rechercherFilm(titre)
14 @connexion = Net::HTTP::new('www.allocine.fr') if @connexion.nil?
15
16 donneesHtml = nil
17 begin
18 begin
19 reponse, donneesHtml = @connexion.get("/recherche/?rub=1&motcle=#{CGI::escape(Iconv.iconv("ISO-8859-1", "UTF-8", titre)[0])}")
20 rescue Exception => e
21 p e
22 puts "[!] Connexion lost, retry.."
23 retry
24 end
25
26 #convertit le code latin-1 en UTF8
27 donneesHtml = Iconv.iconv("UTF-8", "ISO-8859-1", donneesHtml)[0]
28
29 #si pas trouvé alors on enlève un mot à la fin
30 if /.*?Pas de résultats.*?/ =~ donneesHtml || ! donneesHtml.include?("<h3><b>Films <h4>")
31 /(.*?)[^ ]+?$/ =~ titre.strip
32 titre = $1
33 titre.strip!
34 else
35 break;
36 end
37 end while not titre.nil? and not titre.empty?
38
39 reponses = {}
40 unless titre.nil? or titre.empty?
41 r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>(?:<\/h4><h5 style="color: #666666">&nbsp;(.*?)<\/h5>){0,1}(?:<h4><br \/><\/h4>){0,1}(?:<h4 style="color: #666666"> de (.*?)<\/h4>){0,1}(?:<h4 style="color: #666666">&nbsp;avec (.*?)<\/h4>){0,1}(?:<h4 style="color: #666666">&nbsp;\((.*?)\)<\/h4>){0,1}/)
42
43 r.each{|f|
44 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]
45 }
46 end
47 reponses
48 end
49
50 # Voir le parent.
51 def load(id, film)
52 @connexion = Net::HTTP::new('www.allocine.fr') if @connexion.nil?
53
54 r, ficheHtml = @connexion.get("/film/fichefilm_gen_cfilm=#{id}.html")
55
56 /<img src="(.*?)" border="0" alt="" class="affichette" \/>/ =~ ficheHtml
57 unless $1.nil?
58 @threadImage = Thread::new($1){|imageUrl|
59 begin
60 imageUrl = URI.parse(imageUrl)
61 connexionImage = Net::HTTP::new(imageUrl.host)
62 r, image = connexionImage.get(imageUrl.path)
63 f = File::new($repBase + "/" + $repAffichette + film.id.to_s + ".jpg", 'w').binmode
64 f.write(image)
65 f.close
66 rescue Exception => e
67 puts e.message
68 puts e.backtrace
69 end
70 }
71 end
72
73 #convertit le code latin-1 en UTF8
74 ficheHtml = Iconv.iconv("UTF-8", "ISO-8859-1", ficheHtml)[0]
75
76 #url
77 film.url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=#{id}.html"
78
79 # Titre
80 /<title>(.*?)<\/title>/ =~ ficheHtml
81 film.titre = $1 unless $1.nil?
82
83 puts "Movie found : #{film.titre} (#{film.fichiers[0]})"
84
85 # Année
86 /<h4>Année de production : (\d+)<\/h4>/ =~ ficheHtml
87 film.annee = $1 unless $1.nil?
88
89 # Réalisateurs
90 /<h4>Réalisé par(.*?)<\/h4>/ =~ ficheHtml
91 $1.scan(/\s*<a class="link1" href=".*?">(.*?)<\/a>\s*/m){|a|
92 film.realisateurs << Personne::ajouter(a[0]) unless a[0].nil?
93 } unless $1.nil?
94
95 # Acteurs
96 /<h4>Avec(.*?)<\/h4>/ =~ ficheHtml
97 $1.scan(/\s*<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>\s*/m){|a|
98 film.acteurs << Personne::ajouter(a[0]) unless a[0].nil?
99 } unless $1.nil?
100
101 # Pays
102 /<h4>Film (.*?)\.&nbsp;<\/h4>/ =~ ficheHtml
103 $1.split(',').each{|pays|
104 film.pays << Pays::ajouter(pays) unless pays.nil?
105 } unless $1.nil?
106
107 # Duree (capture des heures et des minutes séparement vue que c'est le bordel sur allocine
108 /<h4>Durée :(?:.*?)(\d+)h/ =~ ficheHtml
109 heure = $1.nil? ? 0 : $1.to_i
110
111 /<h4>Durée :(?:.*?)(\d+)min/ =~ ficheHtml
112 min = $1.nil? ? 0 : $1.to_i
113
114 film.duree = heure * 60 + min
115
116 # Critiques presse et spectateur
117 /Presse.*etoile_([012345]).*Spectateurs.*etoile_([012345])"/m =~ ficheHtml
118 film.critiquePresse = $1 unless $1.nil?
119 film.critiqueSpectateur = $2 unless $2.nil?
120
121 # Genre
122 /<h4>Genre : (.*?)<\/h4>/ =~ ficheHtml
123 $1.scan(/<a href="\/film\/alaffiche_genre_gen_genre=.*?" class="link1">(.+?)<\/a>/m){|g|
124 film.genres << Genre::ajouter(g[0]) unless g[0].nil?
125 } unless $1.nil?
126
127 # Synopsis
128 /Synopsis.*?<h4>(.*?)<\/h4>/m =~ ficheHtml
129 unless $1.nil?
130 film.synopsis = $1
131 film.synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")
132 film.synopsis.virerBalisesHTML!
133 end
134
135 # Budget
136 /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml
137 film.budget = $1 unless $1.nil?
138 end
139
140 def finish
141 @threadImage.join if defined? @threadImage
142 end
143 end