cannikin-encosion 0.1.4 → 0.2.0
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.
- data/VERSION +1 -1
- data/encosion.gemspec +2 -2
- data/lib/encosion/base.rb +60 -84
- data/lib/encosion/video.rb +63 -31
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1
|
1
|
+
0.2.1
|
data/encosion.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{encosion}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.2.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Rob Cameron"]
|
9
|
-
s.date = %q{2009-07-
|
9
|
+
s.date = %q{2009-07-22}
|
10
10
|
s.email = %q{cannikinn@gmail.com}
|
11
11
|
s.extra_rdoc_files = [
|
12
12
|
"LICENSE",
|
data/lib/encosion/base.rb
CHANGED
@@ -48,95 +48,29 @@ module Encosion
|
|
48
48
|
# This is an alias for find(:all)
|
49
49
|
def all(*args)
|
50
50
|
find(:all, *args)
|
51
|
-
end
|
51
|
+
end
|
52
52
|
|
53
|
-
|
53
|
+
# Performs an HTTP GET
|
54
|
+
def get(server,port,path,secure,command,options)
|
55
|
+
http = HTTPClient.new
|
56
|
+
url = secure ? 'https://' : 'http://'
|
57
|
+
url += "#{server}:#{port}#{path}"
|
54
58
|
|
55
|
-
|
56
|
-
|
57
|
-
def extract_options(opts)
|
58
|
-
opts.last.is_a?(::Hash) ? opts.pop : {}
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
# Find an asset from a single or array of ids
|
63
|
-
def find_from_ids(ids, options)
|
64
|
-
expects_array = ids.first.kind_of?(Array)
|
65
|
-
return ids.first if expects_array && ids.first.empty?
|
66
|
-
|
67
|
-
ids = ids.flatten.compact.uniq
|
68
|
-
|
69
|
-
case ids.size
|
70
|
-
when 0
|
71
|
-
raise AssetNotFound, "Couldn't find #{self.class} without an ID"
|
72
|
-
when 1
|
73
|
-
result = find_one(ids.first, options)
|
74
|
-
expects_array ? [ result ] : result
|
75
|
-
else
|
76
|
-
find_some(ids, options)
|
77
|
-
end
|
78
|
-
end
|
59
|
+
options.merge!({'command' => command })
|
60
|
+
query_string = options.collect { |key,value| "#{key.to_s}=#{value.to_s}" }.join('&')
|
79
61
|
|
62
|
+
response = http.get(url, query_string)
|
80
63
|
|
81
|
-
#
|
82
|
-
|
83
|
-
http = HTTPClient.new
|
84
|
-
url = secure ? 'https://' : 'http://'
|
85
|
-
url += "#{server}:#{port}#{path}"
|
86
|
-
|
87
|
-
options.merge!({'command' => command })
|
88
|
-
query_string = options.collect { |key,value| "#{key.to_s}=#{value.to_s}" }.join('&')
|
89
|
-
|
90
|
-
response = http.get(url, query_string)
|
91
|
-
|
92
|
-
body = response.body.content.strip == 'null' ? nil : JSON.parse(response.body.content.strip) # if the call returns 'null' then there were no valid results
|
93
|
-
header = response.header
|
94
|
-
|
95
|
-
error_check(header,body)
|
96
|
-
|
97
|
-
return body
|
98
|
-
end
|
99
|
-
|
64
|
+
body = response.body.content.strip == 'null' ? nil : JSON.parse(response.body.content.strip) # if the call returns 'null' then there were no valid results
|
65
|
+
header = response.header
|
100
66
|
|
101
|
-
|
102
|
-
def error_check(header,body)
|
103
|
-
if header.status_code == 200
|
104
|
-
return true if body.nil?
|
105
|
-
puts body['error']
|
106
|
-
if body.has_key? 'error' && !body['error'].nil?
|
107
|
-
message = "Brightcove responded with an error: #{body['error']} (code #{body['code']})"
|
108
|
-
body['errors'].each do |error|
|
109
|
-
message += "\n#{error.values.first} (code #{error.values.last})"
|
110
|
-
end if body.has_key? 'errors'
|
111
|
-
raise BrightcoveException, message
|
112
|
-
end
|
113
|
-
else
|
114
|
-
# should only happen if the Brightcove API is unavailable (even BC errors return a 200)
|
115
|
-
raise BrightcoveException, body + " (status code: #{header.status_code})"
|
116
|
-
end
|
117
|
-
end
|
67
|
+
error_check(header,body)
|
118
68
|
|
69
|
+
# puts "url: #{url}\nquery_string:#{query_string}"
|
119
70
|
|
120
|
-
|
121
|
-
|
122
|
-
case type
|
123
|
-
when :read
|
124
|
-
raise MissingToken, 'No read token found' if @read_token.nil?
|
125
|
-
args.merge!({ :token => @read_token })
|
126
|
-
when :write
|
127
|
-
raise MissingToken, 'No write token found' if @write_token.nil?
|
128
|
-
args.merge!({ :token => @write_token })
|
129
|
-
end
|
130
|
-
return args.collect { |key,value| "#{key.to_s}=#{value.to_s}" }.join('&')
|
131
|
-
end
|
71
|
+
return body
|
72
|
+
end
|
132
73
|
|
133
|
-
end
|
134
|
-
|
135
|
-
|
136
|
-
#
|
137
|
-
# Instance methods
|
138
|
-
#
|
139
|
-
private
|
140
74
|
# Performs an HTTP POST
|
141
75
|
def post(server,port,path,secure,command,options,instance)
|
142
76
|
http = HTTPClient.new
|
@@ -144,7 +78,7 @@ module Encosion
|
|
144
78
|
url += "#{server}:#{port}#{path}"
|
145
79
|
|
146
80
|
content = { 'json' => { 'method' => command, 'params' => options }.to_json } # package up the variables as a JSON-RPC string
|
147
|
-
content.merge!({ 'file' => instance.file }) if instance.file # and add a file if there is one
|
81
|
+
content.merge!({ 'file' => instance.file }) if instance.respond_to?('file') # and add a file if there is one
|
148
82
|
|
149
83
|
response = http.post(url, content)
|
150
84
|
# get the header and body for error checking
|
@@ -156,8 +90,6 @@ module Encosion
|
|
156
90
|
return body
|
157
91
|
end
|
158
92
|
|
159
|
-
|
160
|
-
# TODO: shouldn't need to duplicate this method here, some way to call the class method
|
161
93
|
# Checks the HTTP response and handles any errors
|
162
94
|
def error_check(header,body)
|
163
95
|
if header.status_code == 200
|
@@ -175,6 +107,50 @@ module Encosion
|
|
175
107
|
raise BrightcoveException, body + " (status code: #{header.status_code})"
|
176
108
|
end
|
177
109
|
end
|
110
|
+
|
111
|
+
|
112
|
+
protected
|
113
|
+
|
114
|
+
# Pulls any Hash off the end of an array of arguments and returns it
|
115
|
+
def extract_options(opts)
|
116
|
+
opts.last.is_a?(::Hash) ? opts.pop : {}
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
# Find an asset from a single or array of ids
|
121
|
+
def find_from_ids(ids, options)
|
122
|
+
expects_array = ids.first.kind_of?(Array)
|
123
|
+
return ids.first if expects_array && ids.first.empty?
|
124
|
+
|
125
|
+
ids = ids.flatten.compact.uniq
|
126
|
+
|
127
|
+
case ids.size
|
128
|
+
when 0
|
129
|
+
raise AssetNotFound, "Couldn't find #{self.class} without an ID"
|
130
|
+
when 1
|
131
|
+
result = find_one(ids.first, options)
|
132
|
+
expects_array ? [ result ] : result
|
133
|
+
else
|
134
|
+
find_some(ids, options)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
# Turns a hash into a query string and appends the token
|
140
|
+
def queryize_args(args, type)
|
141
|
+
case type
|
142
|
+
when :read
|
143
|
+
raise MissingToken, 'No read token found' if @read_token.nil?
|
144
|
+
args.merge!({ :token => @read_token })
|
145
|
+
when :write
|
146
|
+
raise MissingToken, 'No write token found' if @write_token.nil?
|
147
|
+
args.merge!({ :token => @write_token })
|
148
|
+
end
|
149
|
+
return args.collect { |key,value| "#{key.to_s}=#{value.to_s}" }.join('&')
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
178
154
|
|
179
155
|
end
|
180
156
|
|
data/lib/encosion/video.rb
CHANGED
@@ -37,7 +37,6 @@ module Encosion
|
|
37
37
|
|
38
38
|
# Find a video by reference_id. Invokes Brightcove Media API command 'find_video_by_reference_id' or
|
39
39
|
# 'find_videos_by_reference_ids' depending on whether you call one or multiple ids
|
40
|
-
#
|
41
40
|
# Encosion::Video.find_by_reference_id('mycompany_1',:token => 'asdf')
|
42
41
|
# Encosion::Video.find_by_reference_id('mycompany_1','mycompany_2','mycompany_3',:token => 'asdf')
|
43
42
|
|
@@ -55,12 +54,11 @@ module Encosion
|
|
55
54
|
else
|
56
55
|
options.merge!({:reference_ids => ids.join(',')})
|
57
56
|
response = get(SERVER,PORT,READ_PATH,SECURE,'find_videos_by_reference_ids',options)
|
58
|
-
return self.parse(
|
57
|
+
return response['items'].collect { |item| self.parse(item) }
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
62
61
|
# Find a video by text search. Invokes Brightcove Media API command 'find_videos_by_text'
|
63
|
-
#
|
64
62
|
# Encosion::Video.find_by_text('funny videos',:token => 'asdf')
|
65
63
|
|
66
64
|
def find_by_text(*args)
|
@@ -68,25 +66,29 @@ module Encosion
|
|
68
66
|
text = args.flatten.compact.uniq
|
69
67
|
raise AssetNotFound, "Couldn't find #{self.class} without text" if text == ''
|
70
68
|
options.merge!({:text => text.first})
|
71
|
-
response = get(SERVER,PORT,READ_PATH,SECURE,'find_videos_by_text',options)
|
72
|
-
|
69
|
+
if response = get(SERVER,PORT,READ_PATH,SECURE,'find_videos_by_text',options)
|
70
|
+
return response['items'].collect { |item| self.parse(item) }
|
71
|
+
else
|
72
|
+
nil
|
73
|
+
end
|
73
74
|
end
|
74
75
|
|
75
76
|
|
76
77
|
# Find videos related to the given video_id. Invokes Brightcove Media API command 'find_related_videos'
|
77
|
-
#
|
78
78
|
# Encosion::Video.find_related(123456,:token => 'asdf')
|
79
79
|
|
80
80
|
def find_related(*args)
|
81
81
|
options = extract_options(args)
|
82
82
|
raise AssetNotFound, "Cannot find related #{self.class}s without a video_id or reference_id" if options[:video_id].nil? && options[:reference_id].nil?
|
83
|
-
response = get(SERVER,PORT,READ_PATH,SECURE,'find_related_videos',options)
|
84
|
-
|
83
|
+
if response = get(SERVER,PORT,READ_PATH,SECURE,'find_related_videos',options)
|
84
|
+
return response['items'].collect { |item| self.parse(item) }
|
85
|
+
else
|
86
|
+
return nil
|
87
|
+
end
|
85
88
|
end
|
86
89
|
|
87
90
|
|
88
91
|
# Find a video by tag search. Invokes Brightcove Media API command 'find_videos_by_tags'
|
89
|
-
#
|
90
92
|
# Encosion::Video.find_by_tags('bloopers','gagreel','funny',:token => 'asdf')
|
91
93
|
|
92
94
|
def find_by_tags(*args)
|
@@ -98,10 +100,36 @@ module Encosion
|
|
98
100
|
raise AssetNotFound, "Couldn't find #{self.class} without tags"
|
99
101
|
else
|
100
102
|
options.merge!({:and_tags => tags.join(',')})
|
101
|
-
response = get(SERVER,PORT,READ_PATH,SECURE,'find_videos_by_tags',options)
|
102
|
-
|
103
|
+
if response = get(SERVER,PORT,READ_PATH,SECURE,'find_videos_by_tags',options)
|
104
|
+
return response['items'].collect { |item| self.parse(item) }
|
105
|
+
else
|
106
|
+
return nil
|
107
|
+
end
|
103
108
|
end
|
104
109
|
end
|
110
|
+
|
111
|
+
|
112
|
+
# Returns the status of a video upload (returns one of :uploading | :processing | :complete | :error )
|
113
|
+
# Takes either Brightcove's video_id or your own reference_id. If you pass an integer it's assumed to be
|
114
|
+
# a video_id, if you pass a string it's assumed to be a reference_id.
|
115
|
+
# Encosion::Video.status(12345)
|
116
|
+
|
117
|
+
def status(*args)
|
118
|
+
options = extract_options(args)
|
119
|
+
id = args.flatten.compact.uniq.first
|
120
|
+
|
121
|
+
if id.class == String
|
122
|
+
options.merge!({:reference_id => id})
|
123
|
+
else
|
124
|
+
options.merge!({:video_id => id})
|
125
|
+
end
|
126
|
+
|
127
|
+
if response = Video.post(SERVER,PORT,WRITE_PATH,SECURE,'get_upload_status',options,self)
|
128
|
+
return response['result'].downcase.to_sym
|
129
|
+
else
|
130
|
+
return nil
|
131
|
+
end
|
132
|
+
end
|
105
133
|
|
106
134
|
protected
|
107
135
|
# Find some videos by ids
|
@@ -116,7 +144,6 @@ module Encosion
|
|
116
144
|
def find_some(ids, options)
|
117
145
|
options.merge!({:video_ids => ids.join(',')})
|
118
146
|
response = get(SERVER,PORT,READ_PATH,SECURE,'find_videos_by_ids',options)
|
119
|
-
puts response
|
120
147
|
return response['items'].collect { |item| self.parse(item) }
|
121
148
|
end
|
122
149
|
|
@@ -130,24 +157,29 @@ module Encosion
|
|
130
157
|
|
131
158
|
# Creates a new Video object from a Ruby hash (used to create a video from a parsed API call)
|
132
159
|
def parse(obj)
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
160
|
+
puts obj.inspect
|
161
|
+
if obj
|
162
|
+
args = {:id => obj['id'].to_i,
|
163
|
+
:name => obj['name'],
|
164
|
+
:short_description => obj['shortDescription'],
|
165
|
+
:long_description => obj['longDescription'],
|
166
|
+
:creation_date => Time.at(obj['creationDate'].to_i/1000),
|
167
|
+
:published_date => Time.at(obj['publishedDate'].to_i/1000),
|
168
|
+
:last_modified_date => Time.at(obj['lastModifiedDate'].to_i/1000),
|
169
|
+
:link_url => obj['linkURL'],
|
170
|
+
:link_text => obj['linkText'],
|
171
|
+
:tags => obj['tags'],
|
172
|
+
:video_still_url => obj['videoStillURL'],
|
173
|
+
:thumbnail_url => obj['thumbnailURL'],
|
174
|
+
:reference_id => obj['referenceID'],
|
175
|
+
:length => obj['length'].to_i,
|
176
|
+
:economics => obj['economics'] ? ENUMS[:economics].find { |key,value| value == obj['economics'] }.first : nil,
|
177
|
+
:plays_total => obj['playsTotal'].to_i,
|
178
|
+
:plays_trailing_week => obj['playsTrailingWeek'].to_i } unless obj.nil?
|
179
|
+
return self.new(args)
|
180
|
+
else
|
181
|
+
return nil
|
182
|
+
end
|
151
183
|
end
|
152
184
|
|
153
185
|
end
|
@@ -185,7 +217,7 @@ module Encosion
|
|
185
217
|
# check to make sure we have everything needed for a create_video call
|
186
218
|
raise NoFile, "You need to attach a file to this video before you can upload it: Video.file = File.new('/path/to/file')" if @file.nil?
|
187
219
|
options = args.merge({ 'video' => self.to_brightcove }) # take the parameters of this video and make them a valid video object for upload
|
188
|
-
response = post(SERVER,PORT,WRITE_PATH,SECURE,'create_video',options,self)
|
220
|
+
response = Video.post(SERVER,PORT,WRITE_PATH,SECURE,'create_video',options,self)
|
189
221
|
return response['result'] # returns the Brightcove ID of the video that was just uploaded
|
190
222
|
end
|
191
223
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cannikin-encosion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Cameron
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-07-
|
12
|
+
date: 2009-07-22 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|