PHP
این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم فرق داشته باشند، صفحهٔ انگلیسی درست است. صفحهٔ انگلیسی را بخوانید
کتابخانه PHP همان spinningcatstudios/lingara در Packagist است. به PHP 8.2 یا بالاتر ضرورت دارد و ارتباط HTTP را از طریق PSR-18 برقرار میکند، پس با Symfony HttpClient، Guzzle یا کلاینتی از خودتان کار میکند.
در عمل چطور است
- فراخوانیها همگام هستند. تنها راه لغو، توقف خواندن است: از
foreachبیرون شوید، یاclose()را روی جریان صدا بزنید. - جریان با
foreachو تنها یک بار خوانده میشود. هر رویداد را باinstanceofتطبیق بدهید. - خطاها
Lingara\Exception\LingaraExceptionرا پیاده میکنند. در خطای API،errorCode()کد ثابت است وgetCode()وضعیت HTTP؛retryAfter()تعدادی ثانیه است، یاnull. - پشته HTTP را با آرگومان
httpانتخاب کنید. با Guzzle، جریانها ضرورت دارند کهallow_url_fopenفعال باشد. با کلاینت PSR-18 خودتان، تنظیم جریاندهی و مهلتها به دوش شماست. - در PHP-FPM هر کارگر خالی شروع میشود، پس به کلاینت یک
tokenCacheاز نوع PSR-16 بدهید. بدون آن، هر کارگر توکن خودش را تبادله میکند، و حد ساعتی نقطه پایانی توکن میان همه آنها مشترک است.
نمونههای پایین بسته را نصب میکنند، یک کلاینت میسازند، لستی از لغات را جریانی دریافت میکنند و یک خطا را رسیدگی میکنند.
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";
}
}