富源語音轉寫是異步任務的方式展開,一個是創建任務,一個是獲得任務結果。但在訪問這兩個接口前需要獲得授權 `access_token` ,所以共有三個接口。
#
## 1、獲得授權access_token
訪問這個接口需要提供`appid`和`secret`,這兩者需要到富源平臺注冊應用,然后在應用的右側獲得。
這個`access_token`的有效時間為兩個小時,請注意管理避免過期。
#
~~~[api:notDebug]
get:/v1/token
*appid=a44r4aMbO7BZ1NoW#申請的appid
*secret=a4474wRq9BwujRV7hM4SGH0QMyrEJF5J#申請的appsecret
*grant_type=client_credential#類型
<<<
success
{
"accessToken": "a447bdDAUeKORvmt",
"expires": 7200
}
<<<
403
{
"status": 403,
"error": "SecretIsInvalid",
"message": "無效的 secret"
}
~~~
#
##### C#訪問示例代碼:
~~~CSharp
var client = new RestClient("http://gateway.api.yun2win.com/v1/token?grant_type=client_credential&appid=a44r4aMbO7BZ1NoW&secret=a4474wRq9BwujRV7hM4SGH0QMyrEJF5J");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AlwaysMultipartFormData = true;
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
~~~
#
##### Java訪問示例代碼:
~~~ java
OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder()
.url("http://gateway.api.yun2win.com/v1/token?grant_type=client_credential&appid=a44r4aMbO7BZ1NoW&secret=a4474wRq9BwujRV7hM4SGH0QMyrEJF5J")
.method("GET", null)
.build();
Response response = client.newCall(request).execute();
~~~
#
#### Nodejs訪問示例代碼:
~~~javascript
var unirest = require('unirest');
var req = unirest('GET', 'http://gateway.api.yun2win.com/v1/token?grant_type=client_credential&appid=a44r4aMbO7BZ1NoW&secret=a4474wRq9BwujRV7hM4SGH0QMyrEJF5J')
.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.raw_body);
});
~~~
#
## 2、創建語音轉寫任務
上傳已錄制好的音頻(暫只支持mp3,不能超過10M),生成語音轉寫任務。任務創建成功,自動會加入轉寫隊列。
#
~~~[api:notDebug]
post:/api/lasr/long/create
*file:aduio=c:/a.mp3#已錄制好的音頻
<<<
success
{
"taskId": "a45D16UhKJ4xeSSO",
"duration": 3,
"status": "處理中"
}
<<<
401
錯誤一:
{
"status": 401,
"error": "AccessTokenNoExist",
"message": "必須有 accessToken"
}
錯誤二:
{
"status": 401,
"error": "AccessTokenIsInvalid",
"message": "無效的?accessToken"
}
錯誤三:
{
"status": 401,
"error": "AccessTokenHasExpired",
"message": "accessToken 已過期"
}
<<<
403
錯誤一:
{
"status": 403,
"error": "SecretIsInvalid",
"message": "無效的 secret"
}
錯誤二:
{
"status": 403,
"error": "SecretHasDisabled",
"message": "secret 已被禁用"
}
錯誤三:
{
"status": 403,
"error": "SecretError",
"message": "secret 狀態異常"
}
錯誤四:
{
"status": 403,
"error": "LimitExceeded",
"message": "已超出用量限制"
}
<<<
500
{
"error":"Params_Audio_Missing",
"message:"請補充語音文件audio欄位(mp3)"
}
{
"error":"Audio_Len_Too_Short",
"message:"音頻文件太小,長度不能少于1秒"
}
~~~
#
##### C#訪問示例代碼:
~~~CSharp
var client = new RestClient("http://gateway.api.yun2win.com/api/lasr/long/create");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer a447bdDAUeKORvmt"); // 這里的a447bdDAUeKORvmt就是接口1取得的access_token
request.AddFile("audio", "/Users/test/Desktop/zv1qh-yfbgq.mp3");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
~~~
#
##### Java訪問示例代碼:
~~~ java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("audio","zv1qh-yfbgq.mp3",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("/Users/test/Desktop/zv1qh-yfbgq.mp3")))
.build();
Request request = new Request.Builder()
.url("http://gateway.api.yun2win.com/api/lasr/long/create")
.method("POST", body)
.addHeader("Authorization", "Bearer a447bdDAUeKORvmt") // 這里的a447bdDAUeKORvmt就是接口1取得的access_token
.build();
Response response = client.newCall(request).execute();
~~~
#
#### Nodejs訪問示例代碼
~~~javascript
var unirest = require('unirest');
var req = unirest('POST', 'http://gateway.api.yun2win.com/api/lasr/long/create')
.headers({
'Authorization': 'Bearer a447bdDAUeKORvmt' // 這里的a447bdDAUeKORvmt就是接口1取得的access_token
})
.attach('file', '/Users/test/Desktop/zv1qh-yfbgq.mp3')
.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.raw_body);
});
~~~
#
## 3、獲得語音轉寫任務的結果
從接口獲得了`taskId`,要獲得轉寫結果需要訪問下面接口,建議可以不定期請求,請求間隔時間建議請參考最佳實踐。
注意taskId是直接寫在訪問接口地址中,而不是寫在query里。
#
~~~[api:notDebug]
get:/api/lasr/long/:taskId/result
*taskId=a45D16UhKJ4xeSSO#任務Id
<<<
success
{
"status": "已完成",
"result": [
{
"begin": "780", // 此段的開始時間,單位毫秒
"end": "2770", // 此段的結束時間,單位毫秒
"text": "這是做一個測試。" // 此段識別的文字
}
]
}
{
"status": "處理中"
}
<<<
401
錯誤一:
{
"status": 401,
"error": "AccessTokenNoExist",
"message": "必須有 accessToken"
}
錯誤二:
{
"status": 401,
"error": "AccessTokenIsInvalid",
"message": "無效的?accessToken"
}
錯誤三:
{
"status": 401,
"error": "AccessTokenHasExpired",
"message": "accessToken 已過期"
}
<<<
403
錯誤一:
{
"status": 403,
"error": "SecretIsInvalid",
"message": "無效的 secret"
}
錯誤二:
{
"status": 403,
"error": "SecretHasDisabled",
"message": "secret 已被禁用"
}
錯誤三:
{
"status": 403,
"error": "SecretError",
"message": "secret 狀態異常"
}
錯誤四:
{
"status": 403,
"error": "LimitExceeded",
"message": "已超出用量限制"
}
<<<
500
{
"error":"Asr_Task_Not_Exist",
"message:"語音轉換任務不存在,請檢查taskId是否正確"
}
{
"error":"Asr_Task_No_Right",
"message:"沒有權限訪問語音轉換任務"
}
~~~
#
##### C#訪問示例代碼:
~~~CSharp
var client = new RestClient("http://gateway.api.yun2win.com/api/lasr/long/a45D16UhKJ4xeSSO/result");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer a447bdDAUeKORvmt"); // 這里的a447bdDAUeKORvmt就是接口1取得的access_token
request.AlwaysMultipartFormData = true;
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
~~~
#
##### Java訪問示例代碼:
~~~ java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("http://gateway.api.yun2win.com/api/lasr/long/a45D16UhKJ4xeSSO/result")
.method("GET", null)
.addHeader("Authorization", "Bearer a447bdDAUeKORvmt") // 這里的a447bdDAUeKORvmt就是接口1取得的access_token
.build();
Response response = client.newCall(request).execute();
~~~
#
#### Nodejs訪問示例代碼
~~~javascript
var unirest = require('unirest');
var req = unirest('GET', 'http://gateway.api.yun2win.com/api/lasr/long/a45D16UhKJ4xeSSO/result')
.headers({
'Authorization': 'Bearer a447bdDAUeKORvmt' // 這里的a447bdDAUeKORvmt就是接口1取得的access_token
})
.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.raw_body);
});
~~~