brightcove-api 1.0.11 → 1.0.12
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/.gitignore +11 -0
- data/.rspec +2 -0
- data/.rvmrc +3 -2
- data/{CHANELOG.markdown → CHANGELOG.markdown} +4 -0
- data/Gemfile +1 -16
- data/LICENSE +1 -1
- data/README.md +52 -36
- data/Rakefile +9 -47
- data/brightcove-api.gemspec +26 -73
- data/lib/brightcove-api.rb +75 -30
- data/lib/brightcove-api/version.rb +5 -0
- data/{test/fakeweb → spec/assets}/movie.mov +0 -0
- data/spec/brightcove-api_spec.rb +137 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/vcr_cassettes/brightcove_media_api_example_query.json +1 -0
- data/spec/vcr_cassettes/delete_video.yml +32 -0
- data/spec/vcr_cassettes/find_all_videos.json +1 -0
- data/spec/vcr_cassettes/find_all_videos_mrss.json +1 -0
- data/spec/vcr_cassettes/post_file.yml +47 -0
- data/spec/vcr_cassettes/post_file_streaming.yml +36 -0
- metadata +186 -107
- data/VERSION +0 -1
- data/test/fakeweb/create_video_response.json +0 -1
- data/test/fakeweb/delete_video_response.json +0 -1
- data/test/fakeweb/find_all_videos_response.json +0 -108
- data/test/fakeweb/find_all_videos_response.xml +0 -1188
- data/test/helper.rb +0 -9
- data/test/test_brightcove-api.rb +0 -173
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rvmrc
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
rvm --create 1.8.7@brightcove-api_gem
|
2
|
-
rvm --create 1.9.2@brightcove-api_gem
|
1
|
+
rvm use --create 1.8.7@brightcove-api_gem
|
2
|
+
rvm use --create 1.9.2@brightcove-api_gem
|
3
|
+
rvm use --create 1.9.3@brightcove-api_gem
|
data/Gemfile
CHANGED
@@ -1,18 +1,3 @@
|
|
1
1
|
source :rubygems
|
2
2
|
|
3
|
-
|
4
|
-
gem 'bundler', '~> 1.0.0'
|
5
|
-
gem 'jeweler', '~> 1.5.1'
|
6
|
-
gem 'rcov', '~> 0.9.9'
|
7
|
-
end
|
8
|
-
|
9
|
-
group :test do
|
10
|
-
gem 'fakeweb'
|
11
|
-
gem 'mocha'
|
12
|
-
end
|
13
|
-
|
14
|
-
gem 'httparty'
|
15
|
-
gem 'json'
|
16
|
-
gem 'rest-client'
|
17
|
-
gem 'multipart-post'
|
18
|
-
gem 'orderedhash'
|
3
|
+
gemspec
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
brightcove-api
|
2
|
-
==============
|
1
|
+
# brightcove-api
|
3
2
|
|
4
3
|
Ruby gem for interacting with the Brightcove media API. http://docs.brightcove.com/en/media/
|
5
4
|
|
6
|
-
Requirements
|
7
|
-
============
|
5
|
+
## Requirements
|
8
6
|
|
9
7
|
* HTTParty
|
10
8
|
|
@@ -13,41 +11,54 @@ Requirements
|
|
13
11
|
* multipart-post (for the `post_file_streaming(...) method`)
|
14
12
|
* orderedhash (only if you're using Ruby 1.8.7)
|
15
13
|
|
16
|
-
Install
|
17
|
-
=======
|
14
|
+
## Install
|
18
15
|
|
19
|
-
|
16
|
+
```
|
17
|
+
gem install brightcove-api
|
18
|
+
```
|
20
19
|
|
21
|
-
Examples
|
22
|
-
========
|
20
|
+
## Examples
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
22
|
+
```ruby
|
23
|
+
require 'brightcove-api'
|
24
|
+
=> true
|
25
|
+
|
26
|
+
brightcove = Brightcove::API.new('0Z2dtxTdJAxtbZ-d0U7Bhio2V1Rhr5Iafl5FFtDPY8E.')
|
27
|
+
=> #<Brightcove::API:0x114dbc8 @token="0Z2dtxTdJAxtbZ-d0U7Bhio2V1Rhr5Iafl5FFtDPY8E.", @api_url="http://api.brightcove.com/services/library">
|
28
|
+
|
29
|
+
response = brightcove.get('find_all_videos', {:page_size => 3, :video_fields => 'id,name,linkURL,linkText'})
|
30
|
+
=> {"items"=>[{"name"=>"Documentarian Skydiving", "id"=>496518762, "linkText"=>nil, "linkURL"=>nil}, {"name"=>"Surface Tricks", "id"=>496518763, "linkText"=>nil, "linkURL"=>nil}, {"name"=>"Free Skiing", "id"=>496518765, "linkText"=>nil, "linkURL"=>nil}], "page_number"=>0, "page_size"=>3, "total_count"=>-1}
|
31
|
+
|
32
|
+
response = brightcove.get('find_all_videos', {:page_size => 5, :sort_by => 'PLAYS_TOTAL'})
|
33
|
+
=> {"items"=>[{"longDescription"=>nil, "name"=>"Wild Slopes '06", "lastModifiedDate"=>"1171324523307", "thumbnailURL"=>"http://brightcove.vo.llnwd.net/d2/unsecured/media/270881183/270881183_502534829_94499905676eb7cd04a558da2adcf6a34f437b88.jpg?pubId=270881183", "tags"=>["adventure", "snowboarding"], "playsTrailingWeek"=>35, "shortDescription"=>"A ski and snowboard movie that challenges the hype and dares you to see what freeskiing and snowboarding have become. Documenting the very best of this year's riding and culture.", "playsTotal"=>4458, "adKeys"=>nil, "id"=>496518766, "length"=>51251, "videoStillURL"=>"http://brightcove.vo.llnwd.net/d2/unsecured/media/270881183/270881183_502534838_f80fe64f052328cd3b2e158d7234003a23091845.jpg?pubId=270881183", "publishedDate"=>"1171324434811", "creationDate"=>"1171267200000", "linkText"=>nil, "economics"=>"FREE", "referenceId"=>"title010", "linkURL"=>nil}, {"longDescription"=>nil, "name"=>"Jellyfish", "lastModifiedDate"=>"1245181300374", "thumbnailURL"=>"http://brightcove.vo.llnwd.net/d7/unsecured/media/270881183/270881183_26530711001_jellyFish.jpg?pubId=270881183", "tags"=>["sea", "custom skins"], "playsTrailingWeek"=>46, "shortDescription"=>"Jellyfish", "playsTotal"=>4081, "adKeys"=>nil, "id"=>26512561001, "length"=>28400, "videoStillURL"=>"http://brightcove.vo.llnwd.net/d7/unsecured/media/270881183/270881183_26519430001_vs-270881183-vid26513829001-img0000.jpg?pubId=270881183", "publishedDate"=>"1245172164326", "creationDate"=>"1245172164326", "linkText"=>nil, "economics"=>"AD_SUPPORTED", "referenceId"=>nil, "linkURL"=>nil}, {"longDescription"=>"Long Description", "name"=>"Demo Title 2", "lastModifiedDate"=>"1263581295791", "thumbnailURL"=>"http://brightcove.vo.llnwd.net/d2/unsecured/media/270881183/270881183_275925069_d1f97c7f07f2a3f4de7b38eda3761f16f39d2a99.jpg?pubId=270881183", "tags"=>[], "playsTrailingWeek"=>1, "shortDescription"=>"Short Description", "playsTotal"=>3876, "adKeys"=>nil, "id"=>276024035, "length"=>418742, "videoStillURL"=>"http://brightcove.vo.llnwd.net/d2/unsecured/media/270881183/270881183_275943599_b7e2ca63c0311fa3f0b027304b41d252f12d2d66.jpg?pubId=270881183", "publishedDate"=>"1161296014264", "creationDate"=>"1161241200000", "linkText"=>"Related Link", "economics"=>"FREE", "referenceId"=>nil, "linkURL"=>"http://www.brightcove.com"}, {"longDescription"=>nil, "name"=>"Dolphins", "lastModifiedDate"=>"1263581295790", "thumbnailURL"=>"http://brightcove.vo.llnwd.net/d7/unsecured/media/270881183/270881183_26531197001_dolphins.jpg?pubId=270881183", "tags"=>["sea", "custom skins"], "playsTrailingWeek"=>30, "shortDescription"=>"Dolphins", "playsTotal"=>3870, "adKeys"=>nil, "id"=>26511963001, "length"=>12800, "videoStillURL"=>"http://brightcove.vo.llnwd.net/d7/unsecured/media/270881183/270881183_26519372001_vs-270881183-vid26510372001-img0000.jpg?pubId=270881183", "publishedDate"=>"1245171732987", "creationDate"=>"1245171732987", "linkText"=>nil, "economics"=>"AD_SUPPORTED", "referenceId"=>nil, "linkURL"=>nil}, {"longDescription"=>nil, "name"=>"Welcome to Brightcove 3", "lastModifiedDate"=>"1225134261511", "thumbnailURL"=>"http://brightcove.vo.llnwd.net/d6/unsecured/media/270881183/270881183_1858983740_brightcove3-thumb.jpg?pubId=270881183", "tags"=>[], "playsTrailingWeek"=>0, "shortDescription"=>"Tareef Kawaf, Brightcove's SVP of Engineering, welcomes you to Brightcove 3.", "playsTotal"=>3349, "adKeys"=>nil, "id"=>1858922805, "length"=>53820, "videoStillURL"=>"http://brightcove.vo.llnwd.net/d6/unsecured/media/270881183/270881183_1858994782_vid-StudioDashboards.jpg?pubId=270881183", "publishedDate"=>"1225134261508", "creationDate"=>"1224096089173", "linkText"=>nil, "economics"=>"AD_SUPPORTED", "referenceId"=>nil, "linkURL"=>nil}], "page_number"=>0, "page_size"=>5, "total_count"=>-1}
|
34
|
+
|
35
|
+
response = brightcove.post('delete_video', {:video_id => '595153263001'})
|
36
|
+
=> {"result"=>{}, "id"=>nil, "error"=>nil}
|
37
|
+
```
|
34
38
|
|
35
39
|
If you want to perform a file upload, for example, to create a video, you can use the __post_file()__ method.
|
36
40
|
|
37
|
-
|
38
|
-
|
41
|
+
```ruby
|
42
|
+
response = brightcove.post_file('create_video', '/path/to/video.mov', :video => {:shortDescription => 'Short Description', :name => 'Video name'})
|
43
|
+
=> {"result"=>653155417001, "error=>nil, "id"=>nil}
|
44
|
+
```
|
39
45
|
|
40
46
|
If you want to perform a file upload using HTTP streaming, for example, to create a video, you can use the __post_file_streaming()__ method.
|
41
47
|
|
42
|
-
|
43
|
-
|
48
|
+
```ruby
|
49
|
+
response = brightcove.post_file_streaming('create_video', '/path/to/video.mov', 'video/quicktime', :video => {:shortDescription => 'Short Description', :name => 'Video name'})
|
50
|
+
=> {"result"=>653155417001, "error=>nil, "id"=>nil}
|
51
|
+
```
|
52
|
+
|
53
|
+
You can also use the `post_io_streaming(api_method, file, content_type, parameters)` method which takes an I/O handle instead of a filename.
|
44
54
|
|
45
55
|
You can now pass `{:output => 'mrss'}` in the __get(...)__ method to return output in Media RSS format. Example:
|
46
56
|
|
47
|
-
|
57
|
+
```ruby
|
58
|
+
response = brightcove.get('find_all_videos', {:output => 'mrss'})
|
59
|
+
```
|
48
60
|
|
49
|
-
Searching
|
50
|
-
=========
|
61
|
+
## Searching
|
51
62
|
|
52
63
|
To replicate one of the brightcove search API examples:
|
53
64
|
|
@@ -55,14 +66,19 @@ To replicate one of the brightcove search API examples:
|
|
55
66
|
> description, and which also have the tag "free", and also have either the tag "color" or the
|
56
67
|
> tag "technicolor"
|
57
68
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
69
|
+
```ruby
|
70
|
+
brightcove = Brightcove::API.new(...)
|
71
|
+
response = brightcove.get('search_videos', {
|
72
|
+
:any => [ "tag:color", "tag:technicolor" ],
|
73
|
+
:all => ["football", "chicago", "tag:free"]
|
74
|
+
})
|
75
|
+
```
|
76
|
+
|
77
|
+
## Compatibility
|
63
78
|
|
64
|
-
|
65
|
-
|
79
|
+
The brightcove-api gem is built and tested under Ruby 1.8.7, 1.9.2 and 1.9.3.
|
80
|
+
|
81
|
+
## Note on Patches/Pull Requests
|
66
82
|
|
67
83
|
* Fork the project.
|
68
84
|
* Make your feature addition or bug fix.
|
@@ -72,6 +88,6 @@ Note on Patches/Pull Requests
|
|
72
88
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
73
89
|
* Send me a pull request. Bonus points for topic branches.
|
74
90
|
|
75
|
-
Copyright
|
76
|
-
|
77
|
-
Copyright (c) 2010-
|
91
|
+
## Copyright
|
92
|
+
|
93
|
+
Copyright (c) 2010-2012 David Czarnecki. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,53 +1,15 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'rake'
|
11
|
-
|
12
|
-
require 'jeweler'
|
13
|
-
Jeweler::Tasks.new do |gem|
|
14
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
-
gem.name = "brightcove-api"
|
16
|
-
gem.homepage = "http://github.com/BrightcoveOS/Ruby-MAPI-Wrapper"
|
17
|
-
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{Ruby gem for interacting with the Brightcove media API}
|
19
|
-
gem.description = %Q{Ruby gem for interacting with the Brightcove media API. http://docs.brightcove.com/en/media/}
|
20
|
-
gem.email = "dczarnecki@agoragames.com"
|
21
|
-
gem.authors = ["David Czarnecki"]
|
22
|
-
end
|
23
|
-
Jeweler::RubygemsDotOrgTasks.new
|
24
|
-
|
25
|
-
require 'rake/testtask'
|
26
|
-
Rake::TestTask.new(:test) do |test|
|
27
|
-
test.libs << 'lib' << 'test'
|
28
|
-
test.pattern = 'test/**/test_*.rb'
|
29
|
-
test.verbose = true
|
30
|
-
end
|
31
|
-
|
32
|
-
require 'rcov/rcovtask'
|
33
|
-
Rcov::RcovTask.new do |test|
|
34
|
-
test.libs << 'test'
|
35
|
-
test.pattern = 'test/**/test_*.rb'
|
36
|
-
test.verbose = true
|
37
|
-
end
|
38
|
-
|
39
|
-
require 'rake/rdoctask'
|
40
|
-
Rake::RDocTask.new do |rdoc|
|
41
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core'
|
3
|
+
require 'rspec/core/rake_task'
|
42
4
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
5
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
6
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
7
|
+
spec.rspec_opts = ['--backtrace']
|
8
|
+
# spec.ruby_opts = ['-w']
|
47
9
|
end
|
48
10
|
|
49
|
-
task :default => :
|
11
|
+
task :default => :spec
|
50
12
|
|
51
13
|
task :test_rubies do
|
52
|
-
system "rvm 1.8.7@brightcove-api_gem,1.9.2@brightcove-api_gem rake
|
14
|
+
system "rvm 1.8.7@brightcove-api_gem,1.9.2@brightcove-api_gem,1.9.3@brightcove-api_gem do rake spec"
|
53
15
|
end
|
data/brightcove-api.gemspec
CHANGED
@@ -1,80 +1,33 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
5
3
|
|
6
|
-
|
7
|
-
s.name = %q{brightcove-api}
|
8
|
-
s.version = "1.0.11"
|
4
|
+
require 'brightcove-api/version'
|
9
5
|
|
10
|
-
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "brightcove-api"
|
8
|
+
s.version = Brightcove::API::VERSION.dup
|
9
|
+
s.authors = ["David Czarnecki"]
|
10
|
+
s.email = ["dczarnecki@agoragames.com"]
|
11
|
+
s.homepage = "http://github.com/BrightcoveOS/Ruby-MAPI-Wrapper"
|
12
|
+
s.summary = %q{Ruby gem for interacting with the Brightcove media API}
|
13
13
|
s.description = %q{Ruby gem for interacting with the Brightcove media API. http://docs.brightcove.com/en/media/}
|
14
|
-
s.email = %q{dczarnecki@agoragames.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.md"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".rvmrc",
|
21
|
-
"CHANELOG.markdown",
|
22
|
-
"Gemfile",
|
23
|
-
"LICENSE",
|
24
|
-
"README.md",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"brightcove-api.gemspec",
|
28
|
-
"lib/brightcove-api.rb",
|
29
|
-
"test/fakeweb/create_video_response.json",
|
30
|
-
"test/fakeweb/delete_video_response.json",
|
31
|
-
"test/fakeweb/find_all_videos_response.json",
|
32
|
-
"test/fakeweb/find_all_videos_response.xml",
|
33
|
-
"test/fakeweb/movie.mov",
|
34
|
-
"test/helper.rb",
|
35
|
-
"test/test_brightcove-api.rb"
|
36
|
-
]
|
37
|
-
s.homepage = %q{http://github.com/BrightcoveOS/Ruby-MAPI-Wrapper}
|
38
|
-
s.licenses = [%q{MIT}]
|
39
|
-
s.require_paths = [%q{lib}]
|
40
|
-
s.rubygems_version = %q{1.8.8}
|
41
|
-
s.summary = %q{Ruby gem for interacting with the Brightcove media API}
|
42
|
-
s.test_files = [
|
43
|
-
"test/helper.rb",
|
44
|
-
"test/test_brightcove-api.rb"
|
45
|
-
]
|
46
14
|
|
47
|
-
|
48
|
-
s.specification_version = 3
|
15
|
+
s.rubyforge_project = "brightcove-api"
|
49
16
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
s.add_runtime_dependency(%q<multipart-post>, [">= 0"])
|
55
|
-
s.add_runtime_dependency(%q<orderedhash>, [">= 0"])
|
56
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
57
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
58
|
-
s.add_development_dependency(%q<rcov>, ["~> 0.9.9"])
|
59
|
-
else
|
60
|
-
s.add_dependency(%q<httparty>, [">= 0"])
|
61
|
-
s.add_dependency(%q<json>, [">= 0"])
|
62
|
-
s.add_dependency(%q<rest-client>, [">= 0"])
|
63
|
-
s.add_dependency(%q<multipart-post>, [">= 0"])
|
64
|
-
s.add_dependency(%q<orderedhash>, [">= 0"])
|
65
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
66
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
67
|
-
s.add_dependency(%q<rcov>, ["~> 0.9.9"])
|
68
|
-
end
|
69
|
-
else
|
70
|
-
s.add_dependency(%q<httparty>, [">= 0"])
|
71
|
-
s.add_dependency(%q<json>, [">= 0"])
|
72
|
-
s.add_dependency(%q<rest-client>, [">= 0"])
|
73
|
-
s.add_dependency(%q<multipart-post>, [">= 0"])
|
74
|
-
s.add_dependency(%q<orderedhash>, [">= 0"])
|
75
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
76
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
77
|
-
s.add_dependency(%q<rcov>, ["~> 0.9.9"])
|
78
|
-
end
|
79
|
-
end
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
80
21
|
|
22
|
+
s.add_dependency('httparty')
|
23
|
+
s.add_dependency('json')
|
24
|
+
s.add_dependency('rest-client')
|
25
|
+
s.add_dependency('multipart-post')
|
26
|
+
s.add_dependency('orderedhash')
|
27
|
+
|
28
|
+
s.add_development_dependency('fakeweb')
|
29
|
+
s.add_development_dependency('mocha')
|
30
|
+
s.add_development_dependency('rake')
|
31
|
+
s.add_development_dependency('rspec')
|
32
|
+
s.add_development_dependency('vcr')
|
33
|
+
end
|
data/lib/brightcove-api.rb
CHANGED
@@ -3,14 +3,13 @@ require 'json'
|
|
3
3
|
require 'rest-client'
|
4
4
|
require 'orderedhash'
|
5
5
|
require 'net/http/post/multipart'
|
6
|
+
require 'brightcove-api/version'
|
6
7
|
|
7
8
|
module Brightcove
|
8
9
|
class API
|
9
10
|
include HTTParty
|
10
11
|
disable_rails_query_string_format
|
11
12
|
|
12
|
-
VERSION = '1.0.11'.freeze
|
13
|
-
|
14
13
|
DEFAULT_HEADERS = {
|
15
14
|
'User-Agent' => "brightcove-api gem #{VERSION}"
|
16
15
|
}
|
@@ -29,7 +28,11 @@ module Brightcove
|
|
29
28
|
# RestClient POST timeout for opening connection
|
30
29
|
attr_accessor :open_timeout
|
31
30
|
|
32
|
-
# Initialize
|
31
|
+
# Initialize a new instance of the +Brightcove::API+ using a Brightcove token.
|
32
|
+
#
|
33
|
+
# @param token [String] Brightcove token which can be a read-only, write or read-write token.
|
34
|
+
# @param read_api_url [String] Read API URL or the default of +Brightcove::API::READ_API_URL+.
|
35
|
+
# @param write_api_url [String] Write API URL or the default of +Brightcove::API::WRITE_API_URL+.
|
33
36
|
def initialize(token, read_api_url = READ_API_URL, write_api_url = WRITE_API_URL)
|
34
37
|
@token = token
|
35
38
|
@read_api_url = read_api_url
|
@@ -38,39 +41,44 @@ module Brightcove
|
|
38
41
|
@open_timeout = nil
|
39
42
|
end
|
40
43
|
|
44
|
+
# Set a location for debug HTTP output to be written to.
|
45
|
+
#
|
46
|
+
# @param location [Object] Defaults to +$stderr+.
|
41
47
|
def debug(location = $stderr)
|
42
48
|
self.class.debug_output(location)
|
43
49
|
end
|
44
50
|
|
51
|
+
# Set HTTP headers that should be used in API requests. The
|
52
|
+
# +Brightcove::API::DEFAULT_HEADERS+ will be merged into the passed-in
|
53
|
+
# hash.
|
54
|
+
#
|
55
|
+
# @param http_headers [Hash] Updated HTTP headers.
|
45
56
|
def set_http_headers(http_headers = {})
|
46
57
|
http_headers.merge!(DEFAULT_HEADERS)
|
47
58
|
headers(http_headers)
|
48
59
|
end
|
49
60
|
|
61
|
+
# Set a timeout for HTTP requests.
|
62
|
+
#
|
63
|
+
# @param timeout [int] HTTP timeout value.
|
50
64
|
def set_timeout(timeout)
|
51
65
|
default_timeout(timeout)
|
52
66
|
end
|
53
67
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
options.merge!({:command => api_method, :token => @token})
|
61
|
-
options.merge!({:format => :xml}) if options.key?(:output) && 'mrss'.eql?(options[:output])
|
62
|
-
{ :query => options }
|
63
|
-
end
|
64
|
-
|
65
|
-
# Call Brightcove using a particular API method, api_method.
|
66
|
-
# The options parameter can be either a query string or a hash. In either case, it is where
|
67
|
-
# you can add any parameters appropriate for the API call. If a query string, it will be
|
68
|
-
# normalized to a hash via CGI.parse.
|
68
|
+
# Make an HTTP GET call to the Brightcove API for a particular API method.
|
69
|
+
#
|
70
|
+
# @param api_method [String] Brightcove API method.
|
71
|
+
# @param options [Hash] Optional hash containing parameter names and values. The options
|
72
|
+
# parameter can be either a query string or a hash. If a query string, it will be
|
73
|
+
# normalized to a hash via CGI.parse.
|
69
74
|
def get(api_method, options = {})
|
70
75
|
self.class.get(@read_api_url, build_query_from_options(api_method, options))
|
71
76
|
end
|
72
77
|
|
73
|
-
#
|
78
|
+
# Make an HTTP POST call to the Brightcove API for a particular API method.
|
79
|
+
#
|
80
|
+
# @param api_method [String] Brightcove API method.
|
81
|
+
# @param parameters [Hash] Optional hash containing parameter names and values.
|
74
82
|
def post(api_method, parameters = {})
|
75
83
|
parameters.merge!({"token" => @token})
|
76
84
|
|
@@ -81,6 +89,11 @@ module Brightcove
|
|
81
89
|
self.class.post(@write_api_url, {:body => {:json => JSON.generate(body)}})
|
82
90
|
end
|
83
91
|
|
92
|
+
# Post a file to the Brightcove API, e.g. uploading video.
|
93
|
+
#
|
94
|
+
# @param api_method [String] Brightcove API method.
|
95
|
+
# @param file [String] Full path of file to be uploaded.
|
96
|
+
# @param parameters [Hash] Optional hash containing parameter names and values.
|
84
97
|
def post_file(api_method, file, parameters = {})
|
85
98
|
parameters.merge!({"token" => @token})
|
86
99
|
|
@@ -116,7 +129,21 @@ module Brightcove
|
|
116
129
|
JSON.parse(response)
|
117
130
|
end
|
118
131
|
|
132
|
+
# Post a file via HTTP streaming to the Brightcove API, e.g. uploading video.
|
133
|
+
#
|
134
|
+
# @param api_method [String] Brightcove API method.
|
135
|
+
# @param upload_file [String] Full path of file to be uploaded.
|
136
|
+
# @param parameters [Hash] Optional hash containing parameter names and values.
|
119
137
|
def post_file_streaming(api_method, upload_file, content_type, parameters)
|
138
|
+
File.open(upload_file) { |file| post_io_streaming(api_method, file, content_type, parameters) }
|
139
|
+
end
|
140
|
+
|
141
|
+
# Post a file IO object via HTTP streaming to the Brightcove API, e.g. uploading video.
|
142
|
+
#
|
143
|
+
# @param api_method [String] Brightcove API method.
|
144
|
+
# @param file [File handle] File handle of file to be uploaded.
|
145
|
+
# @param parameters [Hash] Optional hash containing parameter names and values.
|
146
|
+
def post_io_streaming(api_method, file, content_type, parameters)
|
120
147
|
parameters.merge!({"token" => @token})
|
121
148
|
|
122
149
|
body = {}
|
@@ -133,20 +160,38 @@ module Brightcove
|
|
133
160
|
|
134
161
|
url = URI.parse(@write_api_url)
|
135
162
|
response = nil
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
end
|
163
|
+
|
164
|
+
payload[:json] = body.to_json
|
165
|
+
payload[:file] = UploadIO.new(file, content_type)
|
166
|
+
|
167
|
+
request = Net::HTTP::Post::Multipart.new(url.path, payload)
|
168
|
+
|
169
|
+
response = Net::HTTP.start(url.host, url.port) do |http|
|
170
|
+
http.read_timeout = @timeout if @timeout
|
171
|
+
http.open_timeout = @open_timeout if @open_timeout
|
172
|
+
http.request(request)
|
147
173
|
end
|
148
174
|
|
149
175
|
JSON.parse(response.body)
|
150
176
|
end
|
177
|
+
|
178
|
+
private
|
179
|
+
|
180
|
+
# Build an appropriate query for the Brightcove API given an +api_method+ and +options+.
|
181
|
+
# This will also merge in your API token and set the +format+ to XML if +mrss+ has been
|
182
|
+
# requested for the +:output+.
|
183
|
+
#
|
184
|
+
# @param api_method [String] Brightcove API method.
|
185
|
+
# @param options [Hash] Optional hash containing parameter names and values.
|
186
|
+
def build_query_from_options(api_method, options = {})
|
187
|
+
# normalize options to a hash
|
188
|
+
unless options.respond_to?(:merge!)
|
189
|
+
options = CGI.parse(options)
|
190
|
+
end
|
191
|
+
|
192
|
+
options.merge!({:command => api_method, :token => @token})
|
193
|
+
options.merge!({:format => :xml}) if options.key?(:output) && 'mrss'.eql?(options[:output])
|
194
|
+
{ :query => options }
|
195
|
+
end
|
151
196
|
end
|
152
197
|
end
|