transloadit 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +23 -0
- data/.standard.yml +0 -0
- data/CHANGELOG.md +70 -55
- data/Gemfile +1 -1
- data/README.md +162 -86
- data/Rakefile +12 -17
- data/examples/README.md +94 -55
- data/examples/basic/audio-concat-transcoder.rb +29 -19
- data/examples/basic/audio-transcoder.rb +32 -22
- data/examples/basic/image-transcoder.rb +22 -17
- data/examples/basic/main.rb +31 -37
- data/examples/basic/media-transcoder.rb +2 -7
- data/lib/transloadit/api_model.rb +13 -13
- data/lib/transloadit/assembly.rb +27 -24
- data/lib/transloadit/exception.rb +2 -4
- data/lib/transloadit/request.rb +58 -52
- data/lib/transloadit/response/assembly.rb +14 -13
- data/lib/transloadit/response.rb +10 -10
- data/lib/transloadit/step.rb +13 -13
- data/lib/transloadit/template.rb +5 -5
- data/lib/transloadit/version.rb +1 -1
- data/lib/transloadit.rb +24 -24
- data/test/fixtures/cassettes/cancel_assembly.yml +3 -3
- data/test/fixtures/cassettes/create_template.yml +1 -1
- data/test/fixtures/cassettes/delete_template.yml +1 -1
- data/test/fixtures/cassettes/fetch_assemblies.yml +1 -1
- data/test/fixtures/cassettes/fetch_assembly_aborted.yml +3 -3
- data/test/fixtures/cassettes/fetch_assembly_errors.yml +3 -3
- data/test/fixtures/cassettes/fetch_assembly_executing.yml +3 -3
- data/test/fixtures/cassettes/fetch_assembly_notifications.yml +1 -1
- data/test/fixtures/cassettes/fetch_assembly_ok.yml +6 -6
- data/test/fixtures/cassettes/fetch_assembly_uploading.yml +3 -3
- data/test/fixtures/cassettes/fetch_billing.yml +1 -1
- data/test/fixtures/cassettes/fetch_root.yml +3 -3
- data/test/fixtures/cassettes/fetch_template.yml +1 -1
- data/test/fixtures/cassettes/fetch_templates.yml +1 -1
- data/test/fixtures/cassettes/post_assembly.yml +2 -2
- data/test/fixtures/cassettes/rate_limit_fail.yml +3 -3
- data/test/fixtures/cassettes/rate_limit_succeed.yml +4 -4
- data/test/fixtures/cassettes/replay_assembly.yml +2 -2
- data/test/fixtures/cassettes/replay_assembly_notification.yml +1 -1
- data/test/fixtures/cassettes/submit_assembly.yml +3 -3
- data/test/fixtures/cassettes/update_template.yml +1 -1
- data/test/test_helper.rb +10 -10
- data/test/unit/test_transloadit.rb +66 -66
- data/test/unit/transloadit/test_api.rb +35 -33
- data/test/unit/transloadit/test_assembly.rb +148 -112
- data/test/unit/transloadit/test_request.rb +41 -42
- data/test/unit/transloadit/test_response.rb +76 -76
- data/test/unit/transloadit/test_step.rb +52 -52
- data/test/unit/transloadit/test_template.rb +49 -54
- data/transloadit.gemspec +25 -26
- metadata +25 -41
- data/.travis.yml +0 -13
data/Rakefile
CHANGED
@@ -1,30 +1,25 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
4
|
-
GEMSPEC = 'transloadit.gemspec'
|
5
|
-
|
6
|
-
spec = eval open(GEMSPEC).read
|
7
|
-
Gem::PackageTask.new(spec) do |gem|
|
8
|
-
gem.need_tar = true
|
9
|
-
end
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/testtask"
|
10
3
|
|
11
4
|
Rake::TestTask.new do |test|
|
12
|
-
test.libs
|
13
|
-
test.pattern =
|
5
|
+
test.libs << "test"
|
6
|
+
test.pattern = "test/**/test_*.rb"
|
14
7
|
end
|
15
8
|
|
16
9
|
begin
|
17
|
-
require
|
18
|
-
require
|
10
|
+
require "yard"
|
11
|
+
require "yard/rake/yardoc_task"
|
19
12
|
|
20
13
|
YARD::Rake::YardocTask.new :doc do |yard|
|
21
|
-
yard.options = %w
|
22
|
-
--title
|
14
|
+
yard.options = %w[
|
15
|
+
--title Transloadit
|
23
16
|
--readme README.md
|
24
17
|
--markup rdoc
|
25
|
-
|
18
|
+
]
|
26
19
|
end
|
27
20
|
rescue
|
28
|
-
desc
|
21
|
+
desc "You need the `yard` gem to generate documentation"
|
29
22
|
task :doc
|
30
23
|
end
|
24
|
+
|
25
|
+
task default: :test
|
data/examples/README.md
CHANGED
@@ -3,6 +3,15 @@
|
|
3
3
|
### See an example
|
4
4
|
Navigate to an example directory (e.g. ```basic```) and then run the following, making sure to
|
5
5
|
substitute your own values for the environment variables below:
|
6
|
+
|
7
|
+
```bash
|
8
|
+
TRANSLOADIT_KEY=<your-transloadit-key> \
|
9
|
+
TRANSLOADIT_SECRET=<your-transloadit-secret> \
|
10
|
+
main.rb
|
11
|
+
```
|
12
|
+
|
13
|
+
If you wish to store results from the encoding in an s3 bucket of your own, you can set your s3 credentials as well like so:
|
14
|
+
|
6
15
|
```bash
|
7
16
|
TRANSLOADIT_KEY=<your-transloadit-key> \
|
8
17
|
TRANSLOADIT_SECRET=<your-transloadit-secret> \
|
@@ -13,66 +22,77 @@ S3_REGION=<your-s3-region> \
|
|
13
22
|
main.rb
|
14
23
|
```
|
15
24
|
|
25
|
+
Please be sure you have the `transloadit` gem installed by running `gem install transloadit` before running these examples.
|
26
|
+
|
16
27
|
## Code Review
|
17
28
|
|
18
29
|
### Overview
|
19
30
|
|
20
|
-
In each example we utilize a simple base class `MediaTranscoder`. This class provides us
|
21
|
-
with two methods:
|
31
|
+
In each example we utilize a simple base class `MediaTranscoder`. This class provides us a simple method:
|
22
32
|
|
23
33
|
```
|
24
34
|
transloadit_client
|
25
|
-
get_status!
|
26
35
|
```
|
27
36
|
|
28
|
-
The
|
37
|
+
The method is responsible for returning us an instance of the Transloadit SDK object,
|
29
38
|
utilizing our credentials that we set in environment variables.
|
30
39
|
|
31
|
-
The second method is responsible for returning us the status of an assembly. Note that it
|
32
|
-
extends `Transloadit::Response::Assembly` to give us access to convenience methods like
|
33
|
-
`finished?`.
|
34
|
-
|
35
40
|
### First example
|
36
41
|
|
37
|
-
In the first example
|
38
|
-
using the Transloadit `/image/optimize` robot, and then
|
42
|
+
In the [first example](https://github.com/transloadit/ruby-sdk/blob/main/examples/basic/image-transcoder.rb)
|
43
|
+
that gets played, we fetch an image from the cat api, optimize it using the Transloadit `/image/optimize` robot, and then optionally
|
44
|
+
stores it in s3 if the s3 credentials are set.
|
39
45
|
|
40
46
|
There are only two steps:
|
41
|
-
|
47
|
+
|
48
|
+
```ruby
|
42
49
|
optimize = transloadit_client.step('image', '/image/optimize', {
|
43
50
|
progressive: true,
|
44
51
|
use: ':original',
|
45
52
|
result: true
|
46
53
|
})
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
+
|
55
|
+
steps = [optimize]
|
56
|
+
|
57
|
+
begin
|
58
|
+
store = transloadit_client.step('store', '/s3/store', {
|
59
|
+
key: ENV.fetch('S3_ACCESS_KEY'),
|
60
|
+
secret: ENV.fetch('S3_SECRET_KEY'),
|
61
|
+
bucket: ENV.fetch('S3_BUCKET'),
|
62
|
+
bucket_region: ENV.fetch('S3_REGION'),
|
63
|
+
use: 'image'
|
64
|
+
})
|
65
|
+
|
66
|
+
steps.push(store)
|
67
|
+
rescue KeyError => e
|
68
|
+
p 's3 config not set. Skipping s3 storage...'
|
69
|
+
end
|
70
|
+
|
54
71
|
```
|
55
|
-
|
56
|
-
our
|
72
|
+
|
73
|
+
Again, we utilize environment variables to access our s3 credentials if given and pass them to
|
74
|
+
our assembly. If the s3 credentials are not set, this step is skipped and the transloadit temporary s3 storage is used.
|
57
75
|
|
58
76
|
The job is invoked by running the following:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
assembly = transloadit_client.assembly(steps: steps)
|
80
|
+
assembly.create! open(file)
|
59
81
|
```
|
60
|
-
|
61
|
-
|
62
|
-
```
|
63
|
-
We pass the two steps we defined above and call `open` on the file passed in. This method
|
82
|
+
|
83
|
+
We pass the steps we defined above and call `open` on the file passed in. This method
|
64
84
|
assumes the file object passed in responds to `open`.
|
65
85
|
|
66
86
|
### Second example
|
67
87
|
|
68
|
-
In the second example
|
69
|
-
|
70
|
-
provides the necessary metadata to display artist and track information
|
71
|
-
such as iTunes.
|
88
|
+
In the [second example](https://github.com/transloadit/ruby-sdk/blob/main/examples/basic/audio-transcoder.rb),
|
89
|
+
we take a non-mp3 audio file, encode it as an mp3, add ID3 tags to it, and then optionally store it in s3.
|
90
|
+
There are many use cases for audio uploads, and adding ID3 tags provides the necessary metadata to display artist and track information
|
91
|
+
in audio players such as iTunes.
|
72
92
|
|
73
93
|
We have the following steps:
|
74
94
|
|
75
|
-
```
|
95
|
+
```ruby
|
76
96
|
encode_mp3 = transloadit_client.step('mp3_encode', '/audio/encode', {
|
77
97
|
use: ':original',
|
78
98
|
preset: 'mp3',
|
@@ -85,13 +105,22 @@ write_metadata = transloadit_client.step('mp3', '/meta/write', {
|
|
85
105
|
result: true,
|
86
106
|
data_to_write: mp3_metadata
|
87
107
|
})
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
108
|
+
|
109
|
+
steps = [encode_mp3, write_metadata]
|
110
|
+
|
111
|
+
begin
|
112
|
+
store = transloadit_client.step('store', '/s3/store', {
|
113
|
+
key: ENV.fetch('S3_ACCESS_KEY'),
|
114
|
+
secret: ENV.fetch('S3_SECRET_KEY'),
|
115
|
+
bucket: ENV.fetch('S3_BUCKET'),
|
116
|
+
bucket_region: ENV.fetch('S3_REGION'),
|
117
|
+
use: ['mp3']
|
118
|
+
})
|
119
|
+
|
120
|
+
steps.push(store)
|
121
|
+
rescue KeyError => e
|
122
|
+
p 's3 config not set. Skipping s3 storage...'
|
123
|
+
end
|
95
124
|
```
|
96
125
|
|
97
126
|
The first step simply uses the original file to create an mp3 version using the `audio/encode`
|
@@ -102,7 +131,7 @@ robot. In our simple example we set the track name to the name of the file using
|
|
102
131
|
name substitution (see https://transloadit.com/docs/#assembly-variables), and set canned
|
103
132
|
values for all other ID3 fields
|
104
133
|
|
105
|
-
```
|
134
|
+
```ruby
|
106
135
|
def mp3_metadata
|
107
136
|
meta = { publisher: 'Transloadit', title: '${file.name}' }
|
108
137
|
meta[:album] = 'Transloadit Compilation'
|
@@ -112,23 +141,26 @@ def mp3_metadata
|
|
112
141
|
end
|
113
142
|
```
|
114
143
|
|
144
|
+
Again, we utilize environment variables to access our s3 credentials if given and pass them to
|
145
|
+
our assembly. If the s3 credentials are not set, this step is skipped and the transloadit temporary s3 storage is used.
|
146
|
+
|
115
147
|
Finally, we submit the assembly in the same way as the previous example:
|
116
148
|
|
117
|
-
```
|
118
|
-
assembly = transloadit_client.assembly(steps:
|
119
|
-
assembly.
|
149
|
+
```ruby
|
150
|
+
assembly = transloadit_client.assembly(steps: steps)
|
151
|
+
assembly.create! open(file)
|
120
152
|
```
|
121
153
|
|
122
154
|
### Third example
|
123
155
|
|
124
|
-
In the third example,
|
125
|
-
We upload the result to s3.
|
156
|
+
In the [third example](https://github.com/transloadit/ruby-sdk/blob/main/examples/basic/audio-concat-transcoder.rb),
|
157
|
+
we take a series of mp3 files and concatenate them together. We then optionally upload the result to s3.
|
126
158
|
|
127
159
|
This example is provided to showcase advanced usage of the `use` parameter in the `audio/concat` assembly.
|
128
160
|
|
129
161
|
In our `transcode` method, note that this time we are passed an array of files.
|
130
162
|
|
131
|
-
```
|
163
|
+
```ruby
|
132
164
|
concat = transloadit_client.step('concat', '/audio/concat', {
|
133
165
|
ffmpeg_stack: 'v2.2.3',
|
134
166
|
preset: 'mp3',
|
@@ -159,21 +191,28 @@ by its position in the array.
|
|
159
191
|
This is why it is important to define the ordering in the `steps` array, as there is no guarantee that items
|
160
192
|
will finish uploading in the order they are sent.
|
161
193
|
|
162
|
-
With that step complete, we can finalize our store step and submit the assembly.
|
194
|
+
With that step complete, we can finalize our store step (which is optionally added if the s3 credentials are set) and submit the assembly.
|
195
|
+
|
196
|
+
```ruby
|
197
|
+
begin
|
198
|
+
store = transloadit_client.step('store', '/s3/store', {
|
199
|
+
key: ENV.fetch('S3_ACCESS_KEY'),
|
200
|
+
secret: ENV.fetch('S3_SECRET_KEY'),
|
201
|
+
bucket: ENV.fetch('S3_BUCKET'),
|
202
|
+
bucket_region: ENV.fetch('S3_REGION'),
|
203
|
+
use: ['concat']
|
204
|
+
})
|
205
|
+
|
206
|
+
steps.push(store)
|
207
|
+
rescue KeyError => e
|
208
|
+
p 's3 config not set. Skipping s3 storage...'
|
209
|
+
end
|
163
210
|
|
164
|
-
|
165
|
-
|
166
|
-
key: ENV.fetch('S3_ACCESS_KEY'),
|
167
|
-
secret: ENV.fetch('S3_SECRET_KEY'),
|
168
|
-
bucket: ENV.fetch('S3_BUCKET'),
|
169
|
-
bucket_region: ENV.fetch('S3_REGION'),
|
170
|
-
use: ['concat']
|
171
|
-
})
|
172
|
-
assembly = transloadit_client.assembly(steps: [concat, store])
|
173
|
-
assembly.submit! *open_files(files)
|
211
|
+
assembly = transloadit_client.assembly(steps: steps)
|
212
|
+
assembly.create! *open_files(files)
|
174
213
|
```
|
175
214
|
|
176
|
-
Note the final call to `
|
215
|
+
Note the final call to `create` and usage of the splat (`*`) operator. The `create!` method expects
|
177
216
|
one or more arguments. If you would like to pass an array to this method, you must unpack the contents of the array
|
178
217
|
or the method will treat the argument passed in as a single object, and you may have unexpected results in your
|
179
218
|
final results.
|
@@ -1,40 +1,50 @@
|
|
1
1
|
class AudioConcatTranscoder < MediaTranscoder
|
2
|
-
require
|
3
|
-
require_relative
|
2
|
+
require "transloadit"
|
3
|
+
require_relative "media-transcoder"
|
4
4
|
|
5
5
|
# in this example a file is encoded as an mp3, id3 tags are added, and it is stored in s3
|
6
6
|
def transcode!(files)
|
7
|
-
concat = transloadit_client.step(
|
8
|
-
preset:
|
7
|
+
concat = transloadit_client.step("concat", "/audio/concat", {
|
8
|
+
preset: "mp3",
|
9
9
|
use: {
|
10
10
|
steps: files.map.each_with_index do |f, i|
|
11
|
-
{
|
11
|
+
{name: ":original", as: "audio_#{i}", fields: "file_#{i}"}
|
12
12
|
end
|
13
13
|
},
|
14
14
|
result: true
|
15
15
|
})
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
|
17
|
+
steps = [concat]
|
18
|
+
|
19
|
+
begin
|
20
|
+
store = transloadit_client.step("store", "/s3/store", {
|
21
|
+
key: ENV.fetch("S3_ACCESS_KEY"),
|
22
|
+
secret: ENV.fetch("S3_SECRET_KEY"),
|
23
|
+
bucket: ENV.fetch("S3_BUCKET"),
|
24
|
+
bucket_region: ENV.fetch("S3_REGION"),
|
25
|
+
use: ["concat"]
|
26
|
+
})
|
27
|
+
|
28
|
+
steps.push(store)
|
29
|
+
rescue KeyError
|
30
|
+
p "s3 config not set. Skipping s3 storage..."
|
31
|
+
end
|
32
|
+
|
33
|
+
assembly = transloadit_client.assembly(steps: steps)
|
34
|
+
assembly.create!(*open_files(files))
|
25
35
|
end
|
26
36
|
|
27
37
|
def open_files(files)
|
28
38
|
files.map do |f|
|
29
|
-
open(f)
|
39
|
+
File.open(f)
|
30
40
|
end
|
31
41
|
end
|
32
42
|
|
33
43
|
def mp3_metadata
|
34
|
-
meta = {
|
35
|
-
meta[:album] =
|
36
|
-
meta[:artist] =
|
37
|
-
meta[:track] =
|
44
|
+
meta = {publisher: "Transloadit", title: "${file.name}"}
|
45
|
+
meta[:album] = "Transloadit Compilation"
|
46
|
+
meta[:artist] = "Transloadit"
|
47
|
+
meta[:track] = "1/1"
|
38
48
|
meta
|
39
49
|
end
|
40
50
|
end
|
@@ -1,37 +1,47 @@
|
|
1
1
|
class AudioTranscoder < MediaTranscoder
|
2
|
-
require
|
3
|
-
require_relative
|
2
|
+
require "transloadit"
|
3
|
+
require_relative "media-transcoder"
|
4
4
|
|
5
5
|
# in this example a file is encoded as an mp3, id3 tags are added, and it is stored in s3
|
6
6
|
def transcode!(file)
|
7
|
-
encode_mp3 = transloadit_client.step(
|
8
|
-
use:
|
9
|
-
preset:
|
10
|
-
ffmpeg_stack:
|
7
|
+
encode_mp3 = transloadit_client.step("mp3_encode", "/audio/encode", {
|
8
|
+
use: ":original",
|
9
|
+
preset: "mp3",
|
10
|
+
ffmpeg_stack: "v2.2.3",
|
11
11
|
result: true
|
12
12
|
})
|
13
|
-
write_metadata = transloadit_client.step(
|
14
|
-
use:
|
15
|
-
ffmpeg_stack:
|
13
|
+
write_metadata = transloadit_client.step("mp3", "/meta/write", {
|
14
|
+
use: "mp3_encode",
|
15
|
+
ffmpeg_stack: "v2.2.3",
|
16
16
|
result: true,
|
17
17
|
data_to_write: mp3_metadata
|
18
18
|
})
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
|
20
|
+
steps = [encode_mp3, write_metadata]
|
21
|
+
|
22
|
+
begin
|
23
|
+
store = transloadit_client.step("store", "/s3/store", {
|
24
|
+
key: ENV.fetch("S3_ACCESS_KEY"),
|
25
|
+
secret: ENV.fetch("S3_SECRET_KEY"),
|
26
|
+
bucket: ENV.fetch("S3_BUCKET"),
|
27
|
+
bucket_region: ENV.fetch("S3_REGION"),
|
28
|
+
use: ["mp3"]
|
29
|
+
})
|
30
|
+
|
31
|
+
steps.push(store)
|
32
|
+
rescue KeyError
|
33
|
+
p "s3 config not set. Skipping s3 storage..."
|
34
|
+
end
|
35
|
+
|
36
|
+
assembly = transloadit_client.assembly(steps: steps)
|
37
|
+
assembly.create! File.open(file)
|
28
38
|
end
|
29
39
|
|
30
40
|
def mp3_metadata
|
31
|
-
meta = {
|
32
|
-
meta[:album] =
|
33
|
-
meta[:artist] =
|
34
|
-
meta[:track] =
|
41
|
+
meta = {publisher: "Transloadit", title: "${file.name}"}
|
42
|
+
meta[:album] = "Transloadit Compilation"
|
43
|
+
meta[:artist] = "Transloadit"
|
44
|
+
meta[:track] = "1/1"
|
35
45
|
meta
|
36
46
|
end
|
37
47
|
end
|
@@ -1,27 +1,32 @@
|
|
1
1
|
class ImageTranscoder < MediaTranscoder
|
2
|
-
require
|
3
|
-
require_relative
|
2
|
+
require "transloadit"
|
3
|
+
require_relative "media-transcoder"
|
4
4
|
|
5
5
|
# in this example a file is submitted, optimized, and then stored in s3
|
6
6
|
def transcode!(file)
|
7
|
-
optimize = transloadit_client.step(
|
7
|
+
optimize = transloadit_client.step("image", "/image/optimize", {
|
8
8
|
progressive: true,
|
9
|
-
use:
|
9
|
+
use: ":original",
|
10
10
|
result: true
|
11
11
|
})
|
12
|
-
store = transloadit_client.step('store', '/s3/store', {
|
13
|
-
key: ENV.fetch('S3_ACCESS_KEY'),
|
14
|
-
secret: ENV.fetch('S3_SECRET_KEY'),
|
15
|
-
bucket: ENV.fetch('S3_BUCKET'),
|
16
|
-
bucket_region: ENV.fetch('S3_REGION'),
|
17
|
-
use: 'image'
|
18
|
-
})
|
19
|
-
assembly = transloadit_client.assembly(steps: [optimize, store])
|
20
|
-
assembly.submit! open(file)
|
21
|
-
end
|
22
12
|
|
23
|
-
|
24
|
-
|
25
|
-
|
13
|
+
steps = [optimize]
|
14
|
+
|
15
|
+
begin
|
16
|
+
store = transloadit_client.step("store", "/s3/store", {
|
17
|
+
key: ENV.fetch("S3_ACCESS_KEY"),
|
18
|
+
secret: ENV.fetch("S3_SECRET_KEY"),
|
19
|
+
bucket: ENV.fetch("S3_BUCKET"),
|
20
|
+
bucket_region: ENV.fetch("S3_REGION"),
|
21
|
+
use: "image"
|
22
|
+
})
|
23
|
+
|
24
|
+
steps.push(store)
|
25
|
+
rescue KeyError
|
26
|
+
p "s3 config not set. Skipping s3 storage..."
|
27
|
+
end
|
28
|
+
|
29
|
+
assembly = transloadit_client.assembly(steps: steps)
|
30
|
+
assembly.create! File.open(file)
|
26
31
|
end
|
27
32
|
end
|
data/examples/basic/main.rb
CHANGED
@@ -1,69 +1,63 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
1
|
+
require "open-uri"
|
2
|
+
require_relative "media-transcoder"
|
3
|
+
require_relative "image-transcoder"
|
4
|
+
require_relative "audio-transcoder"
|
5
|
+
require_relative "audio-concat-transcoder"
|
6
6
|
|
7
|
-
p
|
8
|
-
p
|
7
|
+
p "starting image transcoding job..."
|
8
|
+
p "fetching image from the cat api..."
|
9
9
|
|
10
|
-
open(
|
11
|
-
p
|
10
|
+
open("http://thecatapi.com/api/images/get") do |f|
|
11
|
+
p "starting transcoding job..."
|
12
12
|
image_transcoder = ImageTranscoder.new
|
13
13
|
response = image_transcoder.transcode!(f)
|
14
14
|
|
15
15
|
# if you are using rails one thing you can do would be to start an ActiveJob process that recursively
|
16
16
|
# checks on the status of the assembly until it is finished
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
response = image_transcoder.get_status!(response[:assembly_id])
|
21
|
-
end
|
17
|
+
p "checking job status..."
|
18
|
+
response.reload_until_finished!
|
19
|
+
|
22
20
|
p response[:message]
|
23
|
-
p response[:results][
|
21
|
+
p response[:results]["image"][0]["url"]
|
24
22
|
end
|
25
23
|
|
26
|
-
p
|
27
|
-
p
|
24
|
+
p "starting audio transcoding job..."
|
25
|
+
p "fetching soundbite from nasa..."
|
28
26
|
p "\n"
|
29
27
|
|
30
|
-
open(
|
31
|
-
p
|
28
|
+
open("https://www.nasa.gov/640379main_Computers_are_in_Control.m4r") do |f|
|
29
|
+
p "starting transcoding job..."
|
32
30
|
audio_transcoder = AudioTranscoder.new
|
33
31
|
response = audio_transcoder.transcode!(f)
|
34
32
|
|
35
33
|
# if you are using rails one thing you can do would be to start an ActiveJob process that recursively
|
36
34
|
# checks on the status of the assembly until it is finished
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
response = audio_transcoder.get_status!(response[:assembly_id])
|
41
|
-
end
|
35
|
+
p "checking job status..."
|
36
|
+
response.reload_until_finished!
|
37
|
+
|
42
38
|
p response[:message]
|
43
|
-
p response[:results][
|
39
|
+
p response[:results]["mp3"][0]["url"]
|
44
40
|
p "\n"
|
45
41
|
end
|
46
42
|
|
47
|
-
p
|
48
|
-
p
|
43
|
+
p "starting audio concat transcoding job..."
|
44
|
+
p "fetching 3 soundbites from nasa..."
|
49
45
|
|
50
46
|
files = [
|
51
|
-
|
52
|
-
|
53
|
-
|
47
|
+
"https://www.nasa.gov/mp3/640148main_APU%20Shutdown.mp3",
|
48
|
+
"https://www.nasa.gov/mp3/640164main_Go%20for%20Deploy.mp3",
|
49
|
+
"https://www.nasa.gov/mp3/640165main_Lookin%20At%20It.mp3"
|
54
50
|
]
|
55
51
|
|
56
|
-
p
|
52
|
+
p "starting transcoding job..."
|
57
53
|
audio_concat_transcoder = AudioConcatTranscoder.new
|
58
54
|
response = audio_concat_transcoder.transcode!(files)
|
59
55
|
|
60
56
|
# if you are using rails one thing you can do would be to start an ActiveJob process that recursively
|
61
57
|
# checks on the status of the assembly until it is finished
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
response = audio_concat_transcoder.get_status!(response[:assembly_id])
|
66
|
-
end
|
58
|
+
p "checking job status..."
|
59
|
+
response.reload_until_finished!
|
60
|
+
|
67
61
|
p response[:message]
|
68
|
-
p response[:results][
|
62
|
+
p response[:results]["concat"][0]["url"]
|
69
63
|
p "\n"
|
@@ -1,13 +1,8 @@
|
|
1
1
|
class MediaTranscoder
|
2
2
|
def transloadit_client
|
3
3
|
@transloadit ||= Transloadit.new({
|
4
|
-
key: ENV.fetch(
|
5
|
-
secret: ENV.fetch(
|
4
|
+
key: ENV.fetch("TRANSLOADIT_KEY"),
|
5
|
+
secret: ENV.fetch("TRANSLOADIT_SECRET")
|
6
6
|
})
|
7
7
|
end
|
8
|
-
|
9
|
-
def get_status!(assembly_id)
|
10
|
-
req = Transloadit::Request.new('/assemblies/' + assembly_id.to_s, ENV.fetch('TRANSLOADIT_SECRET'))
|
11
|
-
req.get.extend!(Transloadit::Response::Assembly)
|
12
|
-
end
|
13
8
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "transloadit"
|
2
2
|
|
3
3
|
#
|
4
4
|
# Represents an API class that more Transloadit specific API classes
|
@@ -20,30 +20,30 @@ class Transloadit::ApiModel
|
|
20
20
|
#
|
21
21
|
def initialize(transloadit, options = {})
|
22
22
|
self.transloadit = transloadit
|
23
|
-
self.options
|
23
|
+
self.options = options
|
24
24
|
end
|
25
25
|
|
26
26
|
#
|
27
27
|
# @return [String] a human-readable version of the API
|
28
28
|
#
|
29
29
|
def inspect
|
30
|
-
|
30
|
+
to_hash.inspect
|
31
31
|
end
|
32
32
|
|
33
33
|
#
|
34
34
|
# @return [Hash] a Transloadit-compatible Hash of the API's contents
|
35
35
|
#
|
36
36
|
def to_hash
|
37
|
-
|
38
|
-
:
|
39
|
-
).delete_if {|_,v| v.nil?}
|
37
|
+
options.merge(
|
38
|
+
auth: transloadit.to_hash
|
39
|
+
).delete_if { |_, v| v.nil? }
|
40
40
|
end
|
41
41
|
|
42
42
|
#
|
43
43
|
# @return [String] JSON-encoded String containing the API's contents
|
44
44
|
#
|
45
45
|
def to_json
|
46
|
-
MultiJson.dump(
|
46
|
+
MultiJson.dump(to_hash)
|
47
47
|
end
|
48
48
|
|
49
49
|
protected
|
@@ -62,12 +62,12 @@ class Transloadit::ApiModel
|
|
62
62
|
#
|
63
63
|
# @return [Transloadit::Response] the response
|
64
64
|
#
|
65
|
-
def _do_request(path, params = nil, method =
|
66
|
-
|
67
|
-
params =
|
68
|
-
params = {
|
69
|
-
params.merge!(extra_params)
|
65
|
+
def _do_request(path, params = nil, method = "get", extra_params = nil)
|
66
|
+
unless params.nil?
|
67
|
+
params = to_hash.update(params)
|
68
|
+
params = {params: params} if ["post", "put", "delete"].include? method
|
69
|
+
params.merge!(extra_params) unless extra_params.nil?
|
70
70
|
end
|
71
|
-
Transloadit::Request.new(path,
|
71
|
+
Transloadit::Request.new(path, transloadit.secret).public_send(method, params)
|
72
72
|
end
|
73
73
|
end
|