tmdb_trailer 0.2.8 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/tmdb_trailer.rb +18 -41
- data/spec/test.pstore +1 -1
- data/tmdb_trailer.gemspec +2 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.9
|
data/lib/tmdb_trailer.rb
CHANGED
@@ -9,30 +9,19 @@ module TMDB
|
|
9
9
|
attr_reader :coll # MongoDB collection
|
10
10
|
attr_accessor :country # country associated with Trailer instance
|
11
11
|
API_KEY = File.read(File.join(File.expand_path(File.dirname(__FILE__)), "secret.txt")).gsub("\n","")
|
12
|
+
BASE_URI = "http://api.themoviedb.org/2.1/"
|
12
13
|
NEXT_PAGE = 1
|
13
14
|
# country - country code i.e "us" for united states, "hk" for hongkong
|
14
15
|
# db_name - database name to store mongo documents, will create one for you if it doesnt exists
|
15
16
|
def initialize(country,db_name)
|
16
|
-
@base_uri = "http://api.themoviedb.org/2.1/Movie.browse/en/json/"
|
17
17
|
@country = country
|
18
|
-
|
19
|
-
|
20
|
-
@db = Mongo::Connection.new.db(db_name)
|
21
|
-
@pstore = PStore.new("#{db_name}.pstore")
|
22
|
-
@coll = @db["movies"]
|
23
|
-
|
18
|
+
db = Mongo::Connection.new.db(db_name)
|
19
|
+
@coll = db["movies"]
|
24
20
|
#if mongo collection does not exist, create index to avoid duplicate documents
|
25
|
-
if @coll.count == 0
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
# initialize pstore as well
|
30
|
-
if @coll.find(:country=> @country).count == 0
|
31
|
-
@pstore.transaction do
|
32
|
-
@pstore[@country] = 1
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
21
|
+
@coll.create_index("name", :unique => true) if @coll.count == 0
|
22
|
+
# initialize pstore
|
23
|
+
@pstore = PStore.new("#{db_name}.pstore")
|
24
|
+
@pstore.transaction { @pstore[@country] = 1 } if @coll.find(:country=> @country).count == 0
|
36
25
|
#initialize persistent http connection
|
37
26
|
@http = Net::HTTP::Persistent.new
|
38
27
|
end
|
@@ -54,9 +43,7 @@ module TMDB
|
|
54
43
|
#
|
55
44
|
# i.e http://api.themoviedb.org/2.1/Movie.browse/en-US/json/{API_KEY}?countries=jp&order_by=rating&order=desc&min_votes=1&page=4&per_page=50
|
56
45
|
def get_page
|
57
|
-
@pstore.transaction
|
58
|
-
return @pstore[@country]
|
59
|
-
end
|
46
|
+
@pstore.transaction { @pstore[@country] }
|
60
47
|
end
|
61
48
|
|
62
49
|
# get the result of parsed json response of Movie.browse API call of TMDB
|
@@ -64,7 +51,7 @@ module TMDB
|
|
64
51
|
votes = @country == "us" ? 3 : 0
|
65
52
|
@params = "countries=#{@country}&order_by=rating&" +
|
66
53
|
"min_votes=#{votes}&order=desc&page=#{page}&per_page=50"
|
67
|
-
url = "#{
|
54
|
+
url = "#{BASE_URI}Movie.browse/en/json/#{API_KEY}?#{@params}"
|
68
55
|
uri = URI.parse(url)
|
69
56
|
response = @http.request(uri).body
|
70
57
|
movies = JSON.parse(response)
|
@@ -105,44 +92,34 @@ module TMDB
|
|
105
92
|
|
106
93
|
# get the page which the API should use the next it calls Movie.browse
|
107
94
|
def current_page
|
108
|
-
@pstore.transaction
|
109
|
-
@pstore[@country]
|
110
|
-
end
|
95
|
+
@pstore.transaction { @pstore[@country] }
|
111
96
|
end
|
112
97
|
|
113
98
|
# if called, give a summary of progress of populating the database
|
114
99
|
def report
|
115
100
|
total = total_movies
|
116
|
-
|
117
|
-
|
118
|
-
movies_in_mongo = @coll.find(params).count
|
119
|
-
report = "#{params["country"]} currently has populated #{movies_in_mongo} out of #{total} movies available on tmdb"
|
120
|
-
return report
|
101
|
+
movies_in_mongo = @coll.find(:country => @country).count
|
102
|
+
return "#{@country} currently has populated #{movies_in_mongo} out of #{total} movies available on tmdb"
|
121
103
|
end
|
122
104
|
|
123
105
|
# gets the trailer, genre, keyword, year information using Movie.getInfo API call
|
124
106
|
def get_extra_info(id)
|
125
107
|
genres = []
|
126
108
|
keywords = []
|
127
|
-
url = "
|
109
|
+
url = "#{BASE_URI}Movie.getInfo/en/json/#{API_KEY}/#{id}"
|
128
110
|
uri = URI.parse(url)
|
129
111
|
response = @http.request(uri).body
|
130
|
-
movie = JSON.parse(response)
|
131
|
-
trailer = movie[
|
132
|
-
movie[
|
133
|
-
|
134
|
-
end
|
135
|
-
keywords = movie[0]["keywords"]
|
136
|
-
movie[0]["released"] =~ /^(\d*)/
|
112
|
+
movie = JSON.parse(response)[0]
|
113
|
+
trailer, keywords = movie["trailer"], movie["keywords"]
|
114
|
+
movie["genres"].each {|g| genres << g["name"]}
|
115
|
+
movie["released"] =~ /^(\d*)/
|
137
116
|
year = $1
|
138
117
|
return trailer,genres,keywords,year
|
139
118
|
end
|
140
119
|
|
141
120
|
# stores locally the page which the API should use the next it calls Movie.browse
|
142
121
|
def remember_page(page)
|
143
|
-
@pstore.transaction
|
144
|
-
@pstore[@country] = page
|
145
|
-
end
|
122
|
+
@pstore.transaction { @pstore[@country] = page }
|
146
123
|
end
|
147
124
|
|
148
125
|
end
|
data/spec/test.pstore
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
{
|
2
|
-
"
|
2
|
+
"czi"nzi"bri"roi"usi
|
data/tmdb_trailer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tmdb_trailer}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.9"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["redgetan"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-23}
|
13
13
|
s.description = %q{ Movie Trailer information will be stored in mongoDB. Information includes year released, movie genres, keywords, and country}
|
14
14
|
s.email = %q{redge.tan@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tmdb_trailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 9
|
10
|
+
version: 0.2.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- redgetan
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-23 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|