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