Lingara Lingara مستندات رهنماها API کتابخانه‌ها اپلیکیشن‌ها ساختن اپلیکیشن وب
زبان: دری

جریان‌ها

این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم فرق داشته باشند، صفحهٔ انگلیسی درست است. صفحهٔ انگلیسی را بخوانید

چهار عملیات نتایج خود را به شکل رویدادهای فرستاده‌شده از سرور جریان می‌دهند: تولید لغات، فرستادن پیام به استاد، ساختن پلان درسی و دنبال کردن یک پلان درسی. هر کتابخانه جریان رویدادها را به نوع تکرارکننده خود همان زبان تبدیل می‌کند و هر رویداد را از پیش رمزگشایی‌شده به مقداری با نوع معین به شما می‌دهد.

یک جریان چطور ختم می‌شود

  • وقتی کار تمام شود. تکرار در آخرین رویداد جریان خودبه‌خود متوقف می‌شود. در پلان درسی، همان رویداد آخر نتیجه را با خود دارد، پس پیش از ختم حلقه آن را دریافت می‌کنید.
  • وقتی API خطایی گزارش بدهد. خطایی که داخل جریان برسد به شکل خطای API برگردانده می‌شود، از همان نوعی که پیش از جریان می‌رسد.
  • وقتی اتصال ناکام شود. جریانی که پیش از رویداد آخرش ختم شود، یا برای 120 ثانیه هیچ چیزی نفرستد، به شکل خطای انتقال برگردانده می‌شود.
  • وقتی خودتان متوقف کنید. فراخوانی را به طریقه معمول زبان خود لغو کنید، یا خواندن را متوقف کنید، و اتصال فوراً بسته می‌شود.

تبصره‌های زنده‌نگه‌داری و انواع رویدادی که کتابخانه هنوز نمی‌شناسد نادیده گرفته می‌شوند، پس یک API جدیدتر هیچ‌گاه کتابخانه قدیمی‌تر را از کار نمی‌اندازد.

هیچ‌گاه دوباره پخش نمی‌شود

جریانی که حتی یک رویداد تحویل داده باشد هیچ‌گاه از طرف کتابخانه دوباره امتحان نمی‌شود، چون تکرار آن ممکن است سهمیه شما را دو بار مصرف کند. اگر جریان یک پلان درسی بعد از شروع قطع شد، همان پلان را با streamLessonPlan و plan_id از اولین رویدادش دنبال کنید.

زبان نمونهٔ کود

TypeScript

const stream = client.generateVocabulary({ level: 2, source_lang: "en", target_lang: "zh", count: 8 });
for await (const ev of stream) {
  if (ev.event === "item") console.log(ev.data.word, ev.data.translation);
}

Rust

use lingara::models::{GenerateVocabularyEvent, VocabRequest};
use std::num::NonZeroU8;

let request = VocabRequest { level: 2, source_lang: "en".into(), target_lang: "zh".into(), count: NonZeroU8::new(8) };
let mut stream = client.generate_vocabulary(&request).await?;
while let Some(event) = stream.next().await {
    if let GenerateVocabularyEvent::Item(item) = event? {
        println!("{} {}", item.word, item.translation);
    }
}

Go

count := uint8(8)
s, err := client.GenerateVocabulary(ctx, lingara.VocabRequest{Level: 2, SourceLang: "en", TargetLang: "zh", Count: &count})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	if item, ok := ev.(lingara.GenerateVocabularyEventItem); ok {
		fmt.Println(item.Data.Word, item.Data.Translation)
	}
}

Java

import com.getlingara.client.model.GenerateVocabularyEvent;
import com.getlingara.client.model.VocabRequest;

VocabRequest request = new VocabRequest().level(2).sourceLang("en").targetLang("zh").count(8);
try (EventStream<GenerateVocabularyEvent> stream = client.generateVocabulary(request)) {
  for (GenerateVocabularyEvent event : stream) {
    if (event instanceof GenerateVocabularyEvent.Item item) {
      System.out.println(item.data().getWord() + " " + item.data().getTranslation());
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.GenerateVocabularyEvent
import com.getlingara.kotlin.model.VocabRequest

val request = VocabRequest(level = 2, sourceLang = "en", targetLang = "zh", count = 8)
// The request is sent here; collect the stream once, inside use {}.
client.generateVocabulary(request).use { stream ->
    stream.collect { event ->
        when (event) {
            is GenerateVocabularyEvent.Item -> println("${event.data.word} ${event.data.translation}")
            is GenerateVocabularyEvent.Started -> Unit
        }
    }
}

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
end

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";
    }
}

آنچه این صفحه دربر می‌گیرد