kaltura-ruby 0.1.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/.document +5 -0
- data/.gitignore +7 -0
- data/LICENSE +661 -0
- data/README.rdoc +32 -0
- data/Rakefile +59 -0
- data/VERSION +1 -0
- data/VERSION.yml +5 -0
- data/kaltura-ruby.gemspec +65 -0
- data/lib/kaltura-ruby.rb +4 -0
- data/lib/kaltura_client.rb +5687 -0
- data/lib/kaltura_client_base.rb +282 -0
- data/lib/test.rb +26 -0
- data/test/kaltura-ruby_test.rb +7 -0
- data/test/test.rb +23 -0
- data/test/test_helper.rb +10 -0
- metadata +125 -0
@@ -0,0 +1,282 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
3
|
+
require 'net/http'
|
4
|
+
require 'digest/md5'
|
5
|
+
require 'rexml/document'
|
6
|
+
|
7
|
+
module Kaltura
|
8
|
+
class KalturaClientBase
|
9
|
+
attr_accessor :config
|
10
|
+
attr_accessor :ks
|
11
|
+
attr_reader :is_multirequest
|
12
|
+
|
13
|
+
def initialize(config)
|
14
|
+
@should_log = false
|
15
|
+
@config = config
|
16
|
+
@calls_queue = []
|
17
|
+
|
18
|
+
if @config.logger != nil
|
19
|
+
@should_log = true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def queue_service_action_call(service, action, params = {})
|
24
|
+
# in start session partner id is optional (default -1). if partner id was not set, use the one in the config
|
25
|
+
if (!params.key?('partnerId') || params['partnerId'] == -1)
|
26
|
+
params['partnerId'] = config.partner_id;
|
27
|
+
end
|
28
|
+
|
29
|
+
add_param(params, 'ks', @ks);
|
30
|
+
|
31
|
+
call = KalturaServiceActionCall.new(service, action, params);
|
32
|
+
@calls_queue.push(call);
|
33
|
+
end
|
34
|
+
|
35
|
+
def do_queue()
|
36
|
+
start_time = Time.now
|
37
|
+
|
38
|
+
if @calls_queue.length == 0
|
39
|
+
@is_multirequest = false
|
40
|
+
return nil
|
41
|
+
end
|
42
|
+
|
43
|
+
log('service url: [' + @config.service_url + ']')
|
44
|
+
|
45
|
+
# append the basic params
|
46
|
+
params = {}
|
47
|
+
add_param(params, "format", @config.format)
|
48
|
+
add_param(params, "clientTag", @config.client_tag)
|
49
|
+
|
50
|
+
url = @config.service_url+"/api_v3/index.php?service="
|
51
|
+
if (@is_multirequest)
|
52
|
+
url += "multirequest"
|
53
|
+
i = 1
|
54
|
+
@calls_queue.each_value do |call|
|
55
|
+
call_params = call.get_params_for_multirequest(i.next)
|
56
|
+
params.merge!(call_params)
|
57
|
+
end
|
58
|
+
else
|
59
|
+
call = @calls_queue[0]
|
60
|
+
url += call.service + "&action=" + call.action
|
61
|
+
params.merge!(call.params)
|
62
|
+
end
|
63
|
+
|
64
|
+
# reset
|
65
|
+
@calls_queue = []
|
66
|
+
@is_multirequest = false
|
67
|
+
|
68
|
+
signature = signature(params)
|
69
|
+
add_param(params, "kalsig", signature)
|
70
|
+
|
71
|
+
log("url: " + url)
|
72
|
+
log("params: " + params.to_yaml)
|
73
|
+
|
74
|
+
result = do_http_request(url, params)
|
75
|
+
|
76
|
+
result_object = parse_to_objects(result.body)
|
77
|
+
|
78
|
+
log("result (object yaml dump): " + result_object.to_yaml)
|
79
|
+
|
80
|
+
end_time = Time.now
|
81
|
+
log("execution time for [#{url}]: [#{end_time - start_time}]")
|
82
|
+
|
83
|
+
return result_object
|
84
|
+
end
|
85
|
+
|
86
|
+
def do_http_request(url, params)
|
87
|
+
url = URI.parse(url)
|
88
|
+
req = Net::HTTP::Post.new(url.path + '?' + url.query)
|
89
|
+
req.set_form_data(params)
|
90
|
+
res = Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
|
91
|
+
return res
|
92
|
+
end
|
93
|
+
|
94
|
+
def parse_to_objects(data)
|
95
|
+
parse_xml_to_objects(data)
|
96
|
+
end
|
97
|
+
|
98
|
+
def parse_xml_to_objects(xml)
|
99
|
+
doc = REXML::Document.new(xml)
|
100
|
+
doc.elements.each('xml/result') do | element |
|
101
|
+
return KalturaClassFactory.object_from_xml(element)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def parse_element_to_object(xml_element)
|
106
|
+
end
|
107
|
+
|
108
|
+
def parse_elements_to_array(xml_elements)
|
109
|
+
xml_elements.each('item') do | element |
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def start_multirequest()
|
114
|
+
@is_multirequest = true
|
115
|
+
end
|
116
|
+
|
117
|
+
def do_multirequest()
|
118
|
+
return do_queue()
|
119
|
+
end
|
120
|
+
|
121
|
+
def signature(params)
|
122
|
+
str = params.keys.map {|key| key.to_s }.sort.map {|key|
|
123
|
+
"#{escape(key)}#{escape(params[key])}"
|
124
|
+
}.join("")
|
125
|
+
|
126
|
+
Digest::MD5.hexdigest(str)
|
127
|
+
end
|
128
|
+
|
129
|
+
def add_param(params, name, value)
|
130
|
+
if value == nil
|
131
|
+
return
|
132
|
+
elsif value.is_a? Hash
|
133
|
+
value.each do |sub_name, sub_value|
|
134
|
+
add_param(params, "#{name}:#{sub_name}", sub_value);
|
135
|
+
end
|
136
|
+
elsif value.is_a? KalturaObjectBase
|
137
|
+
add_param(params, name, value.to_params)
|
138
|
+
else
|
139
|
+
params[name] = value
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# Escapes a query parameter. Stolen from RFuzz
|
144
|
+
def escape(s)
|
145
|
+
s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
|
146
|
+
'%' + $1.unpack('H2'*$1.size).join('%').upcase
|
147
|
+
}.tr(' ', '+')
|
148
|
+
end
|
149
|
+
|
150
|
+
def log(msg)
|
151
|
+
if @should_log
|
152
|
+
config.logger.log(msg)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
class KalturaServiceActionCall
|
158
|
+
attr_accessor :service
|
159
|
+
attr_accessor :action
|
160
|
+
attr_accessor :params
|
161
|
+
|
162
|
+
def initialize(service, action, params = array())
|
163
|
+
@service = service
|
164
|
+
@action = action
|
165
|
+
@params = parse_params(params)
|
166
|
+
end
|
167
|
+
|
168
|
+
def parse_params(params)
|
169
|
+
new_params = {}
|
170
|
+
params.each do |key, val|
|
171
|
+
if val.kind_of? Hash
|
172
|
+
new_params[key] = parse_params(val)
|
173
|
+
else
|
174
|
+
new_params[key] = val
|
175
|
+
end
|
176
|
+
end
|
177
|
+
return new_params
|
178
|
+
end
|
179
|
+
|
180
|
+
def get_params_for_multirequest(multirequest_index)
|
181
|
+
multirequest_params = {}
|
182
|
+
multirequest_params[multirequest_index+":service"] = @service
|
183
|
+
multirequest_params[multirequest_index+":action"] = @action
|
184
|
+
@params.each do |key|
|
185
|
+
multirequest_params[multirequest_index+":"+key] = @params[key]
|
186
|
+
end
|
187
|
+
return multirequest_params
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
class KalturaObjectBase
|
192
|
+
attr_accessor :object_type
|
193
|
+
|
194
|
+
def to_params
|
195
|
+
params = {};
|
196
|
+
params["objectType"] = self.class.name.split('::').last
|
197
|
+
instance_variables.each do |var|
|
198
|
+
value = instance_variable_get(var)
|
199
|
+
var = var.sub('@', '')
|
200
|
+
kvar = camelcase(var)
|
201
|
+
if (value != nil)
|
202
|
+
if (value.is_a? KalturaObjectBase)
|
203
|
+
params[kvar] = value.to_params;
|
204
|
+
else
|
205
|
+
params[kvar] = value;
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
return params;
|
210
|
+
end
|
211
|
+
|
212
|
+
def to_b(val)
|
213
|
+
return [true, 'true', 1, '1'].include?(val.is_a?(String) ? val.downcase : val)
|
214
|
+
end
|
215
|
+
|
216
|
+
def camelcase(val)
|
217
|
+
val = val.split('_').map { |e| e.capitalize }.join()
|
218
|
+
val[0,1].downcase + val[1,val.length]
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
class KalturaServiceBase
|
223
|
+
attr_accessor :client
|
224
|
+
|
225
|
+
def initialize(client)
|
226
|
+
@client = client
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
class KalturaConfiguration
|
231
|
+
attr_accessor :logger
|
232
|
+
attr_accessor :service_url
|
233
|
+
attr_accessor :format
|
234
|
+
attr_accessor :client_tag
|
235
|
+
attr_accessor :timeout
|
236
|
+
attr_accessor :partner_id
|
237
|
+
|
238
|
+
def initialize(partner_id = -1)
|
239
|
+
@service_url = "http://www.kaltura.com"
|
240
|
+
@format = 2 # xml
|
241
|
+
@client_tag = "ruby"
|
242
|
+
@timeout = 10
|
243
|
+
@partner_id = partner_id
|
244
|
+
end
|
245
|
+
|
246
|
+
def service_url=(url)
|
247
|
+
@service_url = url.chomp('/')
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
class KalturaClassFactory
|
252
|
+
def self.object_from_xml(xml_element)
|
253
|
+
instance = nil
|
254
|
+
if xml_element.elements.size > 0
|
255
|
+
if xml_element.elements[1].name == 'item' # array
|
256
|
+
instance = []
|
257
|
+
xml_element.elements.each('item') do | element |
|
258
|
+
instance.push(KalturaClassFactory.object_from_xml(element))
|
259
|
+
end
|
260
|
+
else # object
|
261
|
+
object_type_element = xml_element.get_text('objectType')
|
262
|
+
if (object_type_element != nil)
|
263
|
+
object_class = xml_element.get_text('objectType').value
|
264
|
+
instance = Object.const_get(object_class).new
|
265
|
+
xml_element.elements.each do | element |
|
266
|
+
value = KalturaClassFactory.object_from_xml(element)
|
267
|
+
instance.send(self.underscore(element.name) + "=", value);
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
else # simple type
|
272
|
+
return xml_element.text
|
273
|
+
end
|
274
|
+
|
275
|
+
return instance;
|
276
|
+
end
|
277
|
+
|
278
|
+
def self.underscore(val)
|
279
|
+
val.gsub(/(.)([A-Z])/,'\1_\2').downcase
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
data/lib/test.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "ruby_client.rb"
|
2
|
+
|
3
|
+
include Kaltura
|
4
|
+
|
5
|
+
config = KalturaConfiguration.new(450)
|
6
|
+
#config.logger = MyLog.new
|
7
|
+
#config.service_url = 'http://www.kaltura.com/'
|
8
|
+
client = KalturaClient.new(config)
|
9
|
+
secret = ''
|
10
|
+
ks = client.session_service.start(secret, '', KalturaSessionType::ADMIN)
|
11
|
+
puts ks
|
12
|
+
client.ks = ks
|
13
|
+
filter = KalturaFilter.new
|
14
|
+
pager = KalturaFilterPager.new
|
15
|
+
pager.page_size = 1
|
16
|
+
pager.page_index = 2
|
17
|
+
#result = client.mixing_service.list(filter, pager);
|
18
|
+
media_entry = KalturaMediaEntry.new
|
19
|
+
media_entry.name = "Testing Ruby Client"
|
20
|
+
media_entry.media_type = KalturaMediaType::VIDEO
|
21
|
+
url = 'http://kaldev.kaltura.com/content/zbale/roman/kaltura_logo_animated_black_1.flv';
|
22
|
+
media_entry = client.media_service.add_from_url(media_entry, url);
|
23
|
+
puts media_entry.to_yaml
|
24
|
+
|
25
|
+
#puts result.to_yaml
|
26
|
+
#puts result.objects[0].has_real_thumbnail
|
data/test/test.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "kaltura_client.rb"
|
2
|
+
|
3
|
+
include Kaltura
|
4
|
+
conf = KalturaConfiguration.new(250, 25000)
|
5
|
+
user = KalturaSessionUser.new(2)
|
6
|
+
cl = KalturaClient.new(conf)
|
7
|
+
secert = 'dae1be648b8a86d25adafdac2d32e8c3'
|
8
|
+
cl.start(user, secert)
|
9
|
+
|
10
|
+
kshow = KalturaKShow.new()
|
11
|
+
kshow.name = "test ruby"
|
12
|
+
kshow.description = "desc ruby"
|
13
|
+
|
14
|
+
result = cl.addKShow(user, kshow, 1)
|
15
|
+
|
16
|
+
print (result['result']['kshow']['name'])
|
17
|
+
|
18
|
+
print("\n")
|
19
|
+
print("\n")
|
20
|
+
|
21
|
+
result = cl.search(user, KalturaEntryMediaType::VIDEO, KalturaEntryMediaSource::MYSPACE, "funny");
|
22
|
+
|
23
|
+
print (result['result'])
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kaltura-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- papyromancer
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-05-16 00:00:00 +00:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: activesupport
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: activeresource
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: json
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
description:
|
64
|
+
email: papyromancer@papyromancer.net
|
65
|
+
executables: []
|
66
|
+
|
67
|
+
extensions: []
|
68
|
+
|
69
|
+
extra_rdoc_files:
|
70
|
+
- LICENSE
|
71
|
+
- README.rdoc
|
72
|
+
files:
|
73
|
+
- .document
|
74
|
+
- .gitignore
|
75
|
+
- LICENSE
|
76
|
+
- README.rdoc
|
77
|
+
- Rakefile
|
78
|
+
- VERSION
|
79
|
+
- VERSION.yml
|
80
|
+
- kaltura-ruby.gemspec
|
81
|
+
- lib/kaltura-ruby.rb
|
82
|
+
- lib/kaltura_client.rb
|
83
|
+
- lib/kaltura_client_base.rb
|
84
|
+
- lib/test.rb
|
85
|
+
- test/kaltura-ruby_test.rb
|
86
|
+
- test/test.rb
|
87
|
+
- test/test_helper.rb
|
88
|
+
has_rdoc: true
|
89
|
+
homepage: http://github.com/papyromancer/kaltura-ruby
|
90
|
+
licenses: []
|
91
|
+
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options:
|
94
|
+
- --charset=UTF-8
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
hash: 3
|
103
|
+
segments:
|
104
|
+
- 0
|
105
|
+
version: "0"
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
requirements: []
|
116
|
+
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 1.3.7
|
119
|
+
signing_key:
|
120
|
+
specification_version: 3
|
121
|
+
summary: Ruby gem for accessing the Kaltura API
|
122
|
+
test_files:
|
123
|
+
- test/kaltura-ruby_test.rb
|
124
|
+
- test/test.rb
|
125
|
+
- test/test_helper.rb
|