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 +4 -4
- data/README.md +81 -0
- data/filmaffinity.gemspec +1 -1
- data/lib/constants/constants.rb +19 -0
- data/lib/filmaffinity.rb +2 -0
- data/lib/filmaffinity/movie.rb +1 -1
- data/lib/filmaffinity/search.rb +1 -1
- data/lib/filmaffinity/top.rb +44 -0
- data/spec/filmaffinity/top_spec.rb +54 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8902c8713ff5695c57f80e2e44ba3b770b9041cd
|
4
|
+
data.tar.gz: f366e254a0e4ba6ac495af6bd25adc6b7f9906d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
@@ -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
data/lib/filmaffinity/movie.rb
CHANGED
data/lib/filmaffinity/search.rb
CHANGED
data/lib/filmaffinity/top.rb
CHANGED
@@ -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.
|
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:
|