git-svn-id: svn://euphorik.ch/pompage@35 02bbb61a-6d21-0410-aba0-cb053bdfd66a
[pompage.git] / src / modules / allocine.rb
1 require 'net/http'
2 require 'cgi'
3 require 'thread'
4 require 'iconv'
5
6 require "basemodule.rb"
7
8 # un mixin pour allocine
9 class Allocine < Basemodule
10
11 # Voir le parent.
12 def rechercherFilm(titre)
13 Thread.current["connexion"] = Net::HTTP::new('www.allocine.fr') if Thread.current["connexion"].nil?
14 connexion = Thread.current["connexion"]
15
16 donneesHtml = nil
17 begin
18 begin
19 reponse, donneesHtml = connexion.get("/recherche/?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
42 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}/)
43
44 r.each{|f|
45 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]
46 }
47 end
48 reponses
49 end
50
51 # Voir le parent.
52 def load(id, film)
53 Thread.current["connexion"] = Net::HTTP::new('www.allocine.fr') if Thread.current["connexion"].nil?
54 connexion = Thread.current["connexion"]
55
56 r, ficheHtml = connexion.get("/film/fichefilm_gen_cfilm=#{id}.html")
57
58 #convertit le code latin-1 en UTF8
59 ficheHtml = Iconv.iconv("UTF-8", "ISO-8859-1", ficheHtml)[0]
60
61 #url
62 film.url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=#{id}.html"
63
64 # Titre
65 /<title>(.*?)<\/title>/ =~ ficheHtml
66 film.titre = $1 unless $1.nil?
67
68 puts "Movie found : #{film.titre} (#{film.fichiers[0]})"
69
70 # Année
71 /<h4>Année de production : (\d+)<\/h4>/ =~ ficheHtml
72 film.annee = $1 unless $1.nil?
73
74 # Réalisateurs
75 /<h4>Réalisé par(.*?)<\/h4>/ =~ ficheHtml
76 $1.scan(/\s*<a class="link1" href=".*?">(.*?)<\/a>\s*/m){|a|
77 film.realisateurs << Personne::ajouter(a[0]) unless a[0].nil?
78 } unless $1.nil?
79
80 # Acteurs
81 /<h4>Avec(.*?)<\/h4>/ =~ ficheHtml
82 $1.scan(/\s*<a class="link1" href="\/personne\/fichepersonne_gen_cpersonne=\d+\.html">(.+?)<\/a>\s*/m){|a|
83 film.acteurs << Personne::ajouter(a[0]) unless a[0].nil?
84 } unless $1.nil?
85
86 # Pays
87 /<h4>Film (.*?)\.&nbsp;<\/h4>/ =~ ficheHtml
88 $1.split(',').each{|pays|
89 film.pays << Pays::ajouter(pays) unless pays.nil?
90 } unless $1.nil?
91
92 # Duree (capture des heures et des minutes séparement vue que c'est le bordel sur allocine
93 /<h4>Durée :(?:.*?)(\d+)h/ =~ ficheHtml
94 heure = $1.nil? ? 0 : $1.to_i
95
96 /<h4>Durée :(?:.*?)(\d+)min/ =~ ficheHtml
97 min = $1.nil? ? 0 : $1.to_i
98
99 film.duree = heure * 60 + min
100
101 # Critiques presse et spectateur
102 /Presse.*etoile_([012345]).*Spectateurs.*etoile_([012345])"/m =~ ficheHtml
103 film.critiquePresse = $1 unless $1.nil?
104 film.critiqueSpectateur = $2 unless $2.nil?
105
106 # Genre
107 /<h4>Genre : (.*?)<\/h4>/ =~ ficheHtml
108 $1.scan(/<a href="\/film\/alaffiche_genre_gen_genre=.*?" class="link1">(.+?)<\/a>/m){|g|
109 film.genres << Genre::ajouter(g[0]) unless g[0].nil?
110 } unless $1.nil?
111
112 # Synopsis
113 /Synopsis.*?<h4>(.*?)<\/h4>/m =~ ficheHtml
114 unless $1.nil?
115 film.synopsis = $1
116 film.synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")
117 film.synopsis.virerBalisesHTML!
118 end
119
120 # Budget
121 /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml
122 film.budget = $1 unless $1.nil?
123 end
124 end