De sync client (Olostep) biedt een blokkerende interface die perfect is voor scripts en eenvoudige gebruikssituaties.
from olostep import Olostep# Voorzie de API-sleutel via het 'api_key' parameter of# door de OLOSTEP_API_KEY omgevingsvariabele in te stellen# De sync client beheert automatisch de resourcebeheer# Geen expliciete sluiting nodig - resources worden opgeruimd na elke operatieclient = 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")# Extraheer alle links van een websitemaps = client.maps.create(url="https://example.com")# Verkrijg alle ontdekte URL'surls = []for url in maps.urls(): urls.append(url) if len(urls) >= 10: # Limiet voor demo breakprint(f"Found {len(urls)} URLs")
from olostep import Olostepclient = Olostep(api_key="your-api-key")# Verkrijg antwoorden van webpagina's met behulp van AIanswer = client.answers.create( task="What is the main topic of https://example.com?")print(f"Answer: {answer.answer}")
De async client (AsyncOlostep) is de aanbevolen client voor high-performance toepassingen, backend services en wanneer je veel gelijktijdige verzoeken moet afhandelen.
from olostep import AsyncOlostep# Voorzie de API-sleutel via het 'api_key' parameter of# door de OLOSTEP_API_KEY omgevingsvariabele in te stellen# RESOURCE MANAGEMENT# ===================# De SDK ondersteunt twee gebruikspatronen voor resourcebeheer:# 1. Context Manager (Aanbevolen voor eenmalig gebruik):# Behandelt automatisch resource opruimingasync with AsyncOlostep(api_key="YOUR_REAL_KEY") as client: scrape_result = await client.scrapes.create(url_to_scrape="https://example.com")# Transport wordt hier automatisch gesloten# 2. Expliciete Sluiting (Voor langlopende services):# Vereist handmatige resource opruimingclient = AsyncOlostep(api_key="YOUR_REAL_KEY")try: scrape_result = await client.scrapes.create(url_to_scrape="https://example.com")finally: await client.close() # Handmatig het transport sluiten
import asynciofrom olostep import AsyncOlostepasync def main(): async with AsyncOlostep(api_key="your-api-key") as client: # Extraheer alle links van een website maps = await client.maps.create(url="https://example.com") # Verkrijg alle ontdekte URL's urls = [] async for url in maps.urls(): urls.append(url) if len(urls) >= 10: # Limiet voor demo break print(f"Found {len(urls)} URLs")asyncio.run(main())
import asynciofrom olostep import AsyncOlostepasync def main(): async with AsyncOlostep(api_key="your-api-key") as client: # Verkrijg antwoorden van webpagina's met behulp van AI answer = await client.answers.create( task="What is the main topic of https://example.com?" ) print(f"Answer: {answer.answer}")asyncio.run(main())
Vang alle SDK-fouten op met de basis uitzondering klasse:
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"Er is een fout opgetreden: {type(e).__name__}") print(f"Foutmelding: {e}")
Voor gedetailleerde foutafhandelingsinformatie, inclusief de volledige uitzondering hiërarchie en gedetailleerde foutafhandelingsopties, zie Gedetailleerde Foutafhandeling.
De SDK probeert automatisch opnieuw bij tijdelijke fouten (netwerkproblemen, tijdelijke serverproblemen) op basis van de RetryStrategy configuratie. Je kunt het herhalingsgedrag aanpassen door een RetryStrategy instantie door te geven bij het maken van de client:
De SDK behandelt intelligent verschillende invoerformaten voor maximaal gemak:
from olostep import Olostep, Countryclient = Olostep(api_key="your-api-key")# Formaten: string, lijst, of enumclient.scrapes.create(url_to_scrape="https://example.com", formats="html")client.scrapes.create(url_to_scrape="https://example.com", formats=["html", "markdown"])# Landen: hoofdletterongevoelige strings of enumsclient.scrapes.create(url_to_scrape="https://example.com", country="us")client.scrapes.create(url_to_scrape="https://example.com", country=Country.US)# Lijsten: enkele waarden of lijstenclient.batches.create(urls="https://example.com") # Enkele URLclient.batches.create(urls=["https://a.com", "https://b.com"]) # Meerdere URL's
from olostep import Olostep, Countryclient = Olostep(api_key="your-api-key")batch = client.batches.create([ {"url": "https://www.google.com/search?q=python", "custom_id": "search_1"}, {"url": "https://www.google.com/search?q=javascript", "custom_id": "search_2"}, {"url": "https://www.google.com/search?q=typescript", "custom_id": "search_3"}],country=Country.US,parser="@olostep/google-search")# Verwerk resultaten per aangepast ID# Bij gebruik van een parser, haal JSON-inhoud op in plaats van HTMLfor item in batch.items(): if item.custom_id == "search_2": content = item.retrieve(["json"]) print(f"Zoekresultaat: {content.json_content}")
from olostep import Olostepclient = Olostep(api_key="your-api-key")# Maak eerst een antwoord aancreated_answer = client.answers.create( task="What is the main topic of https://example.com?")# Haal het vervolgens op met behulp van het IDanswer = client.answers.get(answer_id=created_answer.id)print(f"Answer: {answer.answer}")
import logginglogging.basicConfig(level=logging.INFO)logger = logging.getLogger("olostep")logger.setLevel(logging.INFO) # Gebruik DEBUG voor gedetailleerde output
Logniveaus: INFO (aanbevolen), DEBUG (gedetailleerd), WARNING, ERROR
De RetryStrategy klasse bepaalt hoe de Olostep SDK omgaat met tijdelijke API-fouten door middel van automatische herhalingen met exponentiële backoff en jitter. Dit helpt om betrouwbare werking te garanderen in productieomgevingen waar tijdelijke netwerkproblemen, snelheidslimieten en serveroverbelasting intermitterende fouten kunnen veroorzaken.
Jitter voegt randomisatie toe om “thundering herd” problemen te voorkomen wanneer veel clients tegelijkertijd opnieuw proberen. De jitter wordt berekend als:
Wanneer alle herhalingen zijn uitgeput, wordt de oorspronkelijke fout opgeworpen:
try: result = await client.scrapes.create("https://example.com")except OlostepServerError_TemporaryIssue as e: print(f"Gefaald na alle herhalingen: {e}") # Behandel de permanente fout
De Olostep SDK biedt een uitgebreide uitzondering hiërarchie voor verschillende faalscenario’s. Alle uitzonderingen erven van Olostep_BaseError.Er zijn drie hoofdtype fouten die direct erven van Olostep_BaseError:
Olostep_APIConnectionError is apart van serverfouten omdat het netwerkniveau fouten vertegenwoordigt die optreden voordat de API het verzoek kan verwerken. Dit zijn transportlaagproblemen (DNS of HTTP-fouten, timeouts, verbinding geweigerd, etc.) in plaats van API-niveau fouten. HTTP-statuscodes (4xx, 5xx) worden beschouwd als API-reacties en worden gecategoriseerd als serverfouten, ook al duiden ze op problemen.
Voor de meeste gebruikssituaties, vang de basisfout op en print de foutnaam:
from olostep import AsyncOlostep, Olostep_BaseErrortry: result = await client.scrapes.create(url_to_scrape="https://example.com")except Olostep_BaseError as e: print(f"Er is een fout opgetreden: {type(e).__name__}") print(f"Foutmelding: {e}")
Deze aanpak vangt alle SDK-fouten op en biedt duidelijke informatie over wat er misging. De foutnaam (bijv. OlostepServerError_AuthFailed) is beschrijvend genoeg om het probleem te begrijpen.
Als je meer specifieke foutafhandeling nodig hebt, vang dan de specifieke fouttypes direct op. Vermijd het gebruik van OlostepServerError_BaseError of OlostepClientError_BaseError - deze basisklassen geven alleen aan wie de fout heeft opgeworpen (server vs client), niet wie verantwoordelijk is voor het oplossen ervan. Dit is een implementatiedetail die niet helpt bij foutafhandelingslogica.Vang in plaats daarvan specifieke fouttypes op die het daadwerkelijke probleem aangeven:
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"Netwerkfout: {type(e).__name__}")except OlostepServerError_AuthFailed: print("Ongeldige API-sleutel")except OlostepServerError_CreditsExhausted: print("Credits uitgeput")except OlostepClientError_NoAPIKey: print("API-sleutel niet verstrekt")except Olostep_BaseError as e: print(f"Er is een fout opgetreden: {type(e).__name__}")