2 # Permet de charger des données depuis allocine.fr
3 # Permet d'effectuer des recherches depuis allocine.fr
4 # TODO : rendre la classe indépendant de la source de donnée pour pouvoir utiliser d'autres sites comme par exemple imdb.com
9 require 'constantes.rb'
11 require 'modules/allocine.rb'
13 # ajout de deux méthodes à la classe String
16 return gsub(/<(.*?)>/, '')
25 def Film
::setModule(m
)
29 # toutes les données membres sont accessibles par défaut (écriture/lecture)
30 attr_accessor
:id, :titre, :url, :fichiers, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget
32 # Constructeur. N'entreprend aucune action (chargement), crée juste un film vide.
33 # p1 [String] : le fichier correspondant au film
34 def initialize(fichier
)
35 @fichiers = [fichier
] # le chemin des fichiers est relatif au repertoire de base
45 @critiqueSpectateur = nil
54 # mémorise les tuples {nom => id} dans le cas ou il y a plusieurs choix de films après une recherche
58 # Est-ce qu'il y a eu plusieurs réponses pour ce film lors de la cherche sur le net ?
59 def plusieursReponses
?
60 return @nbReponses > 1
63 # Est-ce qu'il y a eu plusieurs réponses pour ce film lors de la cherche sur le net ?
68 # Demande à l'utilisateur de faire un choix.
69 # ret : true si le conflit à été résolu sinon false
70 def reglerConflitPlusieursReponses
73 puts
" -> " +
@fichiers[0]
74 puts
"Fais ton choix jeune padawan (un caractère et pas plus)"
83 puts
"A. Passer et l'ajouter"
94 if choix
> 0 && choix
<= tabNoms
.length
98 puts
"Choix pas bon !!
"
102 @@module.load(@choix[tabNoms[choix-1]], self)
107 # Ajoute un fichier comme faisant partie du film
108 def addFichier(fichier)
109 if !@fichiers.include?(fichier
)
114 # Charge les informations du films à partir d'allocine.fr
117 #extrait le nom à partir du nom du fichier
118 /^.*?([^\/]*?)\
.(.{3,4})$/ =~
@fichiers[0]
119 #remplace undescores et points par des espaces
120 titre
= $1.gsub(/[_\.]/, ' ')
121 #remplace les suites d'espaces par un seul
122 titre
.gsub!
(/ {2,}/,' ')
123 titre
.gsub!
(/\[.*?\]/,'')
124 titre
.gsub!
(/\(.*?\)/,'')
125 titre
.gsub!
(/\{.*?\}/,'')
126 #vire les espaces au début et à la fin
135 reponses
= @
@module.rechercherFilm(titre
)
136 @nbReponses = reponses
.size
139 @
@module.load(reponses
.values
[0], self)
147 # Renvoie un film sous la forme d'un élément XML .
148 # ret [REXML::Element] : un element xml <film>
151 racine
= REXML
::Element::new('film')
152 racine
.add_attribute('id', @id.to_s
)
154 fichiers
= REXML
::Element::new('fichiers')
156 fichiers
.add(REXML
::Element::new('fichier').add_text(f
))
160 racine
.add(REXML
::Element::new('titre').add_text(@titre))
161 racine
.add(REXML
::Element::new('annee').add_text(@annee))
163 realisateurs
= REXML
::Element::new('realisateurs')
164 @realisateurs.each
{|r
|
165 realisateurs
.add(REXML
::Element::new('realisateur').add_text(r
.nom
))
167 racine
.add(realisateurs
)
169 acteurs
= REXML
::Element::new('acteurs')
171 acteurs
.add(REXML
::Element::new('acteur').add_text(a
.nom
))
175 lespays
= REXML
::Element::new('lespays')
177 lespays
.add(REXML
::Element::new('pays').add_text(p
.nom
))
181 racine
.add(REXML
::Element::new('duree').add_text(@duree.to_s
))
183 racine
.add(REXML
::Element::new('critiquePresse').add_text(@critiquePresse))
184 racine
.add(REXML
::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur))
186 genres
= REXML
::Element::new('genres')
188 genres
.add(REXML
::Element::new('genre').add_text(g
.nom
))
192 synopsisElement
= REXML
::Element::new('synopsis')
193 unless @synopsis.nil?
194 @synopsis.split("\n").each
{|s
|
196 synopsisElement
.add(REXML
::Element::new('p').add_text(s
))
199 racine
.add(synopsisElement
)
201 budgetElement
= REXML
::Element::new('budget')
202 budgetElement
.add_text(@budget)
203 budgetElement
.add_attribute('unite', @budgetUnite)
204 racine
.add(budgetElement
)
206 racine
.add(REXML
::Element::new('url').add_text(@url))