Lingara Lingara Dokumentation Ratgeber API Bibliotheken Apps Erstellen Web-App
Sprache: Deutsch

Streams

Diese Seite ist aus dem Englischen übersetzt. Wenn die beiden voneinander abweichen, ist die englische Seite maßgeblich. Englische Seite lesen

Vier Operationen streamen ihre Ergebnisse als Server-Sent Events: Vokabeln generieren, eine Nachricht an den Tutor senden, einen Lektionsplan erstellen und einem Lektionsplan folgen. Jede Bibliothek macht aus dem Event-Stream die sprachtypische Art von Iterator und übergibt Ihnen jedes Event bereits als typisierten Wert dekodiert.

Wie ein Stream endet

  • Wenn die Arbeit erledigt ist. Die Iteration stoppt beim letzten Event des Streams von selbst. Bei einem Lektionsplan enthält dieses letzte Event das Ergebnis, sodass Sie es erhalten, bevor die Schleife endet.
  • Wenn die API einen Fehler meldet. Ein Fehler, der innerhalb des Streams ankommt, wird als API-Fehler ausgelöst – derselbe Typ wie bei einem Fehler, der davor ankommt.
  • Wenn die Verbindung abbricht. Ein Stream, der vor seinem letzten Event endet oder 120 Sekunden lang überhaupt nichts sendet, wird als Transportfehler ausgelöst.
  • Wenn Sie aufhören. Brechen Sie den Aufruf auf die in Ihrer Sprache übliche Weise ab oder hören Sie auf zu lesen, und die Verbindung wird umgehend geschlossen.

Keepalive-Kommentare und Event-Typen, die eine Bibliothek noch nicht kennt, werden übersprungen, sodass eine neuere API eine ältere Bibliothek nie kaputt macht.

Nie wiederholt

Ein Stream, der auch nur ein Event geliefert hat, wird von der Bibliothek nie wiederholt, denn eine Wiederholung könnte Ihr Kontingent doppelt verbrauchen. Bricht der Stream eines Lektionsplans ab, nachdem er begonnen hat, folgen Sie demselben Plan mit streamLessonPlan und der plan_id aus seinem ersten Event.

Sprache des Codebeispiels

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

Was diese Seite kapselt