transloadit 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|