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

	curl  --header "Content-Type: application/json" \
		  --header "Authorization: Token $VOICEN_ACCESS_TOKEN" \
		  --request POST \
		  --data '{"text":"salam", "lang":"az", "voice_id": "325640"}' \
		  https://tts.voicen.com/api/v1/jobs/text/

					

	curl  --header "Content-type: multipart/form-data" \
		  --header "Authorization: Token $VOICEN_ACCESS_TOKEN" \
		  --request POST \
		  -F lang=az -F voice_id=325640 \
		  -F file=@path/to/myfile.txt \
	       https://tts.voicen.com/api/v1/jobs/file/

					

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
curl -X GET "https://tts.voicen.com/api/v1/jobs/?limit=15&offset=0" -H "Authorization: Token $VOICEN_ACCESS_TOKEN"
					

import requests
import json

headers = {
	'Authorization': 'Token $VOICEN_ACCESS_TOKEN',
}

response = requests.get('https://tts.voicen.com/api/v1/jobs/?limit=10&offset=0', headers=headers)

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/?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

curl --fail -X GET https://tts.voicen.com/api/v1/jobs/$JOB_ID/synthesize/ -H "Authorization: Token $VOICEN_ACCESS_TOKEN" --output mysynthesize.mp3
				

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

curl -X GET https://tts.voicen.com/api/v1/jobs/$JOB_ID/ -H "Authorization: Token $VOICEN_ACCESS_TOKEN"
				

import requests
import json

headers = {
	'Authorization': 'Token $VOICEN_ACCESS_TOKEN',
}

response = requests.get('https://tts.voicen.com/api/v1/jobs/$JOB_ID', headers=headers)

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/',
	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 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.

curl -X DELETE https://tts.voicen.com/api/v1/jobs/$JOB_ID/ -H "Authorization: Token $VOICEN_ACCESS_TOKEN"
				

import requests
import json

headers = {
	'Authorization': 'Token $VOICEN_ACCESS_TOKEN',
}

response = requests.delete('https://tts.voicen.com/api/v1/jobs/$JOB_ID/', headers=headers)

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/',
	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,
	}
}