PHP
Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés
La biblioteca de PHP es spinningcatstudios/lingara en Packagist. Necesita PHP 8.2 o posterior y se comunica por HTTP mediante PSR-18, así que funciona con Symfony HttpClient, Guzzle o un cliente propio.
Cómo se usa
- Las llamadas son síncronas. La única forma de cancelar es dejar de leer: sal del
foreach, o llama aclose()sobre el flujo. - Un flujo se lee con
foreach, una sola vez. Distingue cada evento coninstanceof. - Los errores implementan
Lingara\Exception\LingaraException. En un error de API,errorCode()es el código estable ygetCode()es el estado HTTP;retryAfter()es un número de segundos, onull. - Elige la pila HTTP con el argumento
http. Con Guzzle, los flujos necesitanallow_url_fopenactivado. Con un cliente PSR-18 propio, el streaming y los tiempos de espera corren de tu cuenta. - Con PHP-FPM cada worker arranca vacío, así que dale al cliente un
tokenCachePSR-16. Sin él, cada worker intercambia su propio token, y el límite por hora del endpoint de tokens lo comparten todos.
Los ejemplos de abajo instalan el paquete, crean un cliente, reciben en flujo una lista de vocabulario y gestionan un error.
PHP
composer require spinningcatstudios/lingara:0.1.0-alpha.6PHP
use Lingara\Client;
$client = new Client(clientId: $clientId, clientSecret: $clientSecret);PHP
use Lingara\Model\VocabRequest;
use Lingara\Stream\GenerateVocabularyEvent;
$request = new VocabRequest(['level' => 2, 'source_lang' => 'en', 'target_lang' => 'zh', 'count' => 8]);
foreach ($client->generateVocabulary($request) as $event) {
if ($event instanceof GenerateVocabularyEvent\Item) {
echo $event->data->getWord(), ': ', $event->data->getTranslation(), "\n";
}
}PHP
use Lingara\Exception\ApiException;
use Lingara\Exception\LingaraException;
use Lingara\Exception\MaintenanceException;
use Lingara\Exception\OAuthException;
use Lingara\Exception\TransportException;
try {
$client->getUsage();
} catch (LingaraException $e) {
if ($e instanceof ApiException) {
// A refusal from the API: status, errorCode (stable) and message (localised).
echo $e->status(), ' ', $e->errorCode(), ': ', $e->getMessage(), "\n";
echo 'retry after: ', $e->retryAfter() ?? 'not given', "\n";
} elseif ($e instanceof OAuthException) {
// The token endpoint refused the credentials or the scopes.
echo $e->status(), ' ', $e->error(), ': ', $e->description(), "\n";
} elseif ($e instanceof MaintenanceException) {
echo 'under maintenance; retry after: ', $e->retryAfter() ?? 'not given', "\n";
} elseif ($e instanceof TransportException) {
// No usable answer: connect, tls, reset, timeout, and so on.
echo 'transport: ', $e->kind()->value, "\n";
}
}