tmdb-api 0.0.2 → 0.0.3
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 +4 -4
- data/README.md +73 -20
- data/lib/{tmdb.rb → tmdb-api.rb} +6 -5
- data/lib/tmdb-api/base.rb +43 -0
- data/lib/tmdb-api/changes.rb +21 -0
- data/lib/tmdb-api/httparty.rb +10 -0
- data/lib/{tmdb → tmdb-api}/movie.rb +35 -39
- data/lib/{tmdb → tmdb-api}/searchable.rb +12 -10
- data/lib/tmdb-api/version.rb +3 -0
- data/spec/fixtures/changes/{movie_changes.json → movies.json} +0 -0
- data/spec/fixtures/{alternative_titles.json → movie/alternative_titles.json} +0 -0
- data/spec/fixtures/{find_movie_by_id.json → movie/find.json} +0 -0
- data/spec/fixtures/{movie_images.json → movie/images.json} +0 -0
- data/spec/fixtures/{movie_keywords.json → movie/keywords.json} +0 -0
- data/spec/fixtures/{movie_releases.json → movie/releases.json} +0 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/tmdb-api/change_spec.rb +26 -0
- data/spec/tmdb-api/movie_spec.rb +312 -0
- data/spec/tmdb-api/searchable_spec.rb +33 -0
- data/spec/{tmdb → tmdb-api}/tmdb_spec.rb +0 -0
- data/{tmdb.gemspec → tmdb-api.gemspec} +4 -4
- metadata +34 -58
- data/lib/tmdb/changes.rb +0 -22
- data/lib/tmdb/fetcher.rb +0 -30
- data/lib/tmdb/version.rb +0 -3
- data/spec/fixtures/alternative_titles_by_country.json +0 -9
- data/spec/fixtures/changes/movie_changes_page_2.json +0 -407
- data/spec/fixtures/changes/movie_changes_start_date.json +0 -407
- data/spec/fixtures/find_movie.json +0 -19
- data/spec/fixtures/find_movie_by_id_and_language.json +0 -66
- data/spec/fixtures/invalid_id.json +0 -4
- data/spec/fixtures/movie/upcoming_page_2.json +0 -251
- data/spec/fixtures/movie_images_by_language.json +0 -42
- data/spec/fixtures/no_results.json +0 -6
- data/spec/fixtures/search_movie_by_name_and_adult_filter.json +0 -55
- data/spec/fixtures/search_movie_by_name_and_page.json +0 -247
- data/spec/fixtures/search_movie_by_name_and_year.json +0 -19
- data/spec/tmdb/changes_spec.rb +0 -52
- data/spec/tmdb/movie/upcoming_spec.rb +0 -28
- data/spec/tmdb/movie_spec.rb +0 -473
- data/spec/tmdb/searchable_spec.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c76aa958ad9a98caf296205a2502e1e1c2ad5fad
|
4
|
+
data.tar.gz: 89d617732b3e977403147bc352e085c9ca312e4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc125c9dcbf62d451fdf3299a5596da0d263ccd4e862cc81a4aefb1c66c2ee526544141ed07be182de0a1139ae5389c751f9b7a53ac24a9a73fb5d84a9f8af9d
|
7
|
+
data.tar.gz: ae14ee8e385273f5ac9a90854e23870867eeb060251ae8b07d2bd1caea927ee46666a8d6aa379235c2c07e5dff0955d73570f1b7208d39f0e473a3b324f53c5d
|
data/README.md
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
# The Movie Database API
|
1
|
+
# The Movie Database API
|
2
2
|
|
3
|
-
Ruby wrapper for the The Movie Database API.
|
3
|
+
A simple Ruby wrapper for the The Movie Database API v3.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
More info about the API you can see here: [http://docs.themoviedb.apiary.io/](http://docs.themoviedb.apiary.io).
|
5
|
+
About the TMDb API documentation and everything else you can se here: [http://docs.themoviedb.apiary.io/](http://docs.themoviedb.apiary.io).
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
@@ -14,23 +12,24 @@ Add this line to your application's Gemfile:
|
|
14
12
|
|
15
13
|
And then execute:
|
16
14
|
|
17
|
-
$ bundle
|
15
|
+
$ bundle install
|
18
16
|
|
19
17
|
Or install it yourself as:
|
20
18
|
|
21
19
|
$ gem install tmdb
|
22
20
|
|
23
|
-
## Usage
|
24
21
|
|
25
|
-
|
22
|
+
## API Key
|
26
23
|
First of all, you need set your API Key provided by TMDb.
|
27
24
|
|
28
25
|
```ruby
|
29
26
|
TMDb.api_key = '56565958363476674e5e63643c787867'
|
30
27
|
```
|
31
28
|
|
32
|
-
|
33
|
-
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
### Find a movie by id
|
32
|
+
Get the basic movie information for a specific movie id.
|
34
33
|
|
35
34
|
```ruby
|
36
35
|
TMDB::Movie.find(24)
|
@@ -40,7 +39,7 @@ TMDB::Movie.find(603, language: 'pt')
|
|
40
39
|
# => #<TMDb::Movie:0x007f99 @id=603, @title="The Matrix", @imdb_id="tt0133093" ... >
|
41
40
|
```
|
42
41
|
|
43
|
-
### Search
|
42
|
+
### Search movies
|
44
43
|
Search for movies by title.
|
45
44
|
|
46
45
|
```ruby
|
@@ -52,16 +51,14 @@ TMDb::Movie.search('Forrest')
|
|
52
51
|
TMDb::Movie.search('wall e', year: 2003)
|
53
52
|
# => [#<TMDb::Movie:0x007f92 @id=10681, @original_title="WALL·E", ...>]
|
54
53
|
```
|
55
|
-
You can
|
56
|
-
|
54
|
+
You also have another options that you can use to filter the search: `:page`,
|
55
|
+
`:language`, `:include_adult` and `:year`.
|
57
56
|
|
58
57
|
### Alternative titles
|
59
|
-
Get the alternative titles for a specific movie
|
58
|
+
Get the alternative titles for a specific movie id.
|
60
59
|
|
61
60
|
```ruby
|
62
|
-
|
63
|
-
|
64
|
-
movie.alternative_titles
|
61
|
+
TMDB::Movie.alternative_titles(598)
|
65
62
|
# => [{"iso_3166_1"=>"RU", "title"=>"Город бога"},
|
66
63
|
# {"iso_3166_1"=>"IT", "title"=>"City of God - La città di Dio"},
|
67
64
|
# {"iso_3166_1"=>"BR", "title"=>"Cidade de Deus"},
|
@@ -77,10 +74,10 @@ movie.alternative_titles(country: 'br')
|
|
77
74
|
```
|
78
75
|
|
79
76
|
### Images
|
80
|
-
Get the images (posters and backdrops) for a specific movie
|
77
|
+
Get the images (posters and backdrops) for a specific movie id.
|
81
78
|
|
82
79
|
```ruby
|
83
|
-
TMDb::Movie.
|
80
|
+
TMDb::Movie.images(598)
|
84
81
|
# => {"id"=>598,
|
85
82
|
# "backdrops"=> [
|
86
83
|
# {
|
@@ -106,7 +103,63 @@ TMDb::Movie.find(598).images
|
|
106
103
|
# }
|
107
104
|
# ]}
|
108
105
|
|
109
|
-
TMDb::Movie.
|
106
|
+
TMDb::Movie.images(598, language: 'pt')
|
107
|
+
```
|
108
|
+
|
109
|
+
### Movie keywords
|
110
|
+
|
111
|
+
Get the plot keywords for a specific movie id.
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
TMDb::Movie.keywords(68721)
|
115
|
+
# => [
|
116
|
+
# {"id"=>2651, "name"=>"nanotechnology"},
|
117
|
+
# {"id"=>9715, "name"=>"superhero"},
|
118
|
+
# {"id"=>180547, "name"=>"marvel cinematic universe"},
|
119
|
+
# {"id"=>156792, "name"=>"3d"},
|
120
|
+
# {"id"=>156395, "name"=>"imax"},
|
121
|
+
# {"id"=>179430, "name"=>"aftercreditsstinger"},
|
122
|
+
# {"id"=>10836, "name"=>"third part"}
|
123
|
+
# ]
|
124
|
+
```
|
125
|
+
|
126
|
+
### Movie releases
|
127
|
+
|
128
|
+
Get the release date by country for a specific movie id.
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
TMDb::Movie.releases(68721)
|
132
|
+
# => [
|
133
|
+
# {"iso_3166_1"=>"US", "certification"=>"PG-13", "release_date"=>"2013-05-03"},
|
134
|
+
# {"iso_3166_1"=>"DE", "certification"=>"12", "release_date"=>"2013-04-30"},
|
135
|
+
# {"iso_3166_1"=>"FR", "certification"=>"", "release_date"=>"2013-04-24"},
|
136
|
+
# {"iso_3166_1"=>"BG", "certification"=>"C", "release_date"=>"2013-04-26"},
|
137
|
+
# {"iso_3166_1"=>"NL", "certification"=>"", "release_date"=>"2013-04-24"},
|
138
|
+
# {"iso_3166_1"=>"NO", "certification"=>"", "release_date"=>"2013-04-26"},
|
139
|
+
# ...,
|
140
|
+
# ]
|
141
|
+
```
|
142
|
+
|
143
|
+
### Upcoming movies
|
144
|
+
|
145
|
+
Get the list of upcoming movies. This list refreshes every day.
|
146
|
+
The maximum number of items this list will include is 100.
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
TMDb::Movie.upcoming
|
150
|
+
# => [
|
151
|
+
# #<TMDb::Movie:0x007fefa4202a10
|
152
|
+
# @adult=false,
|
153
|
+
# @backdrop_path="/rwibG3yurWQvpjut54nbeiSGhVt.jpg",
|
154
|
+
# @id=157375,
|
155
|
+
# @original_title="The Lifeguard",
|
156
|
+
# @popularity=8.708121262,
|
157
|
+
# @poster_path="/xoX6C3mLynwSNRij2tyDT5eVmoc.jpg",
|
158
|
+
# @release_date="2013-08-30",
|
159
|
+
# @title="The Lifeguard",
|
160
|
+
# @vote_average=5.5,
|
161
|
+
# @vote_count=3>
|
162
|
+
# ]
|
110
163
|
```
|
111
164
|
|
112
165
|
### Movie object
|
data/lib/{tmdb.rb → tmdb-api.rb}
RENAMED
@@ -1,11 +1,12 @@
|
|
1
1
|
require "httparty"
|
2
2
|
require "json"
|
3
3
|
|
4
|
-
require "tmdb/
|
5
|
-
require "tmdb/
|
6
|
-
require "tmdb/
|
7
|
-
require "tmdb/
|
8
|
-
require "tmdb/
|
4
|
+
require "tmdb-api/httparty"
|
5
|
+
require "tmdb-api/base"
|
6
|
+
require "tmdb-api/searchable"
|
7
|
+
require "tmdb-api/movie"
|
8
|
+
require "tmdb-api/changes"
|
9
|
+
require "tmdb-api/version"
|
9
10
|
|
10
11
|
module TMDb
|
11
12
|
class << self
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module TMDb
|
2
|
+
class Base
|
3
|
+
include HTTParty
|
4
|
+
base_uri 'http://api.themoviedb.org/3/'
|
5
|
+
headers 'Accept' => 'application/json'
|
6
|
+
headers 'Content-Type' => 'application/json'
|
7
|
+
format :json
|
8
|
+
|
9
|
+
# Internal: Raises an exception depending on the type of
|
10
|
+
# the response.
|
11
|
+
#
|
12
|
+
# response - Result of a request.
|
13
|
+
#
|
14
|
+
# Raises an exception.
|
15
|
+
def self.bad_response(response)
|
16
|
+
if response.class == HTTParty::Response
|
17
|
+
raise ArgumentError, response['status_message']
|
18
|
+
end
|
19
|
+
raise StandardError, 'Unkown error'
|
20
|
+
end
|
21
|
+
|
22
|
+
# Internal: creates a new TMDb::Base object.
|
23
|
+
#
|
24
|
+
# attributes - Attributes fetched from the API.
|
25
|
+
def initialize(attributes = {})
|
26
|
+
load(attributes)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Internal: Sets the attributes to the object.
|
32
|
+
#
|
33
|
+
# attributes - A hash containing the keys and values to be
|
34
|
+
# set in the object.
|
35
|
+
#
|
36
|
+
# Returns nothing
|
37
|
+
def load(attributes)
|
38
|
+
attributes.each do |key, value|
|
39
|
+
self.instance_variable_set("@#{key}", value)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module TMDb
|
2
|
+
class Changes < Base
|
3
|
+
# Public: Get a list of movie ids that have been edited. By default we
|
4
|
+
# show the last 24 hours and only 100 items per page. The maximum number
|
5
|
+
# of days that can be returned in a single request is 14.
|
6
|
+
#
|
7
|
+
# options - The hash options used to filter the search (default: {}).
|
8
|
+
# :page - Page.
|
9
|
+
# :start_date - Start date (YYYY-MM-DD).
|
10
|
+
# :end_date - End date (YYYY-MM-DD).
|
11
|
+
#
|
12
|
+
# Examples
|
13
|
+
#
|
14
|
+
# TMDb::Movie.find(68721)
|
15
|
+
# TMDb::Movie.find(68721, language: 'pt')
|
16
|
+
def self.movies(options = {})
|
17
|
+
res = get('/movie/changes', query: options)
|
18
|
+
res.success? ? res : bad_response(res)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module TMDb
|
2
|
-
class Movie
|
2
|
+
class Movie < Base
|
3
3
|
extend Searchable
|
4
4
|
|
5
5
|
# Movie attributes
|
@@ -9,83 +9,75 @@ module TMDb
|
|
9
9
|
:production_countries, :release_date, :revenue, :spoken_languages,
|
10
10
|
:status, :tagline, :title, :vote_average, :vote_count
|
11
11
|
|
12
|
-
|
12
|
+
attr_reader *ATTRIBUTES
|
13
13
|
|
14
|
-
|
15
|
-
ATTRIBUTES.each { |attr| instance_variable_set("@#{attr}", attrs[attr.to_s]) }
|
16
|
-
end
|
17
|
-
|
18
|
-
# Get the basic movie information for a specific movie ID.
|
14
|
+
# Public: Get the basic movie information for a specific movie ID.
|
19
15
|
#
|
20
|
-
# id
|
16
|
+
# id - The ID of the movie.
|
21
17
|
# options - The hash options used to filter the search (default: {}):
|
22
|
-
# :language - Language of the result data (ISO 639-1 codes)
|
18
|
+
# :language - Language of the result data (ISO 639-1 codes)
|
19
|
+
# (default: en).
|
23
20
|
#
|
24
21
|
# Examples
|
25
22
|
#
|
26
|
-
# TMDb::Movie.find(
|
27
|
-
#
|
28
|
-
# TMDb::Movie.find(32123, language: 'pt')
|
29
|
-
#
|
23
|
+
# TMDb::Movie.find(68721)
|
24
|
+
# TMDb::Movie.find(68721, language: 'pt')
|
30
25
|
def self.find(id, options = {})
|
31
|
-
|
26
|
+
res = get("/movie/#{id}", query: options)
|
27
|
+
res.success? ? Movie.new(res) : bad_response(res)
|
32
28
|
end
|
33
29
|
|
34
|
-
# Get the alternative titles for a specific movie ID.
|
30
|
+
# Public: Get the alternative titles for a specific movie ID.
|
35
31
|
#
|
36
32
|
# options - The hash options used to filter the search (default: {}):
|
37
33
|
# :country - Titles for a specific country (ISO 3166-1 code).
|
38
34
|
#
|
39
35
|
# Examples
|
40
36
|
#
|
41
|
-
# TMDb::Movie.alternative_titles(
|
42
|
-
#
|
37
|
+
# TMDb::Movie.alternative_titles(68721, country: 'br')
|
43
38
|
def self.alternative_titles(id, options = {})
|
44
|
-
|
45
|
-
|
39
|
+
res = get("/movie/#{id}/alternative_titles", query: options)
|
40
|
+
res.success? ? res['titles'] : bad_response(res)
|
46
41
|
end
|
47
42
|
|
48
|
-
# Get the images (posters and backdrops) for a specific movie
|
43
|
+
# Public: Get the images (posters and backdrops) for a specific movie ID.
|
49
44
|
#
|
50
45
|
# options - The hash options used to filter the search (default: {}):
|
51
46
|
# :language - Images of a specific language (ISO 639-1 code).
|
52
47
|
#
|
53
48
|
# Examples
|
54
49
|
#
|
55
|
-
# TMDb::Movie.find(
|
56
|
-
#
|
57
|
-
# movie = TMDb::Movie.images(598, language: 'pt')
|
58
|
-
#
|
50
|
+
# TMDb::Movie.find(68721).images
|
51
|
+
# TMDb::Movie.images(68721, language: 'pt')
|
59
52
|
def self.images(id, options = {})
|
60
|
-
|
53
|
+
res = get("/movie/#{id}/images", query: options)
|
54
|
+
res.success? ? res : bad_response(res)
|
61
55
|
end
|
62
56
|
|
63
|
-
# Get the plot keywords for a specific movie
|
57
|
+
# Public: Get the plot keywords for a specific movie ID.
|
64
58
|
#
|
65
59
|
# options - The hash options used to filter the search (default: {}):
|
66
60
|
# :language - Images of a specific language (ISO 639-1 code).
|
67
61
|
#
|
68
62
|
# Examples
|
69
63
|
#
|
70
|
-
# TMDb::Movie.keywords(
|
71
|
-
#
|
64
|
+
# TMDb::Movie.keywords(68721, language: pt)
|
72
65
|
def self.keywords(id, options = {})
|
73
|
-
|
74
|
-
|
66
|
+
res = get("/movie/#{id}/keywords", query: options)
|
67
|
+
res.success? ? res['keywords'] : bad_response(res)
|
75
68
|
end
|
76
69
|
|
77
|
-
# Get the release date by country for a specific movie
|
70
|
+
# Public: Get the release date by country for a specific movie ID.
|
78
71
|
#
|
79
72
|
# Examples
|
80
73
|
#
|
81
|
-
# TMDb::Movie.releases(
|
82
|
-
#
|
74
|
+
# TMDb::Movie.releases(68721)
|
83
75
|
def self.releases(id)
|
84
|
-
|
85
|
-
|
76
|
+
res = get("/movie/#{id}/releases")
|
77
|
+
res.success? ? res['countries'] : bad_response(res)
|
86
78
|
end
|
87
79
|
|
88
|
-
# Get the list of upcoming movies. This list refreshes every day.
|
80
|
+
# Public: Get the list of upcoming movies. This list refreshes every day.
|
89
81
|
# The maximum number of items this list will include is 100.
|
90
82
|
#
|
91
83
|
# options - The hash options used to filter the search (default: {}):
|
@@ -96,10 +88,14 @@ module TMDb
|
|
96
88
|
#
|
97
89
|
# TMDb::Movie.upcoming
|
98
90
|
# TMDb::Movie.upcoming(page: 3, language: 'pt')
|
99
|
-
#
|
100
91
|
def self.upcoming(options = {})
|
101
|
-
|
102
|
-
|
92
|
+
res = get('/movie/upcoming', query: options)
|
93
|
+
|
94
|
+
if res.success?
|
95
|
+
res['results'].map { |movie| Movie.new(movie) }
|
96
|
+
else
|
97
|
+
bad_response(res)
|
98
|
+
end
|
103
99
|
end
|
104
100
|
end
|
105
101
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
require "cgi"
|
2
|
-
|
3
1
|
module TMDb
|
4
2
|
module Searchable
|
5
|
-
# Search
|
3
|
+
# Public: Search resources like a movie, a person, a collection and so on.
|
6
4
|
#
|
5
|
+
## For a movie
|
7
6
|
# query - Query string that will be matched with the movie name.
|
8
7
|
# options - The hash options used to filter the search (default: {}):
|
9
8
|
# :page - The current page of results.
|
@@ -13,21 +12,24 @@ module TMDb
|
|
13
12
|
#
|
14
13
|
# Examples
|
15
14
|
#
|
15
|
+
## For a movie
|
16
16
|
# TMDb::Movie.search('Iron Man')
|
17
|
-
#
|
18
17
|
# TMDb::Movie.search('The Matrix', year: 1999)
|
19
|
-
#
|
20
18
|
# TMDb::Movie.search('Forret Gump', language: 'pt', year: 1994)
|
21
19
|
def search(query, options = {})
|
22
|
-
# require "pry"; binding.pry
|
23
20
|
options.merge!(query: query)
|
24
|
-
|
25
|
-
|
21
|
+
res = get("/search/#{resource}", query: options)
|
22
|
+
if res.success?
|
23
|
+
res['results'].map { |attributes| new(attributes) }
|
24
|
+
else
|
25
|
+
bad_response(res)
|
26
|
+
end
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
+
private
|
30
|
+
|
29
31
|
def resource
|
30
|
-
name.split('::').last.downcase
|
32
|
+
name.split('::').last.downcase
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
File without changes
|
File without changes
|
File without changes
|