themoviedb-jzg 0.0.27
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/themoviedb-jzg.rb +12 -0
- data/lib/themoviedb-jzg/api.rb +38 -0
- data/lib/themoviedb-jzg/collection.rb +25 -0
- data/lib/themoviedb-jzg/company.rb +27 -0
- data/lib/themoviedb-jzg/configuration.rb +50 -0
- data/lib/themoviedb-jzg/episode.rb +37 -0
- data/lib/themoviedb-jzg/find.rb +31 -0
- data/lib/themoviedb-jzg/genre.rb +63 -0
- data/lib/themoviedb-jzg/job.rb +26 -0
- data/lib/themoviedb-jzg/movie.rb +161 -0
- data/lib/themoviedb-jzg/person.rb +86 -0
- data/lib/themoviedb-jzg/resource.rb +58 -0
- data/lib/themoviedb-jzg/search.rb +79 -0
- data/lib/themoviedb-jzg/season.rb +37 -0
- data/lib/themoviedb-jzg/tv.rb +82 -0
- data/lib/themoviedb-jzg/version.rb +3 -0
- data/spec/company_spec.rb +97 -0
- data/spec/find_spec.rb +31 -0
- data/spec/movie_spec.rb +316 -0
- data/spec/person_spec.rb +145 -0
- data/spec/tv_spec.rb +458 -0
- data/themoviedb-jzg.gemspec +52 -0
- metadata +154 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d0e3e979b9c153288e4885017159f379fc36df0c
|
4
|
+
data.tar.gz: 90b27fadfd7f0e78e6452b7454fa0379dca144ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 05fc5b343b81cf08ad408f0cae23ee78b6d655e0b4b823a8b3a4c161450ee32328d12baab898c8c4c1ddbe8b9ad688674687169e3230f50baa3336f8516c6ace
|
7
|
+
data.tar.gz: db9ebd64aa33e1e9501607e5f6ae068d0da7bf393e1f661f32f3dbcab7f9a7f575e65d9da72d3cfb42623feaed0761fc13f5816bda062253799c2f7d33f68caf
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'httparty'
|
3
|
+
require 'hashugar'
|
4
|
+
|
5
|
+
["api", "search", "resource", "configuration"].each do |inc|
|
6
|
+
require File.join(File.dirname(__FILE__), "themoviedb-jzg", inc)
|
7
|
+
end
|
8
|
+
|
9
|
+
["movie", "tv", "season", "episode", "collection", "person", "company", "genre", "find", "job"].each do |inc|
|
10
|
+
require File.join(File.dirname(__FILE__), "themoviedb-jzg", inc)
|
11
|
+
end
|
12
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Api
|
3
|
+
include HTTParty
|
4
|
+
base_uri 'http://api.themoviedb.org/3/'
|
5
|
+
format :json
|
6
|
+
headers 'Accept' => 'application/json'
|
7
|
+
headers 'Content-Type' => 'application/json'
|
8
|
+
|
9
|
+
def self.config
|
10
|
+
@@config ||= {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.key(api_key)
|
14
|
+
self.config[:api_key] = api_key
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.language(lang)
|
18
|
+
if (lang.nil?)
|
19
|
+
self.config.delete(:language)
|
20
|
+
else
|
21
|
+
self.config[:language] = lang
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.etag(etag)
|
26
|
+
headers 'If-None-Match' => '"' + etag + '"'
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.response
|
30
|
+
@@response ||= {}
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.set_response(hash)
|
34
|
+
@@response = hash
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Collection < Resource
|
3
|
+
has_resource 'collection', :plural => 'collections'
|
4
|
+
|
5
|
+
#http://docs.themoviedb.apiary.io/#collections
|
6
|
+
@@fields = [
|
7
|
+
:backdrop_path,
|
8
|
+
:id,
|
9
|
+
:name,
|
10
|
+
:parts,
|
11
|
+
:poster_path
|
12
|
+
]
|
13
|
+
|
14
|
+
@@fields.each do |field|
|
15
|
+
attr_accessor field
|
16
|
+
end
|
17
|
+
|
18
|
+
#Get all of the images for a particular collection by collection id.
|
19
|
+
def self.images(id, conditions={})
|
20
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/images")
|
21
|
+
search.fetch_response
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Company < Resource
|
3
|
+
has_resource 'company', :plural => 'companies'
|
4
|
+
|
5
|
+
#http://docs.themoviedb.apiary.io/#companies
|
6
|
+
@@fields = [
|
7
|
+
:description,
|
8
|
+
:headquarters,
|
9
|
+
:homepage,
|
10
|
+
:id,
|
11
|
+
:logo_path,
|
12
|
+
:name,
|
13
|
+
:parent_company
|
14
|
+
]
|
15
|
+
|
16
|
+
@@fields.each do |field|
|
17
|
+
attr_accessor field
|
18
|
+
end
|
19
|
+
|
20
|
+
#Get the list of movies associated with a particular company.
|
21
|
+
def self.movies(id, conditions={})
|
22
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/movies")
|
23
|
+
search.fetch
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Configuration
|
3
|
+
def initialize()
|
4
|
+
@params = {}
|
5
|
+
@resource = '/configuration'
|
6
|
+
self
|
7
|
+
end
|
8
|
+
|
9
|
+
# To build an image URL, you will need 3 pieces of data.
|
10
|
+
# The base_url, size and file_path.
|
11
|
+
# Simply combine them all and you will have a fully qualified URL. Here’s an example URL:
|
12
|
+
# http://cf2.imgobject.com/t/p/w500/8uO0gUM8aNqYLs1OsTBQiXu0fEv.jpg
|
13
|
+
def base_url
|
14
|
+
images_config['base_url']
|
15
|
+
end
|
16
|
+
|
17
|
+
# HTTPS
|
18
|
+
def secure_base_url
|
19
|
+
images_config['secure_base_url']
|
20
|
+
end
|
21
|
+
|
22
|
+
def poster_sizes
|
23
|
+
images_config['poster_sizes']
|
24
|
+
end
|
25
|
+
|
26
|
+
def backdrop_sizes
|
27
|
+
images_config['backdrop_sizes']
|
28
|
+
end
|
29
|
+
|
30
|
+
def profile_sizes
|
31
|
+
images_config['profile_sizes']
|
32
|
+
end
|
33
|
+
|
34
|
+
def logo_sizes
|
35
|
+
images_config['logo_sizes']
|
36
|
+
end
|
37
|
+
|
38
|
+
def fetch_response
|
39
|
+
options = @params.merge(Api.config)
|
40
|
+
response = Api.get(@resource, :query => options)
|
41
|
+
response.to_hash
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def images_config
|
47
|
+
@images_config ||= fetch_response['images'] || {}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Episode < Resource
|
3
|
+
has_resource 'episode', :plural => 'episodes'
|
4
|
+
|
5
|
+
#Get the primary information about a TV episode by combination of a season and episode number.
|
6
|
+
def self.detail(id, season, episode, conditions={})
|
7
|
+
search = Tmdb::Search.new("/tv/#{self.endpoint_id + id.to_s}/season/#{self.endpoint_id + season.to_s}/#{self.endpoints[:singular]}/#{self.endpoint_id + episode.to_s}")
|
8
|
+
search.filter(conditions)
|
9
|
+
search.fetch_response
|
10
|
+
end
|
11
|
+
|
12
|
+
#Get the TV episode cast credits by combination of season and episode number.
|
13
|
+
def self.cast(id, season, episode, conditions={})
|
14
|
+
search = Tmdb::Search.new("/tv/#{self.endpoint_id + id.to_s}/season/#{self.endpoint_id + season.to_s}/#{self.endpoints[:singular]}/#{self.endpoint_id + episode.to_s}/credits")
|
15
|
+
search.fetch_response.cast
|
16
|
+
end
|
17
|
+
|
18
|
+
#Get the TV episode crew credits by combination of season and episode number.
|
19
|
+
def self.crew(id, season, episode, conditions={})
|
20
|
+
search = Tmdb::Search.new("/tv/#{self.endpoint_id + id.to_s}/season/#{self.endpoint_id + season.to_s}/#{self.endpoints[:singular]}/#{self.endpoint_id + episode.to_s}/credits")
|
21
|
+
search.fetch_response.crew
|
22
|
+
end
|
23
|
+
|
24
|
+
#Get the external ids for a TV episode by comabination of a season and episode number.
|
25
|
+
def self.external_ids(id, season, episode, conditions={})
|
26
|
+
search = Tmdb::Search.new("/tv/#{self.endpoint_id + id.to_s}/season/#{self.endpoint_id + season.to_s}/#{self.endpoints[:singular]}/#{self.endpoint_id + episode.to_s}/external_ids")
|
27
|
+
search.fetch_response
|
28
|
+
end
|
29
|
+
|
30
|
+
#Get the images (episode stills) for a TV episode by combination of a season and episode number.
|
31
|
+
def self.images(id, season, episode, conditions={})
|
32
|
+
search = Tmdb::Search.new("/tv/#{self.endpoint_id + id.to_s}/season/#{self.endpoint_id + season.to_s}/#{self.endpoints[:singular]}/#{self.endpoint_id + episode.to_s}/images")
|
33
|
+
search.fetch_response
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Find < Resource
|
3
|
+
has_resource 'find'
|
4
|
+
|
5
|
+
def self.imdb_id(id, conditions={})
|
6
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}")
|
7
|
+
search.fetch_response(external_source: 'imdb_id')
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.freebase_mid(id, conditions={})
|
11
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}")
|
12
|
+
search.fetch_response(external_source: 'freebase_mid')
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.freebase_id(id, conditions={})
|
16
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}")
|
17
|
+
search.fetch_response(external_source: 'freebase_id')
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.tvrage_id(id, conditions={})
|
21
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}")
|
22
|
+
search.fetch_response(external_source: 'tvrage_id')
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.tvdb_id(id, conditions={})
|
26
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}")
|
27
|
+
search.fetch_response(external_source: 'tvdb_id')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Genre
|
3
|
+
def initialize(attributes={})
|
4
|
+
attributes.each do |key, value|
|
5
|
+
if self.respond_to?(key.to_sym)
|
6
|
+
self.instance_variable_set("@#{key}", value)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
#http://docs.themoviedb.apiary.io/#genres
|
12
|
+
@@fields = [
|
13
|
+
:id,
|
14
|
+
:page,
|
15
|
+
:total_pages,
|
16
|
+
:total_results,
|
17
|
+
:results
|
18
|
+
]
|
19
|
+
|
20
|
+
@@fields.each do |field|
|
21
|
+
attr_accessor field
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.search(query)
|
25
|
+
self.detail(self.list['genres'].detect { |g| g['name'] == query }['id'])
|
26
|
+
end
|
27
|
+
|
28
|
+
class << self
|
29
|
+
alias_method :find, :search
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.list
|
33
|
+
search = Tmdb::Search.new("/genre/list")
|
34
|
+
search.fetch_response
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.detail(id, conditions={})
|
38
|
+
url = "/genre/#{id}/movies"
|
39
|
+
if !conditions.empty?
|
40
|
+
url << "?"
|
41
|
+
conditions.each_with_index do |(key, value), index|
|
42
|
+
url << "#{key}=#{value}"
|
43
|
+
if index != conditions.length - 1
|
44
|
+
url << "&"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
search = Tmdb::Search.new(url)
|
49
|
+
self.new(search.fetch_response)
|
50
|
+
end
|
51
|
+
|
52
|
+
def name
|
53
|
+
@name ||= self.class.list['genres'].detect { |g| g['id'] == @id }['name']
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_page(page_number, conditions={})
|
57
|
+
if page_number != @page and page_number > 0 and page_number <= @total_pages
|
58
|
+
conditions.merge!({ :page => page_number })
|
59
|
+
self.class.detail(id, conditions)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Job
|
3
|
+
def initialize(attributes={})
|
4
|
+
attributes.each do |key, value|
|
5
|
+
if self.respond_to?(key.to_sym)
|
6
|
+
self.instance_variable_set("@#{key}", value)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# http://docs.themoviedb.apiary.io/#jobs
|
12
|
+
@@fields = [
|
13
|
+
:name,
|
14
|
+
:department
|
15
|
+
]
|
16
|
+
|
17
|
+
@@fields.each do |field|
|
18
|
+
attr_accessor field
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.list
|
22
|
+
search = Tmdb::Search.new("/job/list")
|
23
|
+
search.fetch_response
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
module Tmdb
|
2
|
+
class Movie < Resource
|
3
|
+
has_resource 'movie', :plural => 'movies'
|
4
|
+
|
5
|
+
#http://docs.themoviedb.apiary.io/#movies
|
6
|
+
@@fields = [
|
7
|
+
:adult,
|
8
|
+
:backdrop_path,
|
9
|
+
:belongs_to_collection,
|
10
|
+
:budget,
|
11
|
+
:genres,
|
12
|
+
:homepage,
|
13
|
+
:id,
|
14
|
+
:imdb_id,
|
15
|
+
:original_title,
|
16
|
+
:overview,
|
17
|
+
:popularity,
|
18
|
+
:poster_path,
|
19
|
+
:production_companies,
|
20
|
+
:production_countries,
|
21
|
+
:release_date,
|
22
|
+
:revenue,
|
23
|
+
:runtime,
|
24
|
+
:spoken_languages,
|
25
|
+
:status,
|
26
|
+
:tagline,
|
27
|
+
:title,
|
28
|
+
:vote_average,
|
29
|
+
:vote_count,
|
30
|
+
:alternative_titles,
|
31
|
+
:credits,
|
32
|
+
:images,
|
33
|
+
:keywords,
|
34
|
+
:releases,
|
35
|
+
:trailers,
|
36
|
+
:translations,
|
37
|
+
:reviews,
|
38
|
+
:lists,
|
39
|
+
:changes
|
40
|
+
]
|
41
|
+
|
42
|
+
@@fields.each do |field|
|
43
|
+
attr_accessor field
|
44
|
+
end
|
45
|
+
|
46
|
+
#Get the latest movie id. singular
|
47
|
+
def self.latest
|
48
|
+
search = Tmdb::Search.new("/movie/latest")
|
49
|
+
search.fetch_response
|
50
|
+
end
|
51
|
+
|
52
|
+
#Get the list of upcoming movies. This list refreshes every day. The maximum number of items this list will include is 100.
|
53
|
+
def self.upcoming
|
54
|
+
search = Tmdb::Search.new("/movie/upcoming")
|
55
|
+
search.fetch
|
56
|
+
end
|
57
|
+
|
58
|
+
#Get the list of movies playing in theatres. This list refreshes every day. The maximum number of items this list will include is 100.
|
59
|
+
def self.now_playing
|
60
|
+
search = Tmdb::Search.new("/movie/now_playing")
|
61
|
+
search.fetch
|
62
|
+
end
|
63
|
+
|
64
|
+
#Get the list of popular movies on The Movie Database. This list refreshes every day.
|
65
|
+
def self.popular
|
66
|
+
search = Tmdb::Search.new("/movie/popular")
|
67
|
+
search.fetch
|
68
|
+
end
|
69
|
+
|
70
|
+
#Get the list of top rated movies. By default, this list will only include movies that have 10 or more votes. This list refreshes every day.
|
71
|
+
def self.top_rated
|
72
|
+
search = Tmdb::Search.new("/movie/top_rated")
|
73
|
+
search.fetch
|
74
|
+
end
|
75
|
+
|
76
|
+
#Discover movies by different types of data like average rating, number of votes, genres and certifications.
|
77
|
+
def self.discover(conditions={})
|
78
|
+
search = Tmdb::Search.new("/discover/movie")
|
79
|
+
search.filter(conditions)
|
80
|
+
search.fetch
|
81
|
+
end
|
82
|
+
|
83
|
+
#Get the alternative titles for a specific movie id.
|
84
|
+
def self.alternative_titles(id, conditions={})
|
85
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/alternative_titles")
|
86
|
+
search.fetch_response
|
87
|
+
end
|
88
|
+
|
89
|
+
#Get the cast information for a specific movie id.
|
90
|
+
def self.casts(id, conditions={})
|
91
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/casts")
|
92
|
+
search.fetch_response.cast
|
93
|
+
end
|
94
|
+
|
95
|
+
#Get the cast information for a specific movie id.
|
96
|
+
def self.crew(id, conditions={})
|
97
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/casts")
|
98
|
+
search.fetch_response.crew
|
99
|
+
end
|
100
|
+
|
101
|
+
#Get the images (posters and backdrops) for a specific movie id.
|
102
|
+
def self.images(id, conditions={})
|
103
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/images")
|
104
|
+
search.fetch_response
|
105
|
+
end
|
106
|
+
|
107
|
+
#Get the plot keywords for a specific movie id.
|
108
|
+
def self.keywords(id, conditions={})
|
109
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/keywords")
|
110
|
+
search.fetch_response
|
111
|
+
end
|
112
|
+
|
113
|
+
#Get the release date by country for a specific movie id.
|
114
|
+
def self.releases(id, conditions={})
|
115
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/releases")
|
116
|
+
search.fetch_response
|
117
|
+
end
|
118
|
+
|
119
|
+
#Get the trailers for a specific movie id.
|
120
|
+
def self.trailers(id, conditions={})
|
121
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/trailers")
|
122
|
+
search.fetch_response
|
123
|
+
end
|
124
|
+
|
125
|
+
#Get the translations for a specific movie id.
|
126
|
+
def self.translations(id, conditions={})
|
127
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/translations")
|
128
|
+
search.fetch_response
|
129
|
+
end
|
130
|
+
|
131
|
+
#Get the similar movies for a specific movie id.
|
132
|
+
def self.similar_movies(id, conditions={})
|
133
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/similar_movies")
|
134
|
+
search.filter(conditions)
|
135
|
+
search.fetch
|
136
|
+
end
|
137
|
+
|
138
|
+
#Get the lists that the movie belongs to.
|
139
|
+
def self.lists(id, conditions={})
|
140
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/lists")
|
141
|
+
search.fetch_response
|
142
|
+
end
|
143
|
+
|
144
|
+
#Get the changes for a specific movie id.
|
145
|
+
#Changes are grouped by key, and ordered by date in descending order.
|
146
|
+
#By default, only the last 24 hours of changes are returned.
|
147
|
+
#The maximum number of days that can be returned in a single request is 14.
|
148
|
+
#The language is present on fields that are translatable.
|
149
|
+
def self.changes(id, conditions={})
|
150
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/changes")
|
151
|
+
search.fetch_response
|
152
|
+
end
|
153
|
+
|
154
|
+
#Get the credits for a specific movie id.
|
155
|
+
def self.credits(id, conditions={})
|
156
|
+
search = Tmdb::Search.new("/#{self.endpoints[:singular]}/#{self.endpoint_id + id.to_s}/credits")
|
157
|
+
search.fetch_response
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
end
|