allocine 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +23 -0
- data/LICENSE +20 -0
- data/README.md +61 -0
- data/Rakefile +63 -0
- data/VERSION +1 -0
- data/allocine.gemspec +66 -0
- data/lib/allocine/movie.rb +70 -0
- data/lib/allocine/show.rb +55 -0
- data/lib/allocine/web/curb.rb +42 -0
- data/lib/allocine/web/open_uri.rb +11 -0
- data/lib/allocine/web.rb +8 -0
- data/lib/allocine.rb +44 -0
- data/spec/allocine_spec.rb +19 -0
- data/spec/helper.rb +9 -0
- data/spec/movie_spec.rb +51 -0
- data/spec/show_spec.rb +42 -0
- metadata +96 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Jordan Bracco
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
Allocine
|
2
|
+
---------
|
3
|
+
|
4
|
+
Parseur d'[Allocine][6] pour récupérer des informations sur les films et séries.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Dépendances:
|
9
|
+
|
10
|
+
(sudo) gem install activesupport vegas sinatra
|
11
|
+
|
12
|
+
Dépendances optionnelles (mais recommandées, nécessite `curl`)
|
13
|
+
|
14
|
+
(sudo) gem install curb zlib
|
15
|
+
|
16
|
+
Via RubyGems:
|
17
|
+
|
18
|
+
(sudo) gem sources -r http://gemcutter.org
|
19
|
+
(sudo) gem install allocine
|
20
|
+
|
21
|
+
Ou via git:
|
22
|
+
|
23
|
+
$ git clone git://github.com/Florian95/allocine.git
|
24
|
+
|
25
|
+
## Utilisation
|
26
|
+
|
27
|
+
### Recherche
|
28
|
+
|
29
|
+
Les recherches s’effectuent avec `Allocine.find_movie` et `Allocine.find_show`, et renvoie un Hash de l’ID Allocine et du titre exact.
|
30
|
+
|
31
|
+
### Récupérer les informations d'un film
|
32
|
+
|
33
|
+
`Allocine::Movie.new(ID)`
|
34
|
+
|
35
|
+
### Récupérer les informations d'une série
|
36
|
+
|
37
|
+
`Allocine::Show.new(ID)`
|
38
|
+
|
39
|
+
Voir la [documentation complète][3].
|
40
|
+
|
41
|
+
## Frontend web
|
42
|
+
|
43
|
+
Une petite application Sinatra est fournie. Pour la démarrer,
|
44
|
+
|
45
|
+
- [Homepage][1]
|
46
|
+
- [Source Code][2]
|
47
|
+
- [Documentation][3]
|
48
|
+
- [Issues][4]
|
49
|
+
- [Try it live!][5]
|
50
|
+
|
51
|
+
Mis a disposition sous licence MIT. (c) 2008 Jordan Bracco[7], Florian Lamache[8], Sunny Ripert[9].
|
52
|
+
|
53
|
+
[1]: http://webs.github.com/allocine
|
54
|
+
[2]: http://github.com/webs/allocine
|
55
|
+
[3]: http://yardoc.org/docs/webs-allocine
|
56
|
+
[4]: http://github.com/webs/allocine/issues
|
57
|
+
[5]: http://allocine.heroku.com
|
58
|
+
[6]: http://allocine.fr
|
59
|
+
[7]: http://github.com/webs
|
60
|
+
[8]: http://github.com/florian95
|
61
|
+
[9]: http://github.com/sunny
|
data/Rakefile
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "allocine"
|
8
|
+
gem.summary = %Q{Parser for Allocine.fr}
|
9
|
+
gem.description = %Q{Get data about movies and shows on allocine.fr}
|
10
|
+
gem.email = "jordan@bracco.name"
|
11
|
+
gem.homepage = "http://github.com/florian95/allocine"
|
12
|
+
gem.authors = ["Jordan Bracco", "Florian Lamache", "Sunny Ripert"]
|
13
|
+
#gem.rubyforge_project = "allocine"
|
14
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
15
|
+
gem.add_dependency("activesupport", ["> 0.0.0"])
|
16
|
+
end
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
# Jeweler::RubyforgeTasks.new do |rubyforge|
|
19
|
+
# rubyforge.doc_task = "rdoc"
|
20
|
+
# end
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'spec/rake/spectask'
|
26
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
27
|
+
spec.libs << 'lib' << 'spec'
|
28
|
+
spec.spec_opts = ['--color', '--format nested']
|
29
|
+
spec.ruby_opts = ['-rrubygems']
|
30
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
31
|
+
end
|
32
|
+
|
33
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
34
|
+
spec.libs << 'lib' << 'spec'
|
35
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
36
|
+
spec.ruby_opts = ['-rrubygems']
|
37
|
+
spec.rcov = true
|
38
|
+
end
|
39
|
+
|
40
|
+
task :spec => :check_dependencies
|
41
|
+
|
42
|
+
task :default => :spec
|
43
|
+
|
44
|
+
require 'rake/rdoctask'
|
45
|
+
Rake::RDocTask.new do |rdoc|
|
46
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
47
|
+
|
48
|
+
rdoc.rdoc_dir = 'rdoc'
|
49
|
+
rdoc.title = "allocine #{version}"
|
50
|
+
rdoc.rdoc_files.include('README*')
|
51
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
52
|
+
end
|
53
|
+
|
54
|
+
begin
|
55
|
+
require 'yard'
|
56
|
+
YARD::Rake::YardocTask.new do |t|
|
57
|
+
t.files = ['lib/**/*.rb']
|
58
|
+
end
|
59
|
+
rescue LoadError
|
60
|
+
task :yardoc do
|
61
|
+
abort "YARD is not available. In order to run YARD, you must: sudo gem install yard (or use rdoc: `rake rdoc`)"
|
62
|
+
end
|
63
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.4.0
|
data/allocine.gemspec
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{allocine}
|
8
|
+
s.version = "0.4.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jordan Bracco", "Florian Lamache", "Sunny Ripert"]
|
12
|
+
s.date = %q{2009-11-19}
|
13
|
+
s.description = %q{Get data about movies and shows on allocine.fr}
|
14
|
+
s.email = %q{jordan@bracco.name}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"allocine.gemspec",
|
27
|
+
"lib/allocine.rb",
|
28
|
+
"lib/allocine/movie.rb",
|
29
|
+
"lib/allocine/show.rb",
|
30
|
+
"lib/allocine/web.rb",
|
31
|
+
"lib/allocine/web/curb.rb",
|
32
|
+
"lib/allocine/web/open_uri.rb",
|
33
|
+
"spec/allocine_spec.rb",
|
34
|
+
"spec/helper.rb",
|
35
|
+
"spec/movie_spec.rb",
|
36
|
+
"spec/show_spec.rb"
|
37
|
+
]
|
38
|
+
s.homepage = %q{http://github.com/florian95/allocine}
|
39
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
40
|
+
s.require_paths = ["lib"]
|
41
|
+
s.rubygems_version = %q{1.3.5}
|
42
|
+
s.summary = %q{Parser for Allocine.fr}
|
43
|
+
s.test_files = [
|
44
|
+
"spec/allocine_spec.rb",
|
45
|
+
"spec/helper.rb",
|
46
|
+
"spec/movie_spec.rb",
|
47
|
+
"spec/show_spec.rb"
|
48
|
+
]
|
49
|
+
|
50
|
+
if s.respond_to? :specification_version then
|
51
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
52
|
+
s.specification_version = 3
|
53
|
+
|
54
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
55
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
56
|
+
s.add_runtime_dependency(%q<activesupport>, ["> 0.0.0"])
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
59
|
+
s.add_dependency(%q<activesupport>, ["> 0.0.0"])
|
60
|
+
end
|
61
|
+
else
|
62
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
63
|
+
s.add_dependency(%q<activesupport>, ["> 0.0.0"])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Allocine
|
2
|
+
class Movie
|
3
|
+
attr_accessor :title, :directors, :trailer, :press_rate, :nat, :genres, :out_date, :duree, :production_date, :original_title, :actors, :synopsis, :image, :interdit
|
4
|
+
|
5
|
+
def self.find(search)
|
6
|
+
search = ActiveSupport::Multibyte.proxy_class.new(search.to_s).mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.to_s.
|
7
|
+
downcase.
|
8
|
+
gsub(/[\W]/u, ' ').
|
9
|
+
gsub(/\s[a-z]{1}\s/, ' ').
|
10
|
+
strip.
|
11
|
+
gsub(/-\z/u, '').
|
12
|
+
gsub(' ', '+').
|
13
|
+
gsub('2nd', '2').
|
14
|
+
to_s
|
15
|
+
data = Allocine::Web.new(MOVIE_SEARCH_URL % search).data.gsub(/\r|\n|\t|\s{2,}/,"")
|
16
|
+
movies = Array.new
|
17
|
+
while data =~ /<a href='\/film\/fichefilm_gen_cfilm=(\d+).html'><imgsrc='.*?'alt='(.*?)' \/><\/a>/i
|
18
|
+
id, name = $1, $2
|
19
|
+
data.gsub!("<a href='/film/fichefilm_gen_cfilm=#{id}.html'>", "")
|
20
|
+
name.gsub!(/<(.+?)>/,'')
|
21
|
+
movies << [id, name]
|
22
|
+
end
|
23
|
+
movies = searchGoogle(search, movies.collect{|m| m[0]}) + movies
|
24
|
+
|
25
|
+
return movies
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.searchGoogle(search, movies)
|
29
|
+
data = Allocine::Web.new("http://www.google.fr/search?hl=fr&q=site:allocine.fr+#{search}").data #.gsub(/\r|\n|\t/,"")
|
30
|
+
matches = Array.new
|
31
|
+
data.scan(/fichefilm_gen_cfilm=([0-9]*).html/) do |m|
|
32
|
+
matches << [m.first, "#{search} - Found by Google"] unless movies.include? m.first
|
33
|
+
end
|
34
|
+
return matches.uniq
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.lucky_find(search)
|
38
|
+
results = find(search)
|
39
|
+
new(results.first)
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(id, debug=false)
|
43
|
+
regexps = {
|
44
|
+
:title => '<div class="titlebar"><h1>(.*?)<\/h1>',
|
45
|
+
:directors => 'Réalisé par <span .*?><a .*?>(.*?)<\/a><\/span>',
|
46
|
+
:nat => 'Long-métrage(.*?)\.',
|
47
|
+
:genres => 'Genre : (.*?)<br\/>',
|
48
|
+
:out_date => 'Date de sortie cinéma : <span .*?><a .*?>(.*?)<\/a><\/span>',
|
49
|
+
:duree => 'Durée :(.*?) min',
|
50
|
+
:production_date => 'Année de production : <a .*?>(.*?)<\/a><br \/>',
|
51
|
+
:original_title => 'Titre original : <span .*?><em>(.*?)<\/em><\/span>',
|
52
|
+
:actors => 'Avec (.*?), <a class=',
|
53
|
+
:synopsis => '<p><span class="bold">Synopsis : </span>(.*?)</p>',
|
54
|
+
:image => '<div class="poster"><em class="imagecontainer"><a .*?><img src=\'(.*?)\'alt=".*?"title=".*?"\/><img .*?><\/a><\/em>',
|
55
|
+
:press_rate => '<p class="withstars"><a href=\'/film/revuedepresse_gen_cfilm=[0-9]*?.html\'><img .*? /></a><span class="moreinfo">\((.*?)\)</span></p></div>',
|
56
|
+
:trailer => "<li class=\"\"><a href=\"\/video\/player_gen_cmedia=(.*?)&cfilm=#{id}\.html\">Bandes-annonces<\/a><\/li>"
|
57
|
+
}
|
58
|
+
data = Allocine::Web.new(MOVIE_DETAIL_URL % id).data.gsub(/\r|\n|\t/,"")
|
59
|
+
regexps.each do |reg|
|
60
|
+
print "#{reg[0]}: " if debug
|
61
|
+
r = data.scan Regexp.new(reg[1], Regexp::MULTILINE)
|
62
|
+
r = r.first.to_s.strip
|
63
|
+
r.gsub!(/<.*?>/, '')
|
64
|
+
r.strip!
|
65
|
+
self.instance_variable_set("@#{reg[0]}", r)
|
66
|
+
print "#{r}\n" if debug
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Allocine
|
2
|
+
class Show
|
3
|
+
attr_accessor :title, :created_by, :producters, :nat, :genres, :duree, :original_title, :actors, :synopsis, :image
|
4
|
+
|
5
|
+
def self.find(search)
|
6
|
+
search.gsub!(' ', '+')
|
7
|
+
str = Allocine::Web.new(SHOW_SEARCH_URL % search).data
|
8
|
+
shows = {}
|
9
|
+
while str =~ /<a href='\/series\/ficheserie_gen_cserie=(\d+).html'>(.*?)<\/a>/mi
|
10
|
+
id, name = $1, $2
|
11
|
+
unless name =~ /<img(.*?)/
|
12
|
+
str.gsub!("<a href=\'/series/ficheserie_gen_cserie=#{id}.html\'>#{name}</a>", "")
|
13
|
+
name.gsub!(/<(.+?)>/,'')
|
14
|
+
name.strip!
|
15
|
+
shows[id] = name
|
16
|
+
else
|
17
|
+
str.gsub!("<a href=\'/series/ficheserie_gen_cserie=#{id}.html\'>#{name}</a>", "")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
shows
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.lucky_find(search)
|
25
|
+
results = find(search)
|
26
|
+
new(results.first)
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize(id, debug=false)
|
30
|
+
#TODO : New Regex for new version.
|
31
|
+
regexps = {
|
32
|
+
:title => '<title>(.*?)<\/title>',
|
33
|
+
:created_by => '<h4>Série créée par <a .*?>(.*?)</a>',
|
34
|
+
:producters => '<h4>Producteurs : (.*?)</h4>',
|
35
|
+
:nat => '<span style=\'font-weight:bold\'>Nationalité</span> : (.*?)</h5>',
|
36
|
+
:genres => '<span style=\'font-weight:bold\'>Genre</span> : (.*?) ',
|
37
|
+
:duree => '<span style=\'font-weight:bold\'>Format</span> : (.+?). ',
|
38
|
+
:original_title => '<h4><b>Titre original : </b></h4><h4 style="color:#D20000"><b>(.*?)</b></h4>',
|
39
|
+
:actors => '<h4>Avec : (.*?) ',
|
40
|
+
:synopsis => '<h5><span style=\'font-weight:bold\'>Synopsis</span> .*?<br />(.*?)</h5>',
|
41
|
+
:image => '<td><div id=\'divM\' .*?><img src=\'(.*?)\' style=\'border:1px solid black;.*?>',
|
42
|
+
}
|
43
|
+
data = Allocine::Web.new(SHOW_DETAIL_URL % id).data.gsub(/\r|\n|\t/,"")
|
44
|
+
regexps.each do |reg|
|
45
|
+
print "#{reg[0]}: " if debug
|
46
|
+
r = data.scan Regexp.new(reg[1], Regexp::MULTILINE)
|
47
|
+
r = r.first.to_s.strip
|
48
|
+
r.gsub!(' - AlloCiné', '')
|
49
|
+
r.gsub!(/<.*?>/, '')
|
50
|
+
self.instance_variable_set("@#{reg[0]}", r)
|
51
|
+
print "#{r}\n" if debug
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Allocine
|
2
|
+
module WebCurb
|
3
|
+
def download(urls)
|
4
|
+
url_queue = [*urls]
|
5
|
+
multi = Curl::Multi.new
|
6
|
+
responses = {}
|
7
|
+
url_queue.each do |url|
|
8
|
+
easy = Curl::Easy.new(url) do |curl|
|
9
|
+
curl.follow_location = true
|
10
|
+
curl.on_success do |c|
|
11
|
+
responses[url] = decode_content(c)
|
12
|
+
end
|
13
|
+
curl.on_failure do |c, err|
|
14
|
+
responses[url] = c.response_code
|
15
|
+
end
|
16
|
+
end
|
17
|
+
multi.add(easy)
|
18
|
+
end
|
19
|
+
multi.perform
|
20
|
+
urls.is_a?(String) ? responses.values.first : responses
|
21
|
+
end
|
22
|
+
|
23
|
+
def decode_content(c)
|
24
|
+
if c.header_str.match(/Content-Encoding: gzip/)
|
25
|
+
begin
|
26
|
+
gz = Zlib::GzipReader.new(StringIO.new(c.body_str))
|
27
|
+
xml = gz.read
|
28
|
+
gz.close
|
29
|
+
rescue Zlib::GzipFile::Error
|
30
|
+
# Maybe this is not gzipped?
|
31
|
+
xml = c.body_str
|
32
|
+
end
|
33
|
+
elsif c.header_str.match(/Content-Encoding: deflate/)
|
34
|
+
xml = Zlib::Inflate.inflate(c.body_str)
|
35
|
+
else
|
36
|
+
xml = c.body_str
|
37
|
+
end
|
38
|
+
xml
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/lib/allocine/web.rb
ADDED
data/lib/allocine.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'activesupport'
|
4
|
+
|
5
|
+
%w{allocine/web allocine/movie allocine/show}.each do |lib|
|
6
|
+
require lib
|
7
|
+
end
|
8
|
+
|
9
|
+
begin
|
10
|
+
require 'curb'
|
11
|
+
require 'zlib'
|
12
|
+
require 'allocine/web/curb'
|
13
|
+
Allocine::Web.send(:include, Allocine::WebCurb)
|
14
|
+
rescue LoadError
|
15
|
+
require 'open-uri'
|
16
|
+
require 'allocine/web/open_uri'
|
17
|
+
Allocine::Web.send(:include, Allocine::WebOpenUri)
|
18
|
+
end
|
19
|
+
|
20
|
+
module Allocine
|
21
|
+
MOVIE_SEARCH_URL = "http://www.allocine.fr/recherche/1/?q=%s"
|
22
|
+
MOVIE_DETAIL_URL = "http://www.allocine.fr/film/fichefilm_gen_cfilm=%s.html"
|
23
|
+
SHOW_SEARCH_URL = "http://www.allocine.fr/recherche/6/?q=%s"
|
24
|
+
SHOW_DETAIL_URL = "http://www.allocine.fr/series/ficheserie_gen_cserie=%s.html"
|
25
|
+
|
26
|
+
# Make a search on movies
|
27
|
+
def self.find_movie(search)
|
28
|
+
Allocine::Movie.find(search)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Make a search on shows
|
32
|
+
def self.find_show(search)
|
33
|
+
Allocine::Show.find(search)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the first result
|
37
|
+
def self.lucky_movie(search)
|
38
|
+
Allocine::Movie.lucky_find(search)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.lucky_show(search)
|
42
|
+
Allocine::Show.lucky_find(search)
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe "Allocine" do
|
4
|
+
it "find movie" do
|
5
|
+
Allocine.find_movie('Plan 9').size.should == 2
|
6
|
+
end
|
7
|
+
|
8
|
+
it "find show" do
|
9
|
+
Allocine.find_show('XFiles').should == {"182"=>"X-Files : Aux fronti\303\250res du r\303\251el", "223"=>"Lost"}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "lucky movie" do
|
13
|
+
Allocine.lucky_movie('Les pirates de la Silicon Valley').is_a?(Allocine::Movie).should == true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "lucky show" do
|
17
|
+
Allocine.lucky_show('Stargate').is_a?(Allocine::Show).should == true
|
18
|
+
end
|
19
|
+
end
|
data/spec/helper.rb
ADDED
data/spec/movie_spec.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe "Allocine Movie (Star Trek - 4854)" do
|
4
|
+
|
5
|
+
before(:each) { @movie = Allocine::Movie.new('4854') }
|
6
|
+
|
7
|
+
it 'should have a title' do
|
8
|
+
@movie.title.should == "Star Trek : Premier contact"
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should have a synopsis' do
|
12
|
+
@movie.synopsis.should == "De m\303\251chants extraterrestres, les Borgs, complotent contre les habitants de la Terre. Ils mettent au point une machination diabolique pour d\303\251truire l'humanit\303\251."
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should have an original title' do
|
16
|
+
@movie.original_title.should == "Star Trek: First Contact"
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have a nationality' do
|
20
|
+
@movie.nat.should == "am\303\251ricain"
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should have a picture' do
|
24
|
+
@movie.image.should_not be nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have a genre' do
|
28
|
+
@movie.genres.should == "Science fiction"
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should have a director' do
|
32
|
+
@movie.directors.should == "Jonathan Frakes"
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should have a duration' do
|
36
|
+
@movie.duree.should == "1h52"
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should have actors' do
|
40
|
+
@movie.actors.should == "Jonathan Frakes, Patrick Stewart, Brent Spiner"
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should have an out date' do
|
44
|
+
@movie.out_date.should == "5 mars 1997"
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should have a production date' do
|
48
|
+
@movie.production_date.should == "1996"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/spec/show_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe "Allocine Show (Enterprise - 109)" do
|
4
|
+
|
5
|
+
before(:each) { @show = Allocine::Show.new('109') }
|
6
|
+
|
7
|
+
it 'should have a title' do
|
8
|
+
@show.title.should == "Enterprise"
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should have producters' do
|
12
|
+
@show.producters.should == "J.P. Farrell, Antoinette Stella"
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should have a genre' do
|
16
|
+
@show.genres.should == "Fantastique"
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have an image' do
|
20
|
+
@show.image.should == "http://a69.g.akamai.net/n/69/10688/v1/img5.allocine.fr/acmedia/medias/nmedia/18/35/64/59/18415355.jpg"
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should have a creator' do
|
24
|
+
@show.created_by.should == "Rick Berman"
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have actors' do
|
28
|
+
@show.actors.should == "Dominic Keating, Scott Bakula"
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should have a nationality' do
|
32
|
+
@show.nat.should == "Am\303\251ricaine"
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should have a synopsis' do
|
36
|
+
@show.synopsis.should == "Le premier vaisseau terrien Enterprise, dirig\303\251 par le capitaine Jonathan Archer, part \303\240 la d\303\251couverte de mondes nouveaux, de nouvelles formes de vie et de civilisations diff\303\251rentes.Note : L'histoire se d\303\251roule 100 ans avant les aventures du capitaine Kirk dans la s\303\251rie originale Star Trek."
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should have a duree' do
|
40
|
+
@show.duree.should == "42 mn" # \o/
|
41
|
+
end
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: allocine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jordan Bracco
|
8
|
+
- Florian Lamache
|
9
|
+
- Sunny Ripert
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2009-11-19 00:00:00 +01:00
|
15
|
+
default_executable:
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: thoughtbot-shoulda
|
19
|
+
type: :development
|
20
|
+
version_requirement:
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: "0"
|
26
|
+
version:
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
type: :runtime
|
30
|
+
version_requirement:
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.0.0
|
36
|
+
version:
|
37
|
+
description: Get data about movies and shows on allocine.fr
|
38
|
+
email: jordan@bracco.name
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- LICENSE
|
45
|
+
- README.md
|
46
|
+
files:
|
47
|
+
- .document
|
48
|
+
- .gitignore
|
49
|
+
- LICENSE
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- VERSION
|
53
|
+
- allocine.gemspec
|
54
|
+
- lib/allocine.rb
|
55
|
+
- lib/allocine/movie.rb
|
56
|
+
- lib/allocine/show.rb
|
57
|
+
- lib/allocine/web.rb
|
58
|
+
- lib/allocine/web/curb.rb
|
59
|
+
- lib/allocine/web/open_uri.rb
|
60
|
+
- spec/allocine_spec.rb
|
61
|
+
- spec/helper.rb
|
62
|
+
- spec/movie_spec.rb
|
63
|
+
- spec/show_spec.rb
|
64
|
+
has_rdoc: true
|
65
|
+
homepage: http://github.com/florian95/allocine
|
66
|
+
licenses: []
|
67
|
+
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options:
|
70
|
+
- --charset=UTF-8
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
version:
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: "0"
|
84
|
+
version:
|
85
|
+
requirements: []
|
86
|
+
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 1.3.5
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: Parser for Allocine.fr
|
92
|
+
test_files:
|
93
|
+
- spec/allocine_spec.rb
|
94
|
+
- spec/helper.rb
|
95
|
+
- spec/movie_spec.rb
|
96
|
+
- spec/show_spec.rb
|