brightcove-api 1.0.11 → 1.0.12
Sign up to get free protection for your applications and to get access to all the features.
- 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
|