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.
@@ -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
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class KalturaRubyTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
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'])
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'kaltura-ruby'
8
+
9
+ class Test::Unit::TestCase
10
+ end
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