API Dokumentasiya
Giriş
Voicen.com müştəriləri mətnin səsə çevrilməsi servisindən istifadə edilməsi üçün RESTful API ilə təmin edir.
Burada bütün ümumi istifadə üçün nəzərdə tutulan metodlar və metodlar tərəfindən qaytarlan obyektlər, səhvlər proqramçılar tərəfindən asanlıqla istifadə edilməsi üçün ətraflı şəkildə izah edilmişdir.
Baza URL
Voicen.com-un API-dan istifadə üçün baza URL aşağıdakı kimidir:
https://tts.voicen.com/api/v1/
API metodları üçün URL-lər baza URL-ə uyğundur.
Error`lar json formatında qayıdacaq.
İcazə tokeninin əldə edilməsi
Voicen.com API-larını istifadəsi üçün ilk öncə icazə tokenini əldə etmək lazımdır.
İcazə tokeni bir dəfə generasiya edilir və həmişə istifadə edilir.
İcazə tokenini əldə etmək üçün Voicen API səhifəsinə gedin.
Bütün API sorğularda icazə tokenini Authorization: Bearer HTTP başlığında göndərməlisiniz.
-H "Authorization: Token $VOICEN_ACCESS_TOKEN"
Mətnin göndərilməsi
Mətnin sintez üçün göndərilməsi nümunəsi:
Parameters
- Content-type
- Header is used to indicate the media type of the resource.
- text
- Sintez olunacaq mətn
- lang
- Göndərilən mətnin dili
- file
- Göndərilən faylın yolu
- voice_id
- String
Mümkün olan səs ID-ləri:- 325640 - Azərbaycanca, qadın, Aytac
- 325641 - Azərbaycanca, qadın, Aynur
- 325642 - Azərbaycanca, kişi, Ramin
- 325643 - Azərbaycanca, kişi, Elçin
- 325648 - Azərbaycanca, kişi, Kamil
- 325647 - Türkcə, qadın, Zeynep
- 325646 - Türkcə, kişi, Mesut
- 325644 - Türkcə, qadın, Sibel
- 325645 - Rusca, qadın, Anna
import requests
import json
headers = {
'Content-Type': 'application/json',
'Authorization': 'Token $VOICEN_ACCESS_TOKEN',
}
data = '{"text":"salam", "lang":"az", "voice_id": "325640"}'
response = requests.post('https://tts.voicen.com/api/v1/jobs/text/', headers=headers, data=data)
print(json.dumps(response.json(), indent=4, sort_keys=True))
import requests
import json
headers = {
'Authorization': 'Token $VOICEN_ACCESS_TOKEN',
}
files = {
'lang': (None, 'az'),
'voice_id': (None, '325640'),
'file': ('myfile.txt', open('myfile.txt', 'rb')),
}
response = requests.post('https://tts.voicen.com/api/v1/jobs/file/', headers=headers, files=files)
print(json.dumps(response.json(), indent=4, sort_keys=True))
$request = curl_init();
curl_setopt($request, CURLOPT_URL, 'https://tts.voicen.com/api/v1/jobs/text/');
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_POST, 1);
curl_setopt($request, CURLOPT_POSTFIELDS, "{\"text\":\"salam\", \"lang\":\"az\", \"voice_id\": \"325640\"}");
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Token $VOICEN_ACCESS_TOKEN';
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($request);
curl_close($request);
print_r($result);
$request = curl_init();
curl_setopt($request, CURLOPT_URL, 'https://tts.voicen.com/api/v1/jobs/file/');
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_POST, 1);
$headers = array();
$headers[] = 'Content-Type: multipart/form-data';
$headers[] = 'Authorization: Token $VOICEN_ACCESS_TOKEN';
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$cfile = new CURLFile('example.txt');
$data = array(
'file' => $cfile,
'lang' => 'az',
'voice_id' => '325640'
);
curl_setopt($request, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($request);
print_r($result);
curl_close($request);
use error_chain::error_chain;
use reqwest::header::{AUTHORIZATION, CONTENT_TYPE};
use std::io::Read;
error_chain! {
foreign_links {
Io(std::io::Error);
HttpRequest(reqwest::Error);
}
}
fn main() -> Result<()> {
let url = "https://tts.voicen.com/api/v1/jobs/text/";
let api_key = "$VOICEN_ACCESS_TOKEN";
let auth_token = format!("Token {}", api_key);
let data = r#"{"text":"salam", "lang":"az", "voice_id": "325640"}"#;
let client = reqwest::blocking::Client::new();
let mut res = client.post(url)
.header(AUTHORIZATION, auth_token)
.header(CONTENT_TYPE, "application/json")
.body(data)
.send()?;
let mut body = String::new();
res.read_to_string(&mut body)?;
println!("{}", body);
Ok(())
}
Status Codes
Code | Description |
---|---|
200 | Success |
400 | Bad request. Qayıdan jsonda "error"-da xəta ilə bağlı ətraflı məlumat qayıdır. |
401 | İcazəsiz sorğu. İcazə tokeni köhnədir və ya icazə tokeni etibarsızdır. https://voicen.com/en/user/api/ səhifəsində yeni token generasiya etməlisiniz. |
415 | Unsupported media type |
{
"data": {
"id": 1219,
"voice_id": 325640,
"language": "az",
"character_count": 568,
"status": "preparing",
"created": "2020-03-31T11:13:51.942419Z"
}
}
{
"error": {
"code": 400,
"message": "Error message here"
}
}
{
"error": {
"code": 401,
"message": "No valid API key provided."
}
}
Proseslərin siyahısını əldə etmək
Siz indiyə qədər yaratdığınız proseslərin siyahısını əldə edin.
Parameters
- limit
- siyahının maksimum uzunluğunu təyin edə bilərsiniz
- offset
- verilən proses ID-dən sonrakı prosesləri əldə edə bilərsiniz
$request = curl_init();
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://tts.voicen.com/api/v1/jobs/?limit=15&offset=0',
CURLOPT_HTTPHEADER => array(
'Authorization: Token $VOICEN_ACCESS_TOKEN'
)
]);
$result = curl_exec($request);
curl_close($request);
print_r($result);
use error_chain::error_chain;
use reqwest::header::AUTHORIZATION;
use std::io::Read;
error_chain! {
foreign_links {
Io(std::io::Error);
HttpRequest(reqwest::Error);
}
}
fn main() -> Result<()> {
let url = "https://tts.voicen.com/api/v1/jobs/?limit=10&offset=0";
let api_key = "$VOICEN_ACCESS_TOKEN";
let auth_token = format!("Token {}", api_key);
let client = reqwest::blocking::Client::new();
let mut res = client.get(url).header(AUTHORIZATION, auth_token).send()?;
let mut body = String::new();
res.read_to_string(&mut body)?;
println!("{}", body);
Ok(())
}
Status Codes
Code | Description |
---|---|
200 | Proseslərin siyahısı müvəffəqiyyətlə qaytarıldı |
400 | Səhv sorğu |
401 | İcazəsiz sorğu. İcazə tokeni köhnədir və ya icazə tokeni etibarsızdır. https://voicen.com/en/user/api/ səhifəsində yeni token generasiya etməlisiniz. |
{
"count": 125
"next": "https://tts.voicen.com/api/v1/jobs/?limit=5&offset=55",
"previous": "https://tts.voicen.com/api/v1/jobs/?limit=5&offset=45",
"results": [
{
"id": 1219,
"voice_id": 325640,
"language": "az",
"character_count": 1456,
"status": "preparing",
"created": "2020-03-31T11:13:51.942419Z",
},
...
]
}
{
"error": {
"code": 401,
"message": "No valid API key provided."
}
}
{
"error": {
"code": 400,
"message": "Error message here"
}
}
Sintezi əldə edin
Göndərdiyiniz mətnin sintezini əldə edə bilərsiniz
Only mp3 format is supported
import requests
import json
headers = {
'Authorization': 'Token $VOICEN_ACCESS_TOKEN',
}
response = requests.get('https://tts.voicen.com/api/v1/jobs/$JOB_ID/synthesize/', headers=headers)
if response.status_code == 200:
with open("path/to/destination/mysynthesize.mp3", "wb") as f:
f.write(response.content)
else:
print(json.dumps(response.json(), indent=4, sort_keys=True))
$request = curl_init();
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://tts.voicen.com/api/v1/jobs/$JOB_ID/synthesize/',
CURLOPT_HTTPHEADER => array(
'Authorization: Token $VOICEN_ACCESS_TOKEN'
)
]);
$result = curl_exec($request);
$status_code = curl_getinfo($request, CURLINFO_HTTP_CODE);
curl_close($request);
if($status_code == 200) {
file_put_contents("mysynthesize.mp3", $result);
} else {
print_r($result);
}
use error_chain::error_chain;
use reqwest::header::AUTHORIZATION;
use std::fs::File;
use reqwest::StatusCode;
error_chain! {
foreign_links {
Io(std::io::Error);
Reqwest(reqwest::Error);
}
}
fn main() -> Result<()> {
let url = "https://tts.voicen.com/api/v1/jobs/$JOB_ID/synthesize/";
let api_key = "$VOICEN_ACCESS_TOKEN";
let auth_token = format!("Token {}", api_key);
let client = reqwest::blocking::Client::new();
let mut response = client.get(url).header(AUTHORIZATION, auth_token).send()?;
let status = response.status();
if !(status == StatusCode::OK) {
error_chain::bail!("Unexpected server response: {}", status);
}
let mut file = File::create("test.mp3").expect("Unable to create file");
response.copy_to(&mut file)?;
Ok(())
}
Status Codes
Code | Description |
---|---|
200 | Sintez müvəffəqiyyətlə qaytarılmışdır. |
401 | İcazəsiz sorğu. İcazə tokeni köhnədir və ya icazə tokeni etibarsızdır. https://voicen.com/en/user/api/ səhifəsində yeni token generasiya etməlisiniz. |
404 | Sorğu etdiyiniz ID üçün proses tapılmadı. |
406 | Sintez statusu "ready" olmalıdır. |
Sintez müvəffəqiyyətlə qaytarılmışdır.
{
"error": {
"code": 401,
"message": "No valid API key provided."
}
}
{
"error": {
"code": 400,
"message": "Error message here"
}
}
{
"error": {
"code": 406,
"message": "Not acceptable",
"allowedStatuses" : "ready",
"currentStatus" : "processing",
}
}
ID-yə görə proses haqqında məlumat əldə etmək
use error_chain::error_chain;
use reqwest::header::AUTHORIZATION;
use std::io::Read;
error_chain! {
foreign_links {
Io(std::io::Error);
HttpRequest(reqwest::Error);
}
}
fn main() -> Result<()> {
let url = "https://tts.voicen.com/api/v1/jobs/$JOB_ID/";
let api_key = "$VOICEN_ACCESS_TOKEN";
let auth_token = format!("Token {}", api_key);
let client = reqwest::blocking::Client::new();
let mut response = client.get(url).header(AUTHORIZATION, auth_token).send()?;
let mut body = String::new();
response.read_to_string(&mut body)?;
println!("{}", body);
Ok(())
}
Status olaraq “waiting”, “preparing”, “processing”, “synthesizing”, “ready”, “failed” cavablarından biri qayıdır.
Status Codes
Code | Description |
---|---|
200 | Success |
401 | İcazəsiz sorğu. İcazə tokeni köhnədir və ya icazə tokeni etibarsızdır. https://voicen.com/en/user/api/ səhifəsində yeni token generasiya etməlisiniz. |
404 | Sorğu etdiyiniz ID üçün proses tapılmadı |
{
"data": {
"id": 1219,
"voice_id": 325640,
"language": "az",
"character_count": 568,
"status": "preparing",
"created": "2020-03-31T11:13:51.942419Z"
}
}
{
"error": {
"code": 401,
"message": "No valid API key provided."
}
}
{
"error": {
"code": 404,
"message": "ID not found."
}
}
Prosesin ID-yə görə silinməsi
Sintez prosesinin silinməsi.
Bu proseslə əlaqəli bütün verlənləri, sintez faylı daxil olmaqla silir.
Prosesin statusu “ready” və ya “failed” olduqda silə bilərsiniz.
$request = curl_init();
curl_setopt_array($request, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://tts.voicen.com/api/v1/jobs/$JOB_ID/',
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => array(
'Authorization: Token $VOICEN_ACCESS_TOKEN'
)
]);
$result = curl_exec($request);
curl_close($request);
print_r($result);
use error_chain::error_chain;
use reqwest::header::AUTHORIZATION;
use std::io::Read;
error_chain! {
foreign_links {
Io(std::io::Error);
HttpRequest(reqwest::Error);
}
}
fn main() -> Result<()> {
let url = "https://tts.voicen.com/api/v1/jobs/$JOB_ID/";
let api_key = "$VOICEN_ACCESS_TOKEN";
let auth_token = format!("Token {}", api_key);
let client = reqwest::blocking::Client::new();
let mut res = client.delete(url).header(AUTHORIZATION, auth_token).send()?;
let mut body = String::new();
res.read_to_string(&mut body)?;
println!("{}", body);
Ok(())
}
Status Codes
Code | Description |
---|---|
200 | Proses müvəffəqiyyətlə silindi. |
401 | İcazəsiz sorğu. İcazə tokeni köhnədir və ya icazə tokeni etibarsızdır. https://voicen.com/en/user/api/ səhifəsində yeni token generasiya etməlisiniz. |
404 | Sorğu etdiyiniz ID üçün proses tapılmadı |
406 | Prosesin cari statusu onu silməyə imkan vermir |
{
"data": {
"code": 200,
"deleted": True
}
}
{
"error": {
"code": 400,
"message": "Error message here"
}
}
{
"error": {
"code": 401,
"message": "No valid API key provided."
}
}
{
"error": {
"code": 404,
"message": "ID not found."
}
}
{
"error": {
"code": 406,
"message": "Not acceptable",
"allowedStatuses" : [ "ready", "failed" ],
"currentStatus" : "processing",
"deleted" : False,
}
}