====== 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://github.com/czcorpus/kontext/wiki/HTTP-API|KonText]]
* [[manualy:treq:api|Treq]]
Každé API běží na vlastní adrese:
* KonText: ''https://korpus.cz/kontext-api/v0.17''
* Treq: ''https://korpus.cz/treq/api/v1''
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 KonText API ====
#!/usr/bin/env python3
import pickle, requests
personal_access_token = '0a1b2c3d4e5f6-abc012...'
cookies_file = 'cookies.pickle'
with requests.Session() as s:
# Load cookies
try:
with open(cookies_file, 'rb') as f:
s.cookies.update(pickle.load(f))
except FileNotFoundError:
pass
# Log in
r = s.post('https://korpus.cz/login', data={'personal_access_token': personal_access_token})
# Creating a concordance query
request_body = {
"type": "concQueryArgs",
"maincorp": "syn2015",
"usesubcorp": None,
"viewmode": "kwic",
"pagesize": 40,
"attrs": ["word","tag"],
"attr_vmode": "visible-kwic",
"base_viewattr": "word",
"ctxattrs": [],
"structs": ["text","p","g"],
"refs": [],
"fromp": 0,
"shuffle": 0,
"queries": [
{
"qtype": "advanced",
"corpname": "syn2015",
"query": "[word=\"celou\"] [lemma=\"pravda\"]",
"pcq_pos_neg": "pos",
"include_empty": False,
"default_attr": "word"
}
],
"text_types": {},
"context":
{
"fc_lemword_wsize": [-5, 5],
"fc_lemword": "",
"fc_lemword_type": "all",
"fc_pos_wsize": [-5, 5],
"fc_pos": [],
"fc_pos_type": "all"
},
"async": False
}
r = s.post('https://korpus.cz/kontext-api/v0.17/query_submit', params={'format': 'json'}, json=request_body)
response_json = r.json()
print(response_json)
# Displaying a concordance
conc_persistence_op_id = response_json['conc_persistence_op_id']
r = s.get('https://korpus.cz/kontext-api/v0.17/view', params={'format': 'json', 'q': '~'+conc_persistence_op_id})
print(r.json())
# Store cookies
with open(cookies_file, 'wb') as f:
pickle.dump(s.cookies, f)
==== 3) R a KonText API ====
library(httr)
# Log in
personal_access_token = '0a1b2c3d4e5f6-abc012...'
r <- POST("https://korpus.cz/login", body=list(personal_access_token=personal_access_token))
# Creating a concordance query
request_body <- '{
"type": "concQueryArgs",
"structs": ["text", "s"],
"refs": ["%3Dtext.txtype", "%3Ddoc.author"],
"queries": [
{
"qtype": "advanced",
"corpname":"syn2020",
"query": "[word=\\\"celou\\\"] [lemma=\\\"pravda\\\"]"
}
]
}'
r <- POST("https://korpus.cz/kontext-api/v0.17/query_submit?format=json", content_type_json(), body=request_body)
# Displaying a concordance
response_json <- content(r)
conc_persistence_op_id <- response_json$conc_persistence_op_id
params <- list(
format="json",
q=paste0("~", conc_persistence_op_id),
refs="=text.txtype",
refs="=doc.author",
pagesize=100
)
r <- GET("https://korpus.cz/kontext-api/v0.17/view", query=params)
content(r)