filmaffinity 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d41ff7c40e9bc2096224bb1190112dfde63a058a
4
- data.tar.gz: eb7cd3f4a55a70900da27e395ad6ed6a184912ea
3
+ metadata.gz: 8902c8713ff5695c57f80e2e44ba3b770b9041cd
4
+ data.tar.gz: f366e254a0e4ba6ac495af6bd25adc6b7f9906d8
5
5
  SHA512:
6
- metadata.gz: 61801175302414d4b8384214875dfd926809b5193fc77f347536e46acc380d2d268836db537abb3483391f93f92e09f29406108e99573d95a737fbf63436ce54
7
- data.tar.gz: ef2a7c6f372dc2230103c86fa964df042dc3c76b79e037da4fcb13ca724fffd23151847bc9dddefbc82c9466e5dd2314c6f7e07070018392fc48889e1d44e521
6
+ metadata.gz: 5337977d4d3a5bd3f7a666d8f9334cb6f9ae5cd587f4ac02837e68267c14ff32f797100d73f7bffa2be99d322f31fc68e7cdaf11df4830cdf60eb6da2d82fcef
7
+ data.tar.gz: 0c258a0e379f73c8e7dd135b61bb2da5215f38773e3d76cf2a78beee9c1c552087c1442b2117c6a1b48a35c93445a3fd60969a3a315c9b75a7275bc1c7297e06
data/README.md CHANGED
@@ -4,8 +4,89 @@
4
4
 
5
5
  The filmaffinity gem allows you to easy access publicly available data from Filmaffinity.com in spanish.
6
6
 
7
+ ## Features
8
+
9
+ - ```FilmAffinity::Search.new title``` Search movies for a title
10
+ - ```FilmAffinity::Movie.new id, title``` Retrieve complete movie info
11
+ - ```FilmAffinity::Top.new``` Retrieve the Top 30
12
+ - ```FilmAffinity::Top.new options``` Retrieve the Top with the given options
13
+
14
+ ## Documentation
15
+
16
+ ##### FilmAffinity::Top options
17
+ The options hash could include:
18
+ ```
19
+ {
20
+ :genre => "AC",
21
+ :country => "DE",
22
+ :from_year => 2014,
23
+ :to_year => 2016,
24
+ :no_doc => true,
25
+ :no_tv => true
26
+ }
27
+ ```
28
+ ##### :genre
29
+ - "AC" Action
30
+ - "AV" Adventure
31
+ - "AN" Animation
32
+ - "CO" Comedy
33
+ - "DO" Documentary
34
+ - "DR" Drama
35
+ - "FAN" Fantasy
36
+ - "F-N" Film-Noir
37
+ - "TE" Horror
38
+ - "INF" Kids
39
+ - "MU" Musical
40
+ - "INT" Mystery
41
+ - "RO" Romance
42
+ - "C-F" Sci-Fi
43
+ - "TH" Thriller
44
+ - "TV_SE" TV Series
45
+ - "DESC" Unknown
46
+ - "BE" War
47
+ - "WE" Western
48
+
49
+ ##### :country
50
+ 2-letter code supplied by the ISO
51
+
52
+ ##### :no_doc
53
+ ```true``` to avoid documentaries
54
+
55
+ ##### :no_tv
56
+ ```true``` to avoid TV series
57
+
58
+
7
59
  ## Examples
8
60
 
61
+ ### Top:
62
+ #Top FilmAffinity ever
63
+ top = FilmAffinity::Top.new
64
+
65
+ top.movies
66
+ #=> [<FilmAffinity::Movie>
67
+ <FilmAffinity::Movie>
68
+ <FilmAffinity::Movie>
69
+ ...]
70
+
71
+ search.movies.first
72
+ #=> #<FilmAffinity::Movie>
73
+
74
+ #Top FilmAffinity with options
75
+ options = {
76
+ :genre => "AN",
77
+ :no_tv => true
78
+ }
79
+ top = FilmAffinity::Top.new options
80
+
81
+ top.movies
82
+ #=> [<FilmAffinity::Movie>
83
+ <FilmAffinity::Movie>
84
+ <FilmAffinity::Movie>
85
+ ...]
86
+
87
+ search.movies.first
88
+ #=> #<FilmAffinity::Movie>
89
+
9
90
  ### Search:
10
91
 
11
92
  search = FilmAffinity::Search.new("Padrino")
data/filmaffinity.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'filmaffinity'
3
- s.version = '0.0.3'
3
+ s.version = '0.0.4'
4
4
  s.date = '2016-04-05'
5
5
  s.summary = "filmaffinity"
6
6
  s.description = "Easily use Ruby or the command line to find information on Filmaffinity.com"
@@ -0,0 +1,19 @@
1
+ module Constants
2
+ def self.query_params
3
+ {
4
+ :genre => "genre=%s&",
5
+ :country => "country=%s&",
6
+ :from_year => "fromyear=%i&",
7
+ :to_year => "toyear=%i&",
8
+ :no_doc => "nodoc&",
9
+ :no_tv => "notvse&",
10
+ }
11
+ end
12
+ def self.urls
13
+ {
14
+ :top => "http://www.filmaffinity.com/es/topgen.php%s",
15
+ :search_by_title => "http://www.filmaffinity.com/es/search.php?stext=%s&stype=title",
16
+ :movie => "http://www.filmaffinity.com/es/film%i.html"
17
+ }
18
+ end
19
+ end
data/lib/filmaffinity.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "open-uri"
2
2
  require "nokogiri"
3
3
 
4
+ require_relative "constants/constants"
4
5
  require_relative "filmaffinity/movie"
5
6
  require_relative "filmaffinity/search"
7
+ require_relative "filmaffinity/top"
@@ -11,7 +11,7 @@ module FilmAffinity
11
11
  end
12
12
 
13
13
  def generate_html
14
- open("http://www.filmaffinity.com/es/film#{@id}.html")
14
+ open(Constants.urls[:movie] % id)
15
15
  end
16
16
 
17
17
  def year
@@ -19,7 +19,7 @@ module FilmAffinity
19
19
  end
20
20
 
21
21
  def generate_html
22
- open("http://www.filmaffinity.com/es/search.php?stext=#{CGI.escape(@query)}&stype=title")
22
+ open(Constants.urls[:search_by_title] % CGI.escape(@query))
23
23
  end
24
24
 
25
25
  def parse_movie
@@ -0,0 +1,44 @@
1
+ require "cgi"
2
+
3
+ module FilmAffinity
4
+ class Top
5
+ def initialize options = nil
6
+ @options = options
7
+ end
8
+
9
+ def movies
10
+ @movies ||= parse_movies
11
+ end
12
+
13
+ def document_html
14
+ @document_html ||= Nokogiri::HTML(self.generate_html)
15
+ end
16
+
17
+ def generate_html
18
+ open(Constants.urls[:top] % query_options)
19
+ end
20
+
21
+ def query_options
22
+ query_options = String.new
23
+ if @options
24
+ query_options += "?"
25
+ @options.each do |key,value|
26
+ query_options += Constants.query_params[key] % value
27
+ end
28
+ end
29
+ query_options.gsub(/\&$/,"")
30
+ end
31
+
32
+ def parse_movies
33
+ movies = []
34
+ document_html.search(".movie-card.movie-card-1").each do |movie_card|
35
+ id = movie_card["data-movie-id"].to_i
36
+ title = movie_card.search(".mc-title a").first.content.strip
37
+ movie = FilmAffinity::Movie.new id, title
38
+ movies << movie
39
+ end
40
+ movies
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,54 @@
1
+ require_relative "../spec_helper"
2
+
3
+ describe "FilmAffinity::Top" do
4
+
5
+ describe "#create_document_html" do
6
+ subject(:top) { FilmAffinity::Search.new("truman") }
7
+
8
+ it "#create_document_html" do
9
+ document_html = top.document_html
10
+ expect(document_html).to be_an(Nokogiri::HTML::Document)
11
+ end
12
+
13
+ end
14
+
15
+ describe "#movies" do
16
+ context "no options" do
17
+ subject(:top) { FilmAffinity::Top.new }
18
+ it "should return an array" do
19
+ movies = top.movies
20
+ expect(movies).to be_an(Array)
21
+ end
22
+ it "should return just FilmAffinity::Movie objects only" do
23
+ movies = top.movies
24
+ movies.each { |movie| expect(movie).to be_an(FilmAffinity::Movie) }
25
+ end
26
+ it "should include 'El Padrino'" do
27
+ movies = top.movies
28
+ el_padrino_movie = FilmAffinity::Movie.new 809297, "El padrino"
29
+ expect(movies).to include_movie(el_padrino_movie)
30
+ end
31
+ end
32
+ context "with options" do
33
+ options = {
34
+ :genre => "BE",
35
+ :country => "DE"
36
+ }
37
+ subject(:top) { FilmAffinity::Top.new options }
38
+ it "should return an array" do
39
+ movies = top.movies
40
+ expect(movies).to be_an(Array)
41
+ end
42
+ it "should return just FilmAffinity::Movie objects only" do
43
+ movies = top.movies
44
+ movies.each { |movie| expect(movie).to be_an(FilmAffinity::Movie) }
45
+ end
46
+ it "should include 'Hijos del Tercer Reich (TV)'" do
47
+ movies = top.movies
48
+ hijos_del_tercer_reich_movie = FilmAffinity::Movie.new 831118, "Hijos del Tercer Reich (TV)"
49
+ expect(movies).to include_movie(hijos_del_tercer_reich_movie)
50
+ end
51
+ end
52
+ end
53
+
54
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filmaffinity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Santos, Oriol Bellido
@@ -64,6 +64,7 @@ files:
64
64
  - README.md
65
65
  - Rakefile
66
66
  - filmaffinity.gemspec
67
+ - lib/constants/constants.rb
67
68
  - lib/filmaffinity.rb
68
69
  - lib/filmaffinity/movie.rb
69
70
  - lib/filmaffinity/search.rb
@@ -71,6 +72,7 @@ files:
71
72
  - spec/filmaffinity/matchers/include-movie.rb
72
73
  - spec/filmaffinity/movie_spec.rb
73
74
  - spec/filmaffinity/search_spec.rb
75
+ - spec/filmaffinity/top_spec.rb
74
76
  - spec/spec_helper.rb
75
77
  homepage: https://github.com/davidsantosmerino/filmaffinity-gem
76
78
  licenses:
@@ -100,5 +102,6 @@ test_files:
100
102
  - spec/filmaffinity/matchers/include-movie.rb
101
103
  - spec/filmaffinity/movie_spec.rb
102
104
  - spec/filmaffinity/search_spec.rb
105
+ - spec/filmaffinity/top_spec.rb
103
106
  - spec/spec_helper.rb
104
107
  has_rdoc: