cielo24 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/cielo24.rb +11 -0
- data/lib/cielo24/actions.rb +258 -0
- data/lib/cielo24/enums.rb +139 -0
- data/lib/cielo24/options.rb +161 -0
- data/lib/cielo24/version.rb +3 -0
- data/lib/cielo24/web_utils.rb +45 -0
- metadata +29 -49
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5b09cd26328c50d779c3a5ad4bcdab2a0c0d7d93
|
4
|
+
data.tar.gz: 2527d71d3ba675dc9e42e4a2e4e8d96dfd944d8b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7491fc76d01f2e77bd739a2db280630f3f8c1b66aa07f6c7b6338dbd25b0b677829d22433fe6db99030aa83c88898e6fa49f1ad75a701f9528b883ad0357ae5e
|
7
|
+
data.tar.gz: 71b71029d04d55cb73491240ce81e1bcb69d9d4c0f4f092cf3055206bab5403277c2efc4f6e8380efab42f14e57b2e53f8209eafaec7c83ee3fcc650d287e256
|
data/lib/cielo24.rb
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
module Cielo24
|
2
|
+
class Actions
|
3
|
+
|
4
|
+
require 'uri'
|
5
|
+
require 'hashie'
|
6
|
+
require_relative 'web_utils'
|
7
|
+
require_relative 'enums'
|
8
|
+
include Errno
|
9
|
+
include Hashie
|
10
|
+
include Cielo24
|
11
|
+
|
12
|
+
attr_accessor :base_url
|
13
|
+
|
14
|
+
VERSION = 1
|
15
|
+
|
16
|
+
LOGIN_PATH = "/api/account/login"
|
17
|
+
LOGOUT_PATH = "/api/account/logout"
|
18
|
+
UPDATE_PASSWORD_PATH = "/api/account/update_password"
|
19
|
+
GENERATE_API_KEY_PATH = "/api/account/generate_api_key"
|
20
|
+
REMOVE_API_KEY_PATH = "/api/account/remove_api_key"
|
21
|
+
CREATE_JOB_PATH = "/api/job/new"
|
22
|
+
AUTHORIZE_JOB_PATH = "/api/job/authorize"
|
23
|
+
DELETE_JOB_PATH = "/api/job/del"
|
24
|
+
GET_JOB_INFO_PATH = "/api/job/info"
|
25
|
+
GET_JOB_LIST_PATH = "/api/job/list"
|
26
|
+
ADD_MEDIA_TO_JOB_PATH = "/api/job/add_media"
|
27
|
+
ADD_EMBEDDED_MEDIA_TO_JOB_PATH = "/api/job/add_media_url"
|
28
|
+
GET_MEDIA_PATH = "/api/job/media"
|
29
|
+
PERFORM_TRANSCRIPTION = "/api/job/perform_transcription"
|
30
|
+
GET_TRANSCRIPTION_PATH = "/api/job/get_transcript"
|
31
|
+
GET_CAPTION_PATH = "/api/job/get_caption"
|
32
|
+
GET_ELEMENT_LIST_PATH = "/api/job/get_elementlist"
|
33
|
+
GET_LIST_OF_ELEMENT_LISTS_PATH = "/api/job/list_elementlists"
|
34
|
+
|
35
|
+
def initialize(base_url="https://sandbox-dev.cielo24.com")
|
36
|
+
@base_url = base_url
|
37
|
+
end
|
38
|
+
|
39
|
+
### ACCESS CONTROL ###
|
40
|
+
|
41
|
+
def login(username, password=nil, api_securekey=nil, use_headers=false)
|
42
|
+
assert_argument(username, "Username")
|
43
|
+
# Password or API Secure Key must be supplied but not both
|
44
|
+
raise ArgumentError.new("Only password or API secure must be supplied for login.") if (!password.nil? and !api_securekey.nil?)
|
45
|
+
raise ArgumentError.new("Password or API secure must be supplied for login.") if (password.nil? and api_securekey.nil?)
|
46
|
+
|
47
|
+
query_hash = init_version_dict
|
48
|
+
headers = Hash.new
|
49
|
+
|
50
|
+
if use_headers
|
51
|
+
query_hash[:username] = username
|
52
|
+
query_hash[:password] = password if (!password.nil?)
|
53
|
+
query_hash[:securekey] = api_securekey if (!api_securekey.nil?)
|
54
|
+
else
|
55
|
+
headers[:'x-auth-user'] = username
|
56
|
+
headers[:'x-auth-key'] = password if (!password.nil?)
|
57
|
+
headers[:'x-auth-securekey'] = api_securekey if (!api_securekey.nil?)
|
58
|
+
end
|
59
|
+
|
60
|
+
json = WebUtils.get_json(@base_url + LOGIN_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash, headers)
|
61
|
+
return json["ApiToken"]
|
62
|
+
end
|
63
|
+
|
64
|
+
def logout(api_token)
|
65
|
+
query_hash = init_access_req_dict(api_token)
|
66
|
+
|
67
|
+
# Nothing returned
|
68
|
+
WebUtils.http_request(@base_url + LOGOUT_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
69
|
+
end
|
70
|
+
|
71
|
+
def update_password(api_token, new_password)
|
72
|
+
assert_argument(new_password, "New Password")
|
73
|
+
query_hash = init_access_req_dict(api_token)
|
74
|
+
query_hash[:new_password] = new_password
|
75
|
+
|
76
|
+
# Nothing returned
|
77
|
+
WebUtils.http_request(@base_url + UPDATE_PASSWORD_PATH, 'POST', WebUtils::BASIC_TIMEOUT, nil, nil, query_hash)
|
78
|
+
end
|
79
|
+
|
80
|
+
def generate_api_key(api_token, username, force_new = false)
|
81
|
+
assert_argument(username, "Username")
|
82
|
+
assert_argument(api_token, "API Token")
|
83
|
+
query_hash = init_access_req_dict(api_token)
|
84
|
+
query_hash[:account_id] = username
|
85
|
+
query_hash[:force_new] = force_new
|
86
|
+
|
87
|
+
json = WebUtils.get_json(@base_url + GENERATE_API_KEY_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
88
|
+
return json["ApiKey"]
|
89
|
+
end
|
90
|
+
|
91
|
+
def remove_api_key(api_token, api_securekey)
|
92
|
+
query_hash = init_access_req_dict(api_token)
|
93
|
+
query_hash[:api_securekey] = api_securekey
|
94
|
+
|
95
|
+
# Nothing returned
|
96
|
+
WebUtils.http_request(@base_url + REMOVE_API_KEY_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
97
|
+
end
|
98
|
+
|
99
|
+
### JOB CONTROL ###
|
100
|
+
|
101
|
+
def create_job(api_token, job_name = nil, source_language = "en")
|
102
|
+
query_hash = init_access_req_dict(api_token)
|
103
|
+
query_hash[:job_name] = job_name if !(job_name.nil?)
|
104
|
+
query_hash[:source_language] = source_language
|
105
|
+
|
106
|
+
json = WebUtils.get_json(@base_url + CREATE_JOB_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
107
|
+
# Return a hash with JobId and TaskId
|
108
|
+
return Mash.new(json)
|
109
|
+
end
|
110
|
+
|
111
|
+
def authorize_job(api_token, job_id)
|
112
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
113
|
+
|
114
|
+
# Nothing returned
|
115
|
+
WebUtils.http_request(@base_url + AUTHORIZE_JOB_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
116
|
+
end
|
117
|
+
|
118
|
+
def delete_job(api_token, job_id)
|
119
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
120
|
+
|
121
|
+
json = WebUtils.get_json(@base_url + DELETE_JOB_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
122
|
+
return json["TaskId"]
|
123
|
+
end
|
124
|
+
|
125
|
+
def get_job_info(api_token, job_id)
|
126
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
127
|
+
|
128
|
+
json = WebUtils.get_json(@base_url + GET_JOB_INFO_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
129
|
+
# TODO: JobInfo
|
130
|
+
return Mash.new(json)
|
131
|
+
end
|
132
|
+
|
133
|
+
def get_job_list(api_token)
|
134
|
+
query_hash = init_access_req_dict(api_token)
|
135
|
+
|
136
|
+
json = WebUtils.get_json(@base_url + GET_JOB_LIST_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
137
|
+
# TODO: JobList
|
138
|
+
return Mash.new(json)
|
139
|
+
end
|
140
|
+
|
141
|
+
def add_media_to_job_file(api_token, job_id, media_file)
|
142
|
+
assert_argument(media_file, "Media File")
|
143
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
144
|
+
|
145
|
+
json = WebUtils.get_json(@base_url + ADD_MEDIA_TO_JOB_PATH, 'POST', nil, query_hash, {"Content-Type" => "video/mp4"}, {"upload" => media_file})
|
146
|
+
return json["TaskId"]
|
147
|
+
end
|
148
|
+
|
149
|
+
def add_media_to_job_url(api_token, job_id, media_url)
|
150
|
+
return send_media_url(api_token, job_id, media_url, ADD_MEDIA_TO_JOB_PATH);
|
151
|
+
end
|
152
|
+
|
153
|
+
def add_media_to_job_embedded(api_token, job_id, media_url)
|
154
|
+
return send_media_url(api_token, job_id, media_url, ADD_EMBEDDED_MEDIA_TO_JOB_PATH);
|
155
|
+
end
|
156
|
+
|
157
|
+
def send_media_url(api_token, job_id, media_url, path)
|
158
|
+
assert_argument(media_url, "Media URL")
|
159
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
160
|
+
query_hash[:media_url] = URI.escape(media_url)
|
161
|
+
|
162
|
+
json = WebUtils.get_json(@base_url + path, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
163
|
+
return json["TaskId"]
|
164
|
+
end
|
165
|
+
private :send_media_url
|
166
|
+
|
167
|
+
def get_media(api_token, job_id)
|
168
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
169
|
+
|
170
|
+
json = WebUtils.get_json(@base_url + GET_MEDIA_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
171
|
+
|
172
|
+
return json["MediaUrl"]
|
173
|
+
end
|
174
|
+
|
175
|
+
def perform_transcription(api_token,
|
176
|
+
job_id,
|
177
|
+
fidelity,
|
178
|
+
priority,
|
179
|
+
callback_uri = nil,
|
180
|
+
turnaround_hours = nil,
|
181
|
+
target_language = nil,
|
182
|
+
options = nil)
|
183
|
+
assert_argument(fidelity, "Fidelity")
|
184
|
+
assert_argument(priority, "Priority")
|
185
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
186
|
+
query_hash[:transcription_fidelity] = fidelity
|
187
|
+
query_hash[:priority] = priority
|
188
|
+
query_hash[:callback_uri] = URI.escape(callback_uri) if !(callback_uri.nil?)
|
189
|
+
query_hash[:turnaround_hours] = turnaround_hours if !(turnaround_hours.nil?)
|
190
|
+
query_hash[:target_language] = target_language if !(target_language.nil?)
|
191
|
+
query_hash.merge(options.get_hash) if !(options.nil?)
|
192
|
+
|
193
|
+
json = WebUtils.get_json(@base_url + PERFORM_TRANSCRIPTION, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
194
|
+
return json["TaskId"]
|
195
|
+
end
|
196
|
+
|
197
|
+
def get_transcript(api_token, job_id, transcript_options = nil)
|
198
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
199
|
+
query_hash.merge(transcript_options.get_hash) if !(transcript_options.nil?)
|
200
|
+
|
201
|
+
# Return raw transcript text
|
202
|
+
return WebUtils.http_request(@base_url + GET_TRANSCRIPTION_PATH, 'GET', WebUtils::DOWNLOAD_TIMEOUT, query_hash)
|
203
|
+
end
|
204
|
+
|
205
|
+
def get_caption(api_token, job_id, caption_format, caption_options = nil)
|
206
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
207
|
+
query_hash[:caption_format] = caption_format
|
208
|
+
query_hash.merge(caption_options.get_hash) if !(caption_options.nil?)
|
209
|
+
|
210
|
+
response = WebUtils.http_request(@base_url + GET_CAPTION_PATH, 'GET', WebUtils::DOWNLOAD_TIMEOUT, query_hash)
|
211
|
+
if(!caption_options.nil? and caption_options[:build_url]) # If build_url is true
|
212
|
+
return JSON.parse(response)["CaptionUrl"]
|
213
|
+
else
|
214
|
+
return response # Else return raw caption text
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def get_element_list(api_token, job_id)
|
219
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
220
|
+
|
221
|
+
json = WebUtils.get_json(@base_url + GET_ELEMENT_LIST_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
222
|
+
# TODO: ElementList
|
223
|
+
return Mash.new(json)
|
224
|
+
end
|
225
|
+
|
226
|
+
def get_list_of_element_lists(api_token, job_id)
|
227
|
+
query_hash = init_job_req_dict(api_token, job_id)
|
228
|
+
|
229
|
+
response = WebUtils.http_request(@base_url + GET_LIST_OF_ELEMENT_LISTS_PATH, 'GET', WebUtils::BASIC_TIMEOUT, query_hash)
|
230
|
+
array = JSON.parse(response)
|
231
|
+
# TODO: List<ElementListVersion>
|
232
|
+
return array
|
233
|
+
end
|
234
|
+
|
235
|
+
### PRIVATE HELPER METHODS ###
|
236
|
+
private
|
237
|
+
|
238
|
+
def init_job_req_dict(api_token, job_id)
|
239
|
+
assert_argument(job_id, "Job ID")
|
240
|
+
init_access_req_dict(api_token).merge({job_id: job_id})
|
241
|
+
end
|
242
|
+
|
243
|
+
def init_access_req_dict(api_token)
|
244
|
+
assert_argument(api_token, "API Token")
|
245
|
+
init_version_dict().merge({api_token: api_token})
|
246
|
+
end
|
247
|
+
|
248
|
+
def init_version_dict()
|
249
|
+
{v: VERSION}
|
250
|
+
end
|
251
|
+
|
252
|
+
def assert_argument(arg, arg_name)
|
253
|
+
if (arg.nil?)
|
254
|
+
raise ArgumentError.new("Invalid argument - " + arg_name)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Cielo24
|
2
|
+
class TaskType < BasicObject
|
3
|
+
def self.JOB_CREATED; "JOB_CREATED"; end
|
4
|
+
def self.JOB_DELETED; "JOB_DELETED"; end
|
5
|
+
def self.JOB_ADD_MEDIA; "JOB_ADD_MEDIA"; end
|
6
|
+
def self.JOB_ADD_TRANSCRIPT; "JOB_ADD_TRANSCRIPT"; end
|
7
|
+
def self.JOB_PERFORM_TRANSCRIPTION; "JOB_PERFORM_TRANSCRIPTION"; end
|
8
|
+
def self.JOB_PERFORM_PREMIUM_SYNC; "JOB_PERFORM_PREMIUM_SYNC"; end
|
9
|
+
def self.JOB_REQUEST_TRANSCRIPT; "JOB_REQUEST_TRANSCRIPT"; end
|
10
|
+
def self.JOB_REQUEST_CAPTION; "JOB_REQUEST_CAPTION"; end
|
11
|
+
def self.JOB_REQUEST_ELEMENTLIST; "JOB_REQUEST_ELEMENTLIST"; end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ErrorType < BasicObject
|
15
|
+
def self.LOGIN_INVALID; "LOGIN_INVALID"; end
|
16
|
+
def self.ACCOUNT_EXISTS; "ACCOUNT_EXISTS"; end
|
17
|
+
def self.ACCOUNT_UNPRIVILEGED; "ACCOUNT_UNPRIVILEGED"; end
|
18
|
+
def self.BAD_API_TOKEN; "BAD_API_TOKEN"; end
|
19
|
+
def self.INVALID_QUERY; "INVALID_QUERY"; end
|
20
|
+
def self.INVALID_OPTION; "INVALID_OPTION"; end
|
21
|
+
def self.MISSING_PARAMETER; "MISSING_PARAMETER"; end
|
22
|
+
def self.INVALID_URL; "INVALID_URL"; end
|
23
|
+
def self.ITEM_NOT_FOUND; "ITEM_NOT_FOUND"; end
|
24
|
+
end
|
25
|
+
|
26
|
+
class JobStatus < BasicObject
|
27
|
+
def self.Authorizing; "SRT"; end
|
28
|
+
def self.Pending; "SRT"; end
|
29
|
+
def self.In_Process; "In Process"; end
|
30
|
+
def self.Complete; "Complete"; end
|
31
|
+
end
|
32
|
+
|
33
|
+
class TaskStatus < BasicObject
|
34
|
+
def self.COMPLETE; "COMPLETE"; end
|
35
|
+
def self.INPROGRESS; "INPROGRESS"; end
|
36
|
+
def self.ABORTED; "ABORTED"; end
|
37
|
+
def self.FAILED; "FAILED"; end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Priority < BasicObject
|
41
|
+
def self.ECONOMY; "ECONOMY"; end
|
42
|
+
def self.STANDARD; "STANDARD"; end
|
43
|
+
def self.PRIORITY; "PRIORITY"; end
|
44
|
+
def self.CRITICAL; "CRITICAL"; end
|
45
|
+
def self.all; "[ ECONOMY, STANDARD, PRIORITY, CRITICAL ]"; end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Fidelity < BasicObject
|
49
|
+
def self.MECHANICAL; "MECHANICAL"; end
|
50
|
+
def self.PREMIUM; "PREMIUM"; end
|
51
|
+
def self.PROFESSIONAL; "PROFESSIONAL"; end
|
52
|
+
def self.INTERIM_PROFESSIONAL; "INTERIM_PROFESSIONAL"; end
|
53
|
+
def self.FINAL; "FINAL"; end
|
54
|
+
def self.all; "[ MECHANICAL, PREMIUM, PROFESSIONAL, INTERIM_PROFESSIONAL, FINAL ]"; end
|
55
|
+
end
|
56
|
+
|
57
|
+
class CaptionFormat < BasicObject
|
58
|
+
def self.SRT; "SRT"; end
|
59
|
+
def self.SBV; "SBV"; end
|
60
|
+
def self.DFXP; "DFXP"; end
|
61
|
+
def self.QT; "QT"; end
|
62
|
+
def self.all; "[ SRT, SBV, DFXP, QT ]"; end
|
63
|
+
end
|
64
|
+
|
65
|
+
class TokenType < BasicObject
|
66
|
+
def self.word; "word"; end
|
67
|
+
def self.punctuation; "punctuation"; end
|
68
|
+
def self.sound; "sound"; end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Tag < BasicObject
|
72
|
+
def self.ENDS_SENTENCE; "ENDS_SENTENCE"; end
|
73
|
+
def self.UNKNOWN; "UNKNOWN"; end
|
74
|
+
def self.INAUDIBLE; "INAUDIBLE"; end
|
75
|
+
def self.CROSSTALK; "CROSSTALK"; end
|
76
|
+
def self.MUSIC; "MUSIC"; end
|
77
|
+
def self.NOISE; "NOISE"; end
|
78
|
+
def self.LAUGH; "LAUGH"; end
|
79
|
+
def self.COUGH; "COUGH"; end
|
80
|
+
def self.FOREIGN; "FOREIGN"; end
|
81
|
+
def self.GUESSED; "GUESSED"; end
|
82
|
+
def self.BLANK_AUDIO; "BLANK_AUDIO"; end
|
83
|
+
def self.APPLAUSE; "APPLAUSE"; end
|
84
|
+
def self.BLEEP; "BLEEP"; end
|
85
|
+
end
|
86
|
+
|
87
|
+
class SpeakerId < BasicObject
|
88
|
+
def self.no; "no"; end
|
89
|
+
def self.number; "number"; end
|
90
|
+
def self.name; "name"; end
|
91
|
+
end
|
92
|
+
|
93
|
+
class SpeakerGender < BasicObject
|
94
|
+
def self.UNKNOWN; "UNKNOWN"; end
|
95
|
+
def self.MALE; "MALE"; end
|
96
|
+
def self.FEMALE; "FEMALE"; end
|
97
|
+
end
|
98
|
+
|
99
|
+
class Case < BasicObject
|
100
|
+
def self.upper; "upper"; end
|
101
|
+
def self.lower; "lower"; end
|
102
|
+
def self.unchanged; ""; end
|
103
|
+
end
|
104
|
+
|
105
|
+
class LineEnding < BasicObject
|
106
|
+
def self.UNIX; "UNIX"; end
|
107
|
+
def self.WINDOWS; "WINDOWS"; end
|
108
|
+
def self.OSX; "OSX"; end
|
109
|
+
end
|
110
|
+
|
111
|
+
class CustomerApprovalSteps < BasicObject
|
112
|
+
def self.TRANSLATION; "TRANSLATION"; end
|
113
|
+
def self.RETURN; "RETURN"; end
|
114
|
+
end
|
115
|
+
|
116
|
+
class CustomerApprovalTools < BasicObject
|
117
|
+
def self.AMARA; "AMARA"; end
|
118
|
+
def self.CIELO24; "CIELO24"; end
|
119
|
+
end
|
120
|
+
|
121
|
+
class Language < BasicObject
|
122
|
+
def self.English; "en"; end
|
123
|
+
def self.French; "fr"; end
|
124
|
+
def self.Spanish; "es"; end
|
125
|
+
def self.German; "de"; end
|
126
|
+
def self.Mandarin_Chinese; "cmn"; end
|
127
|
+
def self.Portuguese; "pt"; end
|
128
|
+
def self.Japanese; "jp"; end
|
129
|
+
def self.Arabic; "ar"; end
|
130
|
+
def self.Korean; "ko"; end
|
131
|
+
def self.Traditional_Chinese; "zh"; end
|
132
|
+
def self.Hindi; "hi"; end
|
133
|
+
def self.Italian; "it"; end
|
134
|
+
def self.Russian; "ru"; end
|
135
|
+
def self.Turkish; "tr"; end
|
136
|
+
def self.Hebrew; "he"; end
|
137
|
+
def self.all; "[ en, fr, es, de, cmn, pt, jp, ar, ko, zh, hi, it, ru, tr, he ]"; end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
module Cielo24
|
2
|
+
class Options
|
3
|
+
def get_hash
|
4
|
+
hash = {}
|
5
|
+
self.instance_variables.each{ |var|
|
6
|
+
value = self.instance_variable_get(var)
|
7
|
+
if !value.nil?
|
8
|
+
hash[var.to_s.delete("@")] = self.instance_variable_get(var)
|
9
|
+
end
|
10
|
+
}
|
11
|
+
return hash
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_query
|
15
|
+
hash = get_hash
|
16
|
+
array = Array.new(hash.length)
|
17
|
+
counter = 0
|
18
|
+
hash.each do |key, value|
|
19
|
+
array[counter] = key + '=' + value.to_s
|
20
|
+
counter += 1
|
21
|
+
end
|
22
|
+
return array.join("&")
|
23
|
+
end
|
24
|
+
|
25
|
+
def populate_from_key_value_pair
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class CommonOptions < Options
|
31
|
+
|
32
|
+
attr_accessor :characters_per_caption_line
|
33
|
+
attr_accessor :elementlist_version
|
34
|
+
attr_accessor :emit_speaker_change_token_as
|
35
|
+
attr_accessor :mask_profanity
|
36
|
+
attr_accessor :remove_sounds_list
|
37
|
+
attr_accessor :remove_sound_references
|
38
|
+
attr_accessor :replace_slang
|
39
|
+
attr_accessor :sound_boundaries
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
@characters_per_caption_line = nil
|
43
|
+
@elementlist_version = nil
|
44
|
+
@emit_speaker_change_token_as = nil
|
45
|
+
@mask_profanity = nil
|
46
|
+
@remove_sounds_list = nil
|
47
|
+
@remove_sound_references = nil
|
48
|
+
@replace_slang = nil
|
49
|
+
@sound_boundaries = nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class TranscriptionOptions < CommonOptions
|
54
|
+
|
55
|
+
attr_accessor :create_paragraphs
|
56
|
+
attr_accessor :newlines_after_paragraph
|
57
|
+
attr_accessor :newlines_after_sentence
|
58
|
+
attr_accessor :timecode_every_paragraph
|
59
|
+
attr_accessor :timecode_format
|
60
|
+
attr_accessor :time_code_interval
|
61
|
+
attr_accessor :timecode_offset
|
62
|
+
|
63
|
+
def initialize
|
64
|
+
@create_paragraphs = nil
|
65
|
+
@newlines_after_paragraph = nil
|
66
|
+
@newlines_after_sentence = nil
|
67
|
+
@timecode_every_paragraph = nil
|
68
|
+
@timecode_format = nil
|
69
|
+
@time_code_interval = nil
|
70
|
+
@timecode_offset = nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class CaptionOptions < CommonOptions
|
75
|
+
|
76
|
+
attr_accessor :build_url
|
77
|
+
attr_accessor :caption_words_min
|
78
|
+
attr_accessor :caption_by_sentence
|
79
|
+
attr_accessor :dfxp_header
|
80
|
+
attr_accessor :disallow_dangling
|
81
|
+
attr_accessor :display_effects_speaker_as
|
82
|
+
attr_accessor :display_speaker_id
|
83
|
+
attr_accessor :force_case
|
84
|
+
attr_accessor :include_dfxp_metadata
|
85
|
+
attr_accessor :layout_target_caption_length_ms
|
86
|
+
attr_accessor :line_break_on_sentence
|
87
|
+
attr_accessor :line_ending_format
|
88
|
+
attr_accessor :lines_per_caption
|
89
|
+
attr_accessor :maximum_caption_duration
|
90
|
+
attr_accessor :merge_gap_interval
|
91
|
+
attr_accessor :minimum_caption_length_ms
|
92
|
+
attr_accessor :minimum_gap_between_captions_ms
|
93
|
+
attr_accessor :minimum_merge_gap_interval
|
94
|
+
attr_accessor :qt_seamless
|
95
|
+
attr_accessor :silence_max_ms
|
96
|
+
attr_accessor :single_speaker_per_caption
|
97
|
+
attr_accessor :sound_threshold
|
98
|
+
attr_accessor :sound_tokens_by_caption
|
99
|
+
attr_accessor :sound_tokens_by_line
|
100
|
+
attr_accessor :sound_tokens_by_caption_list
|
101
|
+
attr_accessor :sound_tokens_by_line_list
|
102
|
+
attr_accessor :speaker_on_new_line
|
103
|
+
attr_accessor :srt_format
|
104
|
+
attr_accessor :srt_print
|
105
|
+
attr_accessor :strip_square_brackets
|
106
|
+
attr_accessor :utf8_mark
|
107
|
+
|
108
|
+
def initialize
|
109
|
+
@build_url = nil
|
110
|
+
@caption_words_min = nil
|
111
|
+
@caption_by_sentence = nil
|
112
|
+
@dfxp_header = nil
|
113
|
+
@disallow_dangling = nil
|
114
|
+
@display_effects_speaker_as = nil
|
115
|
+
@display_speaker_id = nil
|
116
|
+
@force_case = nil
|
117
|
+
@include_dfxp_metadata = nil
|
118
|
+
@layout_target_caption_length_ms = nil
|
119
|
+
@line_break_on_sentence = nil
|
120
|
+
@line_ending_format = nil
|
121
|
+
@lines_per_caption = nil
|
122
|
+
@maximum_caption_duration = nil
|
123
|
+
@merge_gap_interval = nil
|
124
|
+
@minimum_caption_length_ms = nil
|
125
|
+
@minimum_gap_between_captions_ms = nil
|
126
|
+
@minimum_merge_gap_interval = nil
|
127
|
+
@qt_seamless = nil
|
128
|
+
@silence_max_ms = nil
|
129
|
+
@single_speaker_per_caption = nil
|
130
|
+
@sound_threshold = nil
|
131
|
+
@sound_tokens_by_caption = nil
|
132
|
+
@sound_tokens_by_line = nil
|
133
|
+
@sound_tokens_by_caption_list = nil
|
134
|
+
@sound_tokens_by_line_list = nil
|
135
|
+
@speaker_on_new_line = nil
|
136
|
+
@srt_format = nil
|
137
|
+
@srt_print = nil
|
138
|
+
@strip_square_brackets = nil
|
139
|
+
@utf8_mark = nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
class PerformTranscriptionOptions < Options
|
144
|
+
|
145
|
+
attr_accessor :customer_approval_steps
|
146
|
+
attr_accessor :customer_approval_tool
|
147
|
+
attr_accessor :custom_metadata
|
148
|
+
attr_accessor :notes
|
149
|
+
attr_accessor :return_iwp
|
150
|
+
attr_accessor :speaker_id
|
151
|
+
|
152
|
+
def initialize
|
153
|
+
@customer_approval_steps = nil
|
154
|
+
@customer_approval_tool = nil
|
155
|
+
@custom_metadata = nil
|
156
|
+
@notes = nil
|
157
|
+
@return_iwp = nil
|
158
|
+
@speaker_id = nil
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Cielo24
|
2
|
+
class WebUtils
|
3
|
+
|
4
|
+
require 'json'
|
5
|
+
require 'httpclient'
|
6
|
+
include JSON
|
7
|
+
|
8
|
+
VERIFY_MODE = nil
|
9
|
+
BASIC_TIMEOUT = 60
|
10
|
+
DOWNLOAD_TIMEOUT = 300
|
11
|
+
|
12
|
+
def self.get_json(uri, method, timeout, query=nil, headers=nil, body=nil)
|
13
|
+
response = http_request(uri, method, timeout, query, headers, body)
|
14
|
+
return JSON.parse(response)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.http_request(uri, method, timeout, query=nil, headers = nil, body = nil)
|
18
|
+
http_client = HTTPClient.new
|
19
|
+
http_client.cookie_manager = nil
|
20
|
+
# TODO: timeout
|
21
|
+
|
22
|
+
response = http_client.request(method, uri, query, body, headers, nil)
|
23
|
+
|
24
|
+
# Handle web errors
|
25
|
+
if response.status_code == 200 or response.status_code == 204
|
26
|
+
return response.body
|
27
|
+
else
|
28
|
+
json = JSON.parse(response.body)
|
29
|
+
raise WebError.new(json["ErrorType"], json["ErrorComment"])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class WebError < StandardError
|
35
|
+
attr_reader :type
|
36
|
+
def initialize(type, comment)
|
37
|
+
super comment
|
38
|
+
@type = type
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_s
|
42
|
+
return @type + " - " + super.to_s
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,126 +1,106 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cielo24
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Evgeny Chistyakov
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '1.6'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
26
|
+
version: '1.6'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
33
|
+
version: '10.0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
37
|
requirements:
|
51
|
-
- -
|
38
|
+
- - ~>
|
52
39
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
40
|
+
version: '10.0'
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
42
|
name: httpclient
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
44
|
requirements:
|
67
|
-
- -
|
45
|
+
- - '>='
|
68
46
|
- !ruby/object:Gem::Version
|
69
47
|
version: '0'
|
70
48
|
type: :runtime
|
71
49
|
prerelease: false
|
72
50
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
51
|
requirements:
|
75
|
-
- -
|
52
|
+
- - '>='
|
76
53
|
- !ruby/object:Gem::Version
|
77
54
|
version: '0'
|
78
55
|
- !ruby/object:Gem::Dependency
|
79
56
|
name: hashie
|
80
57
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
58
|
requirements:
|
83
|
-
- -
|
59
|
+
- - '>='
|
84
60
|
- !ruby/object:Gem::Version
|
85
61
|
version: '0'
|
86
62
|
type: :runtime
|
87
63
|
prerelease: false
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
65
|
requirements:
|
91
|
-
- -
|
66
|
+
- - '>='
|
92
67
|
- !ruby/object:Gem::Version
|
93
68
|
version: '0'
|
94
|
-
description:
|
69
|
+
description: This gem allows you to interact with the cielo24 public web API.
|
95
70
|
email:
|
96
71
|
- support@cielo24.com
|
97
72
|
executables: []
|
98
73
|
extensions: []
|
99
74
|
extra_rdoc_files: []
|
100
|
-
files:
|
101
|
-
|
75
|
+
files:
|
76
|
+
- lib/cielo24/actions.rb
|
77
|
+
- lib/cielo24/enums.rb
|
78
|
+
- lib/cielo24/options.rb
|
79
|
+
- lib/cielo24/version.rb
|
80
|
+
- lib/cielo24/web_utils.rb
|
81
|
+
- lib/cielo24.rb
|
82
|
+
homepage: http://cielo24.com
|
102
83
|
licenses:
|
103
84
|
- MIT
|
85
|
+
metadata: {}
|
104
86
|
post_install_message:
|
105
87
|
rdoc_options: []
|
106
88
|
require_paths:
|
107
89
|
- lib
|
108
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
91
|
requirements:
|
111
|
-
- -
|
92
|
+
- - '>='
|
112
93
|
- !ruby/object:Gem::Version
|
113
94
|
version: '0'
|
114
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
96
|
requirements:
|
117
|
-
- -
|
97
|
+
- - '>='
|
118
98
|
- !ruby/object:Gem::Version
|
119
99
|
version: '0'
|
120
100
|
requirements: []
|
121
101
|
rubyforge_project:
|
122
|
-
rubygems_version:
|
102
|
+
rubygems_version: 2.0.14
|
123
103
|
signing_key:
|
124
|
-
specification_version:
|
125
|
-
summary: Cielo24 API
|
104
|
+
specification_version: 4
|
105
|
+
summary: Cielo24 API gem.
|
126
106
|
test_files: []
|