dmcloud 1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTViY2FhMmM0NzE2MGZlZjU3NGEyZTQ0NjAxNDZhNWM3ZTRhOGUyMA==
5
+ data.tar.gz: !binary |-
6
+ ZjBmY2ZiYjc1NmJiYjVhYTE4NjQ3ZjNmYjg5YmZiZjVhOTI0NDBjNQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YjgyZDlkZTUwZTAwOGNlZWEwODk4NzNlMzBhMWIxYjg3NzMzOGY1ZmUxNWVl
10
+ OTViNTA5YWM4OTVhZWQxMzBkZjY5MzYwNjAxODEzNzdkZGZjZjMxNWE2ZjRj
11
+ OTViMTkwODUzZjI3MzgyNTcyMmE4MjBiOWE5NDg2OTM3ODg1OTE=
12
+ data.tar.gz: !binary |-
13
+ MjViOWFmYjdlMDc5ZTBjMDdlZjQwNGQ5YWU2ZTEyMmQ1ODQzY2YwMTFmNzAw
14
+ NTEwYTRkOTliYTM5Y2M1ZGI1MGY5YjQ0MDVlODVlMzhiYTczMDIwZmZlMjQz
15
+ ZmJiNTQzNzkyYTY3MGRlYmU3OWZmZDRkZmUxZDk5ZWI2YzJiMWE=
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source 'https://rubygems.org'
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler"
12
+ gem "jeweler", "~> 1.8.4"
13
+ gem "rcov", ">= 0"
14
+ gem "vcr"
15
+ gem 'webmock', :git => "https://github.com/i0rek/webmock.git", :branch => "typhoeus_0.5.0"
16
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Jeremy Mortelette
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,157 @@
1
+ # DmCloud
2
+
3
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/elentras/dm_cloud)
4
+
5
+ I created this gem to simplify request and responses from DailyMotion Cloud API.
6
+ With this gem, you can :
7
+ - get generated embed code as a string
8
+ - get direct access url to your files (I used this to provide video flux to TV-connected application)
9
+ - (Lists works, others on the way) create, delete, paginated lists of videos; with video informations (a/v encodings, bitrate, video lenght...)
10
+ - (I'm working on ) CRUD on videos' meta-data
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ gem 'dm_cloud', "0.0.60" #stable version
17
+ or
18
+ gem 'dm_cloud' # edge version
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install dm_cloud
27
+
28
+ ## Usage
29
+
30
+ First, your will need to specify your :user_id, :api_key and your security level.
31
+ I used a file in `APP_ROOT/config/initializers/conf.rb`.
32
+ You can note the securitylevel, for more information about it, take a look at `lib/dm_cloud/signing.rb`.
33
+
34
+ # DAILYMOTION CLOUD SETTINGS
35
+ require 'dm_cloud'
36
+ DMC_USER_ID = 'your user id'
37
+ DMC_SECRET = 'your api key'
38
+ DMC_SECURITY_LEVEL = :none
39
+
40
+ DmCloud.configure( {
41
+ :user_key => DMC_USER_ID,
42
+ :secret_key => DMC_SECRET,
43
+ :security_level => DMC_SECURITY_LEVEL
44
+ })
45
+
46
+ Description of security levels :
47
+
48
+ * **None:**
49
+ The signed URL will be valid for everyone
50
+ * **ASNUM:**
51
+ The signed URL will only be valid for the AS of the end-user.
52
+ The ASNUM (for Autonomous System Number) stands for the network identification,
53
+ each ISP have a different ASNUM for instance.
54
+ * **IP:**
55
+ The signed URL will only be valid for the IP of the end-user.
56
+ This security level may wrongly block some users
57
+ which have their internet access load-balanced between several proxies.
58
+ This is the case in some office network or some ISPs.
59
+ * **User-Agent:**
60
+ Used in addition to one of the two former levels,
61
+ this level a limit on the exact user-agent of the end-user.
62
+ This is more secure but in some specific condition may lead to wrongly blocked users.
63
+ * **Use Once:**
64
+ The signed URL will only be usable once.
65
+ Note: should not be used with stream URLs.
66
+ * **Country:**
67
+ The URL can only be queried from specified countrie(s).
68
+ The rule can be reversed to allow all countries except some.
69
+ * **Referer:**
70
+ The URL can only be queried
71
+ if the Referer HTTP header contains a specified value.
72
+ If the URL contains a Referer header with a different value,
73
+ the request is refused. If the Referer header is missing,
74
+ the request is accepted in order to prevent from false positives as some browsers,
75
+ anti-virus or enterprise proxies may remove this header.
76
+ * **Delegate:**
77
+ This option instructs the signing algorithm
78
+ that security level information won’t be embeded into the signature
79
+ but gathered and lock at the first use.
80
+
81
+
82
+ Second part, get you embed url :
83
+ It will return a string containing the iframe with the DailyMotion Cloud player.
84
+
85
+ DmCloud::Streaming.embed('your video id looks like a secret key')
86
+
87
+ Or how to get your direct url :
88
+ It will return a string containing the direct link to your file.
89
+
90
+ DmCloud::Streaming.url('your video id', ['asset_name'], {options})
91
+
92
+ The next parts will come soon, just need some time to finish it
93
+ and create corresponding tests.
94
+
95
+ ---
96
+ ### Video explorer :
97
+
98
+ If you need to list your video you can use this method :
99
+
100
+ DmCloud::Media.list({:page => 1, :per_page => 10})
101
+ It will return videos information and more :
102
+
103
+ result to yaml :
104
+
105
+ '{"result": {
106
+ "list": [{
107
+ "embed_url": "http://api.DmCloud.net/player/embed/:your_id/:media_id",
108
+ "assets": {
109
+ "source": {
110
+ "status": "ready",
111
+ "video_fps": 25.0,
112
+ "file_extension": "mp4",
113
+ "video_fps_mode": "CFR",
114
+ "container": "MPEG-4",
115
+ "audio_samplerate": 44100,
116
+ "video_interlaced": false,
117
+ "video_rotation": 0.0,
118
+ "video_bitrate": 1000618,
119
+ "created": 1347641702,
120
+ "audio_nbr_channel": 2,
121
+ "download_url": "http://cdn.DmCloud.net/route/http/:your_id/:media_id/source-1347634502.mp4?filename=my_video_name-source-1347634502.mp4&auth=1351277028-3-672hcu1m-3fcab065b9bf103e70d3883aa8c657be",
122
+ "video_aspect": 1.7777777777777777,
123
+ "video_height": 576,
124
+ "audio_bitrate": 128017,
125
+ "audio_codec": "AAC LC",
126
+ "file_size": 119133958,
127
+ "duration": 839,
128
+ "video_codec": "AVC",
129
+ "video_width": 1024,
130
+ "global_bitrate": 1134696}},
131
+ "created": 1347641696,
132
+ "meta": { "title": "my video 1 title"},
133
+ "frame_ratio": 1.7740740740740739,
134
+ "id": "5053616094739936ec0006af" }],
135
+ "pages": 1,
136
+ "on_this_page": 3,
137
+ "per_page": 10,
138
+ "total": 3,
139
+ "page": 1}}'
140
+
141
+ As you can see, this give many information, you can submit a hash like this :
142
+
143
+ DmCloud::Media.list({:page => 1, :per_page => 10, :fields => {:meta => :title }, :assets => [:download_url, :created ]})
144
+
145
+
146
+
147
+ ## Contributing
148
+
149
+ Your welcome to share and enhance this gem.
150
+ This is my first one (and not the last one) but I know some mistakes might be done by myself.
151
+ I do my best and I'm open to all ideas or comments about my work.
152
+
153
+ 1. Fork it
154
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
155
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
156
+ 4. Push to the branch (`git push origin my-new-feature`)
157
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ gem.name = "dm_cloud"
17
+ # gem.version = DmCloud::VERSION
18
+ gem.authors = ["Jeremy Mortelette"]
19
+ gem.email = ["mortelette.jeremy@gmail.com"]
20
+ gem.description = 'This gem will simplify usage of DailyMotion Cloud API, it represent api in ruby style, with automated handler for search and upload files'
21
+ gem.summary = 'Simplify DailyMotion Cloud API usage'
22
+ gem.homepage = ""
23
+
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
26
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
27
+ gem.require_paths = ["lib"]
28
+ end
29
+
30
+ Jeweler::RubygemsDotOrgTasks.new
31
+
32
+ require 'rspec/core'
33
+ require 'rspec/core/rake_task'
34
+ RSpec::Core::RakeTask.new(:spec) do |spec|
35
+ spec.pattern = FileList['spec/**/*_spec.rb']
36
+ end
37
+
38
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
39
+ spec.pattern = 'spec/**/*_spec.rb'
40
+ spec.rcov = true
41
+ end
42
+
43
+ task :default => :spec
44
+ #
45
+ # Rake::RDocTask.new do |rdoc|
46
+ # version = File.exist?('VERSION') ? File.read('VERSION') : ""
47
+ #
48
+ # rdoc.rdoc_dir = 'rdoc'
49
+ # rdoc.title = "twits #{version}"
50
+ # rdoc.rdoc_files.include('README*')
51
+ # rdoc.rdoc_files.include('lib/**/*.rb')
52
+ # end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.0
data/dmcloud.gemspec ADDED
@@ -0,0 +1,78 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "dmcloud"
8
+ s.version = "1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Ritik Malhotra", "Tanooj Luthra"]
12
+ s.date = "2013-06-15"
13
+ s.description = "This gem will simplify usage of DailyMotion Cloud API. Originally authored by Jeremy Mortelette, modified by us to fix the bugs."
14
+ s.email = ["ritikmalhotra@gmail.com"]
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "Gemfile",
22
+ "LICENSE.txt",
23
+ "README.md",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "dmcloud.gemspec",
27
+ "lib/dm_cloud.rb",
28
+ "lib/dm_cloud/builder/media.rb",
29
+ "lib/dm_cloud/media.rb",
30
+ "lib/dm_cloud/request.rb",
31
+ "lib/dm_cloud/signing.rb",
32
+ "lib/dm_cloud/streaming.rb",
33
+ "lib/dm_cloud/version.rb",
34
+ "spec/dm_cloud/media_spec.rb",
35
+ "spec/dm_cloud/signing_spec.rb",
36
+ "spec/dm_cloud/streaming_spec.rb",
37
+ "spec/dm_cloud_spec.rb",
38
+ "spec/spec_helper.rb",
39
+ "spec/vcr_cassettes/dm_cloud/dm_cloud_streaming.yml",
40
+ "spec/vcr_cassettes/dm_cloud_media.yml"
41
+ ]
42
+ s.homepage = ""
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = "1.8.24"
45
+ s.summary = "Simplify DailyMotion Cloud API usage"
46
+ s.test_files = ["spec/dm_cloud/media_spec.rb", "spec/dm_cloud/signing_spec.rb", "spec/dm_cloud/streaming_spec.rb", "spec/dm_cloud_spec.rb", "spec/spec_helper.rb", "spec/vcr_cassettes/dm_cloud/dm_cloud_streaming.yml", "spec/vcr_cassettes/dm_cloud_media.yml"]
47
+
48
+ if s.respond_to? :specification_version then
49
+ s.specification_version = 3
50
+
51
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
53
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
54
+ s.add_development_dependency(%q<bundler>, [">= 0"])
55
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
56
+ s.add_development_dependency(%q<rcov>, [">= 0"])
57
+ s.add_development_dependency(%q<vcr>, [">= 0"])
58
+ s.add_development_dependency(%q<webmock>, [">= 0"])
59
+ else
60
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
61
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
62
+ s.add_dependency(%q<bundler>, [">= 0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
64
+ s.add_dependency(%q<rcov>, [">= 0"])
65
+ s.add_dependency(%q<vcr>, [">= 0"])
66
+ s.add_dependency(%q<webmock>, [">= 0"])
67
+ end
68
+ else
69
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
70
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
71
+ s.add_dependency(%q<bundler>, [">= 0"])
72
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
73
+ s.add_dependency(%q<rcov>, [">= 0"])
74
+ s.add_dependency(%q<vcr>, [">= 0"])
75
+ s.add_dependency(%q<webmock>, [">= 0"])
76
+ end
77
+ end
78
+
@@ -0,0 +1,117 @@
1
+ module DmCloud
2
+ module Builder
3
+ module Media
4
+ def self.create(url = '', assets_names = [], meta = {})
5
+ request = Hash.new
6
+
7
+ request['url'] = url
8
+
9
+ if not meta.empty?
10
+ request['meta'] = {}
11
+ request['meta']['author'] = meta[:author] if meta[:author]
12
+ request['meta']['author'] = meta[:title] if meta[:title]
13
+ end
14
+
15
+ request['assets_names'] = assets_names if not assets_names.empty?
16
+
17
+ request.rehash
18
+ end
19
+
20
+ def self.info(media_id, assets_names = ['source'], fields = {})
21
+ raise StandardError, "missing :media_id in params" unless media_id
22
+ request = Hash.new
23
+
24
+ # the media id
25
+ request[:fields] = []
26
+
27
+ # requested media meta datas
28
+ fields[:meta] = ['title'] unless fields[:meta]
29
+ fields[:meta].each { |value| request[:fields] << "meta.#{value.to_s}" }
30
+ request[:fields] += ['id', 'created', 'embed_url', 'frame_ratio']
31
+
32
+ # the worldwide statistics on the number of views
33
+ # request['fields'] << 'stats.global.last_week' if fields[:stats][:global]
34
+
35
+ # TODO: handle statistics request per country
36
+ # fields[:stats].each { |key| request << "meta.#{key.to_s}" } if fields[:meta].present?
37
+ # request['stats'][COUNTRY_CODE][TIME_INTERVAL] : the statistics on the number of views in a specific country (eg: stats.fr.total, stats.us.last_week, etc...)
38
+ # request['extended_stats'][COUNTRY_CODE][TIME_INTERVAL]
39
+
40
+ assets_names = ['source'] if assets_names.nil?
41
+ if not fields[:assets]
42
+ request = all_assets_fields(request, assets_names)
43
+ else
44
+ assets_names.each do |name|
45
+ fields[:assets].each { |value| request[:fields] << "assets.#{name}.#{value.to_s}" }
46
+ end
47
+ end
48
+ request
49
+ end
50
+
51
+ def self.list(page = 1, per_page = 10, fields = {})
52
+ # raise StandardError, "missing :media_id in params" unless media_id
53
+ request = Hash.new
54
+
55
+ request[:page] = page
56
+ request[:per_page] = per_page
57
+ request[:fields] = []
58
+ # requested media meta datas
59
+ fields[:meta] = ['title'] unless fields[:meta]
60
+ fields[:meta].each { |value| request[:fields] << "meta.#{value.to_s}" }
61
+ request[:fields] += ['id', 'created', 'embed_url', 'frame_ratio']
62
+
63
+ # TODO: handle global statistics request in another module
64
+ # the worldwide statistics on the number of views
65
+ # request << 'stats.global.last_week' if fields[:stats][:global]
66
+
67
+ # TODO: handle statistics request per country
68
+ # fields[:stats].each { |key| request << "meta.#{key.to_s}" } if fields[:meta].present?
69
+ # request['stats'][COUNTRY_CODE][TIME_INTERVAL] : the statistics on the number of views in a specific country (eg: stats.fr.total, stats.us.last_week, etc...)
70
+ # request['extended_stats'][COUNTRY_CODE][TIME_INTERVAL]
71
+
72
+ assets_names = ['source'] if assets_names.nil?
73
+ if not fields[:assets]
74
+ request = all_assets_fields(request, assets_names)
75
+ else
76
+ assets_names.each do |name|
77
+ fields[:assets].each { |value| request[:fields] << "assets.#{name}.#{value.to_s}" }
78
+ end
79
+ end
80
+
81
+ request
82
+ end
83
+
84
+
85
+ protected
86
+ # This method exclude stats, but return all information for a media (video or images)
87
+ # NOTE: This is outside the methods because : too long and recurent.
88
+ # It's also used as default if no fields params is submitted.
89
+ def self.all_assets_fields(request, assets_names)
90
+ assets_names.each do |name|
91
+ request[:fields] << "assets.#{name}.download_url"
92
+ request[:fields] << "assets.#{name}.status"
93
+ request[:fields] << "assets.#{name}.container"
94
+ request[:fields] << "assets.#{name}.duration"
95
+ request[:fields] << "assets.#{name}.global_bitrate"
96
+ request[:fields] << "assets.#{name}.video_codec"
97
+ request[:fields] << "assets.#{name}.video_width"
98
+ request[:fields] << "assets.#{name}.video_height"
99
+ request[:fields] << "assets.#{name}.video_bitrate"
100
+ request[:fields] << "assets.#{name}.video_rotation"
101
+ request[:fields] << "assets.#{name}.video_fps"
102
+ request[:fields] << "assets.#{name}.video_fps_mode"
103
+ request[:fields] << "assets.#{name}.video_aspect"
104
+ request[:fields] << "assets.#{name}.video_interlaced"
105
+ request[:fields] << "assets.#{name}.audio_codec"
106
+ request[:fields] << "assets.#{name}.audio_bitrate"
107
+ request[:fields] << "assets.#{name}.audio_nbr_channel"
108
+ request[:fields] << "assets.#{name}.audio_samplerate"
109
+ request[:fields] << "assets.#{name}.created"
110
+ request[:fields] << "assets.#{name}.file_extension"
111
+ request[:fields] << "assets.#{name}.file_size"
112
+ end
113
+ request
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,85 @@
1
+ require 'dm_cloud/builder/media'
2
+
3
+ module DmCloud
4
+ class Media
5
+ # Creates a new media object.
6
+ # This method can either create an empty media object
7
+ # or also download a media with the url paramater
8
+ # and use it as the source to encode the ASSET_NAME listed in assets_names
9
+ # Params :
10
+ # args:
11
+ # url: SCHEME://USER:PASSWORD@HOSTNAME/MY/PATH/FILENAME.EXTENSION (could be ftp or http)
12
+ # author: an author name
13
+ # title: a title for the film
14
+ # assets_names: (Array) – (optional) the list of ASSET_NAME you want to transcode,
15
+ # when you set this parameter you must also set the url parameter
16
+ # Return :
17
+ # media_id: return the media id of the object
18
+ def self.create(options)
19
+ call_type = "media.create"
20
+
21
+ params = {
22
+ :call => call_type,
23
+ args: Builder::Media.create(options)
24
+ }
25
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
26
+ end
27
+
28
+ # Delete a media object with all its associated assets.
29
+ #
30
+ # Parameters:
31
+ # id (media ID) – (required) the id of the media object you want to delete.
32
+ # Return :
33
+ # Nothing
34
+ def self.delete(media_id)
35
+ raise StandardError, "missing :media_id in params" unless media_id
36
+ call_type = "media.delete"
37
+
38
+ params = {
39
+ :call => call_type,
40
+ args: { id: media_id}
41
+ }
42
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
43
+ end
44
+
45
+ # Gives information about a given media object.
46
+ #
47
+ # Params :
48
+ # media_id: (media ID) – (required) the id of the new media object.
49
+ # fields (Array) – (required) the list of fields to retrieve.
50
+ # Returns:
51
+ # a multi-level structure containing about the media related to the requested fields.
52
+ def self.info(media_id, assets_names = ['source'], fields = {})
53
+ raise StandardError, "missing :media_id in params" unless media_id
54
+ call_type = "media.info"
55
+
56
+ params = {
57
+ :call => call_type,
58
+ args: DmCloud::Builder::Media.info(media_id, assets_names, fields)
59
+ }
60
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
61
+ end
62
+
63
+ # Returns a paginated list of media info structures.
64
+ # You must specify the fields you want to retrieve.
65
+ # The fields are described in the documentation of the method info.
66
+ #
67
+ # Parameters:
68
+ # options:
69
+ # fields (Array) – (optional default return all informations) the fields to retrieve
70
+ # page (Integer) – (optional) the page number, default: 1
71
+ # per_page (Integer) – (optional) the number of objet per page, default: 10
72
+ # Returns:
73
+ # an object with information for the pagination and the result of the query.
74
+ def self.list(page = 1, per_page = 10, fields = {})
75
+ call_type = "media.list"
76
+
77
+ params = {
78
+ :call => call_type,
79
+ args: DmCloud::Builder::Media.list( page, per_page, fields)
80
+ }
81
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,43 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ module DmCloud
5
+ class Request
6
+
7
+ DAILYMOTION_API = 'http://api.DmCloud.net/api'
8
+ DAILYMOTION_STATIC = 'http://api.DmCloud.net/api'
9
+
10
+ # This method control signing for Media calls and handle request and response.
11
+ def self.execute(call, params = {})
12
+ url = define(call)
13
+ params['auth'] = DmCloud::Signing.identify(params)
14
+
15
+ result = send_request(params)
16
+ parse_response(result)
17
+ end
18
+
19
+
20
+ def self.send_request(params)
21
+ @uri = URI.parse(DAILYMOTION_API)
22
+
23
+ http = Net::HTTP.new(@uri.host, @uri.port)
24
+ request = Net::HTTP::Post.new(@uri.request_uri)
25
+ request.content_type = 'application/json'
26
+ request.body = params.to_json
27
+
28
+ # puts 'request (YAML format ): ' + request.to_yaml + "\n" + '-' * 80
29
+
30
+ http.request(request).body
31
+ end
32
+
33
+
34
+
35
+ def self.parse_response(result)
36
+ JSON.parse(result)
37
+ end
38
+
39
+ def self.define(action)
40
+ DAILYMOTION_API
41
+ end
42
+ end
43
+ end