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

ما تغلّفه هذه الصفحة