filmaffinity 0.0.3 → 0.0.4

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.
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: