Ruby
این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم فرق داشته باشند، صفحهٔ انگلیسی درست است. صفحهٔ انگلیسی را بخوانید
کتابخانه Ruby همان gem با نام lingara در RubyGems است. به Ruby 3.3 یا بالاتر ضرورت دارد و از Net::HTTP در کتابخانه معیاری استفاده میکند، بدون هیچ gem دیگر.
در عمل چطور است
- فراخوانیها همگام هستند. یک کلاینت را میتوان میان رشتهها شریک ساخت، و بعد از
forkهم درست کار میکند. - یک بلاک به فراخوانی جریانی بدهید تا هر رویداد به آن سپرده شود. بدون بلاک، به جای آن یک جریان
Enumerableمیگیرید که تنبل است: درخواست در اولینeachیاnextفرستاده میشود. جریانی که باnextخوانده شود به یکcloseصریح ضرورت دارد. - رویدادها را با
caseوinتطبیق بدهید. - برای توقف زودهنگام یک جریان، با
breakاز بلاک بیرون شوید، یاcloseرا صدا بزنید. - خطاها از
Lingara::Errorمیراث میبرند.retry_afterتعدادی ثانیه است، یا وقتی API مدت انتظاری نگفته باشدnil. - کلاینت را با آرگومانهای کلیدی به
Lingara::Client.newبسازید. گزینههای Net::HTTP درnet_http_optionsجای میگیرند؛ مهلت خواندن آن همان مهلت بیکاری جریان هم است.
نمونههای پایین gem را نصب میکنند، یک کلاینت میسازند، لستی از لغات را جریانی دریافت میکنند و یک خطا را رسیدگی میکنند.
Ruby
gem install lingara -v 0.1.0-alpha.6Ruby
require "lingara"
client = Lingara::Client.new(client_id: client_id, client_secret: client_secret)Ruby
client.generate_vocabulary(level: 2, source_lang: "en", target_lang: "zh", count: 8) do |event|
case event
in Lingara::GenerateVocabularyEventItem => item then puts "#{item.data.word}: #{item.data.translation}"
else nil
end
endRuby
begin
client.get_usage
rescue Lingara::ApiError => e
# A refusal from the API: status, code (stable) and message (localised).
puts "#{e.status} #{e.code}: #{e.message}"
puts "retry after #{e.retry_after}s" if e.retry_after
rescue Lingara::OAuthError => e
# The token endpoint refused the credentials or the scopes.
puts "#{e.status} #{e.error}: #{e.description}"
rescue Lingara::MaintenanceError => e
puts "under maintenance"
puts "retry after #{e.retry_after}s" if e.retry_after
rescue Lingara::TransportError => e
# No usable answer: :connect, :tls, :reset, :timeout, and so on.
puts "transport: #{e.kind}"
end