Translation API je nekada bila jednostavna stvar

Pozdrav,

Nekada sam na ovakve taskove gubio max 30min, sada gubim već dva dana … što je na ovom svjetu pošlo krivo :rage:

Translation API je nekada bila jednostavna stvar. Napraviš Google API key, uzmeš link za poziv API-a i vojla …

nezz koji vrag je Googleu trebao da to zakomplicira do bola. Sad nešto postoji:

  • OAuth 2.0 pristupni token koji se generira po svakom useru
  • aplikacija da bi koristila translation API mora biti odobrena od Googlea
  • ili se moraju dodavati testni useri koji mogu koristiti API
    … ono WTFFFFFFFF?? Ne da mi develop cycle nije jasan, nego mi ono nije ni približno jasno koji je to vrag i što im je to trebalo. :confused:

Ako netko vidi smisla u novoj politici i kuži generalno slijed procesa kako se to izvodi, bit ću zahvalan na nekim smjernicama.

Ja sam se za sada okrenuo alternativama i tu se nudi Microsoft Translator API koji nudi mjesečno 2 000 000 karaktera besplatno, ima suport za prevođenje dokumenata i HTML-a i generalno to zvuči ok.
Microsoft mi inače nije drag i nešto user friendly … ali pored ovakvog nastupa Googla??? :confused: :confused: … i Microsoft postaje opcija.

I napravim sve fino na Microsoft Azureu vođen umjetnom inteligencijom:

1. Idite na stranicu za registraciju za Azure: https://azure.microsoft.com/en-us/free/cognitive-services/
2. Kliknite na gumb "Start free" i prijavite se sa svojim Microsoft računom ili napravite novi.
3. Slijedite upute za stvaranje novog resursa. Odaberite "Cognitive Services" iz kategorija i odaberite "Translator" kao uslugu koju želite koristiti. Kliknite na gumb "Create".
4. U prozoru koji se otvori, unesite naziv resursa, odaberite pretplatu, grupu resursa i regiju. Provjerite uvjete korištenja, a zatim kliknite na gumb "Create".
5. Nakon što se resurs kreira, otvorite ga. Na desnoj strani ćete vidjeti karticu "Keys and Endpoint". Otvorite je.
6. Generirajte ključ pristupa klikom na gumb "Generate Key". Zapišite taj ključ jer će vam biti potreban za pozivanje API-ja.

I dođem do zadnje faze da generiram ključeve i naoko imam sve, osim što mi njihov API ne radi i uvijek baci grešku:

{"error":{"code":401000,"message":"The request is not authorized because credentials are missing or invalid."}}

Code koji koristim bi morao biti točan, em mi ga je AI sugerirao, em ga mogu generirati u Microsoft Azure konzoli…

SecretKey i Endpoint link teško da mogu fulati kada su mi nacrtani u Azure konzoli.

Ključevi bi također morali biti aktivni, jer u Azure konsoli mogu to live probati gdje jasno piše da sve te probe idu na moj račun:

This demo runs against your resource and will incur usage against your account

…pa nekom logikom ako ključevi nisu aktivni iz bilo kojeg razloga, ni taj live demo nebi valjda radio.

I jednostano ne znam što mi je ostalo za probati?
Jel ima netko ikakvu ideju do čega bi još moglo biti?

Code koji koristim:
S time da nemam pojma što je ovaj com_create_guid(), neki primjeri to uključuju, neki ne. Probao sam naravno sa time i bez toga i zilijun drugih kombinacija…

I naravno $key nisu zvjezdice u mom code-u, xd.

function com_create_guid() {

  return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
      mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
      mt_rand( 0, 0xffff ),
      mt_rand( 0, 0x0fff ) | 0x4000,
      mt_rand( 0, 0x3fff ) | 0x8000,
      mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
  );

}

function translateByAzure(){


	$key = '***'; 			// Vaš pretplatnički ključ
	$endpoint = 'https://api.cognitive.microsofttranslator.com'; 	// Endpoint za Microsoft Translator API


	$path = '/translate';
	$constructed_url = $endpoint . $path;

	$params = array(
	    'api-version' => '3.0',
	    'from' => 'en',
	    'to' => array('fr', 'zu')
	);

	$headers = array(
	    'Ocp-Apim-Subscription-Key' => $key,
	    'Content-type' => 'application/json',
	    'X-ClientTraceId' => com_create_guid(),
	);

	$body = array(
	    array('text' => 'I would really like to drive your car around the block a few times!')
	);

	$curl = curl_init();

	curl_setopt_array($curl, array(
	    CURLOPT_URL => $constructed_url . "?" . http_build_query($params),
	    CURLOPT_RETURNTRANSFER => true,
	    CURLOPT_POST => true,
	    CURLOPT_POSTFIELDS => json_encode($body),
	    CURLOPT_HTTPHEADER => $headers
	));

	$response = curl_exec($curl);

	curl_close($curl);

	return $response;

}

Ovdje na stackoverflow netko ima problem isti kao ja i on ga je riješio dodavanjem u header
'Ocp-Apim-Subscription-Region' : 'westeurope',

Ja na resource-u imam isto definiranu regiju “West Europe” i to sam već izvrtio sve kombinacije sa dodavanjem toga polja u header requesta, ali meni očito ne pomaže.

Osim toga, napravio sam novi Microsoft account i Microsoft Azure account i odabrao plaćenu verziju u startu (preskočio trial), da nebi slučajno u tom grmu ležao zec …ali ne pomaže ni to.

Stvarno nemam pojma kako se maknuti sa mrtve točke, jbmu…

Ufff…me namuči, a caka je bila da ovo nije ispravna definicija headera:

Nego je trebalo:

  $headers = array(
      'Ocp-Apim-Subscription-Key: '.$key,
      'Content-type: application/json',
      'X-ClientTraceId: '.com_create_guid(),
  );