====== API ====== Vybrané aplikace umožňují přístup pomocí [[https://cs.wikipedia.org/wiki/API|API]]. Přístup přes API však vyžaduje autentizaci vždy, tedy i u aplikací, které ji při běžném používání nevyžadují. Pro autentizaci slouží osobní přístupové tokeny. ===== Postup při získání osobního přístupového tokenu ===== - Pokud nejste přihlášeni, přihlaste se. - Na stránce [[https://korpus.cz/account|uživatelského účtu]] v sekci "Osobní přístupové tokeny" klikněte "Nový", zvolte délku platnosti a potvrďte "OK". - Token si zkopírujte, bude zobrazen pouze jednou. Takto lze vytvořit libovolné množství osobních přístupových tokenů. Je také možné tokeny libovolně mazat. Po vypršení platnosti tokenu je třeba vytvořit nový. ===== Použití ===== Token se posílá v HTTP požadavku na URL ''https://korpus.cz/login'' metodou POST jako parametr ''personal_access_token''. V odpovědi přijde session cookie, kterou je následně potřeba posílat s každým dalším požadavkem. Pro rychlejší komunikaci je vhodné session cookie uložit a používat ji v rámci několika hodin opakovaně. Popisy API jednotlivých aplikací: * [[https://korpus.cz/mquery/api/docs/index.html|MQuery]] * [[manualy:treq:api|Treq]] * [[https://github.com/czcorpus/kontext/wiki/HTTP-API|KonText]] - KonText API již není podporováno a dále vyvíjeno a služba bude k dispozici pouze do konce roku 2026. Jako náhrada je k dispozici server MQuery s jednodušším API a lepší dokumentací. Každé API běží na vlastní adrese: * MQuery: ''https://korpus.cz/mquery/api'' * Treq: ''https://korpus.cz/treq/api/v1'' * KonText: ''https://korpus.cz/kontext-api/v0.17'' - Každá aplikace má také vlastní **limity**, po jejichž překročení hrozí zablokování přístupu k API. * **KonText**: max. 12 požadavků za minutu a současně max. 5000 požadavků za den * **Treq**: max. 30 požadavků za minutu a současně max. 5000 požadavků za den ===== Příklady ===== ==== 1) curl a Treq API ==== #!/usr/bin/env bash # Log in curl --cookie cookies.txt --cookie-jar cookies.txt -X POST -F 'personal_access_token=0a1b2c3d4e5f6-abc012...' 'https://korpus.cz/login' # Query Treq curl --cookie cookies.txt --cookie-jar cookies.txt 'https://korpus.cz/treq/api/v1?from=cs&to=en&multiword=false®ex=true&lemma=true&ci=true&pkgs[0]=SYNDICATE&pkgs[1]=CORE&query=pravda&order=perc&asc=false' ==== 2) Python a MQuery API ==== #!/usr/bin/env python3 import requests import pprint import pickle personal_access_token = '0a1b2c3d4e5f6-abc012...' cookies_file = 'cookies.pickle' corpus = 'syn2020' timeout = 10 with requests.Session() as s: # Load cookies try: with open(cookies_file, 'rb') as f: s.cookies.update(pickle.load(f)) except FileNotFoundError: pass r = s.post('https://www.korpus.cz/login', data={'personal_access_token': personal_access_token}, timeout=timeout) r = s.get( f'https://www.korpus.cz/mquery/api/freqs/{corpus}', params=dict( q='[word="celou"] [lemma="pravda"]', attr='word' ), timeout=timeout ) pprint.pp(r.json()) # Store cookies with open(cookies_file, 'wb') as f: pickle.dump(s.cookies, f) ==== 3) R a MQuery API ==== library(httr) library(jsonlite) personal_access_token <- 'c7036d756212-3afbe17...' cookies_file <- 'cookies.txt' corpus <- 'syn2020' timeout_secs <- 10 # Create a handle; use curl's cookiejar to persist cookies across sessions handle <- handle('https://www.korpus.cz') cookie_cfg <- config( cookiefile = cookies_file, cookiejar = cookies_file ) # Log in r <- POST( 'https://www.korpus.cz/login', handle = handle, cookie_cfg, body = list(personal_access_token = personal_access_token), encode = 'form', timeout(timeout_secs) ) # Frequency query via MQuery r <- GET( paste0('https://www.korpus.cz/mquery/api/freqs/', corpus), handle = handle, cookie_cfg, query = list( q = '[word="celou"] [lemma="pravda"]', attr = 'word' ), timeout(timeout_secs) ) print(content(r))