Lingara Lingara Ohjeet Oppaat API Kirjastot Sovellukset Rakenna Verkkosovellus
Kieli: Suomi

Virrat

Tämä sivu on käännetty englannista. Jos ne eroavat toisistaan, englanninkielinen sivu on oikea. Lue englanninkielinen sivu

Neljä operaatiota virtauttaa tuloksensa server-sent events -tapahtumina: sanaston generointi, viestin lähettäminen tutorille, tuntisuunnitelman luominen ja sen seuraaminen. Jokainen kirjasto muuttaa tapahtumavirran kielen omaksi iteraattorityypiksi ja antaa sinulle jokaisen tapahtuman valmiiksi dekoodattuna tyypitetyksi arvoksi.

Miten virta päättyy

  • Kun työ on valmis. Iterointi pysähtyy itsestään virran viimeiseen tapahtumaan. Tuntisuunnitelmassa tuo viimeinen tapahtuma sisältää tuloksen, joten saat sen ennen kuin silmukka päättyy.
  • Kun API ilmoittaa virheestä. Virran sisällä saapuva virhe nostetaan API-virheenä, samaa tyyppiä kuin ennen virtaa saapuva virhe.
  • Kun yhteys katkeaa. Virta, joka päättyy ennen viimeistä tapahtumaansa tai joka ei lähetä mitään 120 sekuntiin, nostetaan siirtovirheenä.
  • Kun lopetat itse. Peruuta kutsu kielesi tavalliseen tapaan tai lopeta lukeminen, niin yhteys sulkeutuu viipymättä.

Keepalive-kommentit ja tapahtumatyypit, joita kirjasto ei vielä tunne, ohitetaan, joten uudempi API ei koskaan riko vanhempaa kirjastoa.

Ei koskaan toisteta

Kirjasto ei koskaan yritä uudelleen virtaa, joka on toimittanut edes yhden tapahtuman, koska toistaminen voisi kuluttaa kiintiösi kahdesti. Jos tuntisuunnitelman virta katkeaa sen alettua, seuraa samaa suunnitelmaa streamLessonPlan-operaatiolla ja sen ensimmäisen tapahtuman plan_id-arvolla.

Koodiesimerkin kieli

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

Mitä tämä sivu kääri