Der Sync-Client (Olostep) bietet eine blockierende Schnittstelle, die perfekt für Skripte und einfache Anwendungsfälle ist.
from olostep import Olostep# Übergeben Sie den API-Schlüssel entweder über den 'api_key'-Parameter oder# durch Setzen der Umgebungsvariable OLOSTEP_API_KEY# Der Sync-Client verwaltet Ressourcen automatisch# Kein explizites Schließen erforderlich - Ressourcen werden nach jeder Operation bereinigtclient = Olostep(api_key="YOUR_REAL_KEY")scrape_result = client.scrapes.create(url_to_scrape="https://example.com")
from olostep import Olostepclient = Olostep(api_key="your-api-key")# Alle Links von einer Website extrahierenmaps = client.maps.create(url="https://example.com")# Alle entdeckten URLs abrufenurls = []for url in maps.urls(): urls.append(url) if len(urls) >= 10: # Limit für Demo breakprint(f"Gefundene {len(urls)} URLs")
from olostep import Olostepclient = Olostep(api_key="your-api-key")# Antworten von Webseiten mit KI erhaltenanswer = client.answers.create( task="What is the main topic of https://example.com?")print(f"Antwort: {answer.answer}")
Der Async-Client (AsyncOlostep) ist der empfohlene Client für Hochleistungsanwendungen, Backend-Dienste und wenn Sie viele gleichzeitige Anfragen bearbeiten müssen.
from olostep import AsyncOlostep# Übergeben Sie den API-Schlüssel entweder über den 'api_key'-Parameter oder# durch Setzen der Umgebungsvariable OLOSTEP_API_KEY# RESSOURCENVERWALTUNG# ===================# Das SDK unterstützt zwei Nutzungsmuster für die Ressourcenverwaltung:# 1. Kontextmanager (Empfohlen für einmalige Nutzung):# Handhabt die Ressourcenbereinigung automatischasync with AsyncOlostep(api_key="YOUR_REAL_KEY") as client: scrape_result = await client.scrapes.create(url_to_scrape="https://example.com")# Transport wird hier automatisch geschlossen# 2. Explizites Schließen (Für langlebige Dienste):# Erfordert manuelle Ressourcenbereinigungclient = AsyncOlostep(api_key="YOUR_REAL_KEY")try: scrape_result = await client.scrapes.create(url_to_scrape="https://example.com")finally: await client.close() # Transport manuell schließen
import asynciofrom olostep import AsyncOlostepasync def main(): async with AsyncOlostep(api_key="your-api-key") as client: # Alle Links von einer Website extrahieren maps = await client.maps.create(url="https://example.com") # Alle entdeckten URLs abrufen urls = [] async for url in maps.urls(): urls.append(url) if len(urls) >= 10: # Limit für Demo break print(f"Gefundene {len(urls)} URLs")asyncio.run(main())
import asynciofrom olostep import AsyncOlostepasync def main(): async with AsyncOlostep(api_key="your-api-key") as client: # Antworten von Webseiten mit KI erhalten answer = await client.answers.create( task="What is the main topic of https://example.com?" ) print(f"Antwort: {answer.answer}")asyncio.run(main())
Fangen Sie alle SDK-Fehler mit der Basisklasse der Ausnahmen ab:
from olostep import Olostep, Olostep_BaseErrorclient = Olostep(api_key="your-api-key")try: result = client.scrapes.create(url_to_scrape="https://example.com")except Olostep_BaseError as e: print(f"Ein Fehler ist aufgetreten: {type(e).__name__}") print(f"Fehlermeldung: {e}")
Für detaillierte Informationen zur Fehlerbehandlung, einschließlich der vollständigen Ausnahmehierarchie und granularer Fehlerbehandlungsoptionen, siehe Detaillierte Fehlerbehandlung.
Das SDK wiederholt automatisch bei vorübergehenden Fehlern (Netzwerkprobleme, temporäre Serverprobleme) basierend auf der RetryStrategy-Konfiguration. Sie können das Wiederholungsverhalten anpassen, indem Sie eine RetryStrategy-Instanz beim Erstellen des Clients übergeben:
from olostep import Olostepclient = Olostep(api_key="your-api-key")# Zuerst eine Antwort erstellencreated_answer = client.answers.create( task="What is the main topic of https://example.com?")# Dann mit der ID abrufenanswer = client.answers.get(answer_id=created_answer.id)print(f"Antwort: {answer.answer}")
Die RetryStrategy-Klasse steuert, wie das Olostep SDK vorübergehende API-Fehler durch automatische Wiederholungen mit exponentiellem Backoff und Jitter behandelt. Dies hilft, einen zuverlässigen Betrieb in Produktionsumgebungen sicherzustellen, in denen temporäre Netzwerkprobleme, Ratenbeschränkungen und Serverüberlastungen zu intermittierenden Fehlern führen können.
Jitter fügt eine Zufälligkeit hinzu, um “thundering herd”-Probleme zu verhindern, wenn viele Clients gleichzeitig wiederholen. Der Jitter wird wie folgt berechnet:
Wenn alle Wiederholungen erschöpft sind, wird der ursprüngliche Fehler ausgelöst:
try: result = await client.scrapes.create("https://example.com")except OlostepServerError_TemporaryIssue as e: print(f"Fehlgeschlagen nach allen Wiederholungen: {e}") # Dauerhaftes Scheitern behandeln
Das Olostep SDK bietet eine umfassende Ausnahmehierarchie für verschiedene Fehlerszenarien. Alle Ausnahmen erben von Olostep_BaseError.Es gibt drei Hauptfehlertypen, die direkt von Olostep_BaseError erben:
Olostep_APIConnectionError ist von Serverfehlern getrennt, da es netzwerkbezogene Fehler darstellt, die auftreten, bevor die API die Anfrage verarbeiten kann. Dies sind Transportebenenprobleme (DNS- oder HTTP-Fehler, Timeouts, Verbindung verweigert usw.) und keine API-Ebene-Fehler. HTTP-Statuscodes (4xx, 5xx) werden als API-Antworten betrachtet und als Serverfehler kategorisiert, auch wenn sie Probleme anzeigen.
Für die meisten Anwendungsfälle fangen Sie den Basisfehler ab und drucken den Fehlernamen:
from olostep import AsyncOlostep, Olostep_BaseErrortry: result = await client.scrapes.create(url_to_scrape="https://example.com")except Olostep_BaseError as e: print(f"Ein Fehler ist aufgetreten: {type(e).__name__}") print(f"Fehlermeldung: {e}")
Dieser Ansatz fängt alle SDK-Fehler ab und liefert klare Informationen darüber, was schiefgelaufen ist. Der Fehlername (z.B. OlostepServerError_AuthFailed) ist beschreibend genug, um das Problem zu verstehen.
Wenn Sie eine spezifischere Fehlerbehandlung benötigen, fangen Sie die spezifischen Fehlertypen direkt ab. Vermeiden Sie die Verwendung von OlostepServerError_BaseError oder OlostepClientError_BaseError - diese Basisklassen zeigen nur an, wer den Fehler ausgelöst hat (Server vs. Client), nicht wer für die Behebung verantwortlich ist. Dies ist ein Implementierungsdetail, das bei der Fehlerbehandlungslogik nicht hilft.Stattdessen fangen Sie spezifische Fehlertypen ab, die das tatsächliche Problem anzeigen:
from olostep import ( AsyncOlostep, Olostep_BaseError, Olostep_APIConnectionError, OlostepServerError_AuthFailed, OlostepServerError_CreditsExhausted, OlostepClientError_NoAPIKey,)try: result = await client.scrapes.create(url_to_scrape="https://example.com")except Olostep_APIConnectionError as e: print(f"Netzwerkfehler: {type(e).__name__}")except OlostepServerError_AuthFailed: print("Ungültiger API-Schlüssel")except OlostepServerError_CreditsExhausted: print("Credits erschöpft")except OlostepClientError_NoAPIKey: print("API-Schlüssel nicht bereitgestellt")except Olostep_BaseError as e: print(f"Ein Fehler ist aufgetreten: {type(e).__name__}")