AplikaceAplikace
Nastavení

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
manualy:api [2022/12/16 15:59] – [Použití] michalkrenmanualy:api [2026/02/19 12:40] (aktuální) – [Použití] tomasmachalek
Řádek 3: Řádek 3:
 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. 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 získání osobního přístupového tokenu =====+===== Postup při získání osobního přístupového tokenu =====
  
   - Pokud nejste přihlášeni, přihlaste se.   - Pokud nejste přihlášeni, přihlaste se.
Řádek 17: Řádek 17:
 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ě. 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ě.
  
-Každá aplikace má specifický způsob dotazování. Návody pro použití API: +<WRAP tip important 60%> 
-  * [[https://github.com/czcorpus/kontext/wiki/HTTP-API|KonText]] +Popisy API jednotlivých aplikací
-  * [[https://wiki.korpus.cz/doku.php/manualy:treq:api|Treq]]+  * [[https://korpus.cz/mquery/api/docs/index.html|MQuery]] 
 +  * [[manualy:treq:api|Treq]] 
 +  * <del>[[https://github.com/czcorpus/kontext/wiki/HTTP-API|KonText]]</del> - 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í. 
 +</WRAP>
  
-Následující příklady zahrnují vše zmíněné.+Každé API běží na vlastní adrese:
  
-==== curl ====+  * MQuery: ''https://korpus.cz/mquery/api'' 
 +  * Treq: ''https://korpus.cz/treq/api/v1'' 
 +  * <del>KonText: ''https://korpus.cz/kontext-api/v0.17''</del>
  
-Dotaz do aplikace Treq+<WRAP round important 60%> 
 +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 
 +</WRAP> 
 + 
 +===== Příklady ===== 
 + 
 +==== 1) curl a Treq API ====
  
 <code bash> <code bash>
Řádek 33: Řádek 46:
 curl --cookie cookies.txt --cookie-jar cookies.txt -X POST -F 'personal_access_token=0a1b2c3d4e5f6-abc012...' 'https://korpus.cz/login' curl --cookie cookies.txt --cookie-jar cookies.txt -X POST -F 'personal_access_token=0a1b2c3d4e5f6-abc012...' 'https://korpus.cz/login'
 # Query Treq # Query Treq
-curl --cookie cookies.txt --cookie-jar cookies.txt 'https://treq.korpus.cz/api/v1?from=cs&to=en&multiword=false&regex=true&lemma=true&ci=true&pkgs[0]=SYNDICATE&pkgs[1]=CORE&query=pravda&order=perc&asc=false'+curl --cookie cookies.txt --cookie-jar cookies.txt 'https://korpus.cz/treq/api/v1?from=cs&to=en&multiword=false&regex=true&lemma=true&ci=true&pkgs[0]=SYNDICATE&pkgs[1]=CORE&query=pravda&order=perc&asc=false'
 </code> </code>
  
-==== Python Requests ==== +==== 2) Python a MQuery API ====
- +
-Dotaz do aplikace KonText+
  
 <code python> <code python>
 #!/usr/bin/env python3 #!/usr/bin/env python3
-import pickle, requests+import requests 
 +import pprint 
 +import pickle
  
 personal_access_token = '0a1b2c3d4e5f6-abc012...' personal_access_token = '0a1b2c3d4e5f6-abc012...'
 cookies_file = 'cookies.pickle' cookies_file = 'cookies.pickle'
 +corpus = 'syn2020'
 +timeout = 10
  
 with requests.Session() as s: with requests.Session() as s:
     # Load cookies     # Load cookies
-    try+    try:
         with open(cookies_file, 'rb') as f:         with open(cookies_file, 'rb') as f:
             s.cookies.update(pickle.load(f))             s.cookies.update(pickle.load(f))
     except FileNotFoundError:     except FileNotFoundError:
         pass         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())
  
-    # Log in +    # Store cookies 
-    r = s.post('https://korpus.cz/login'data={'personal_access_token': personal_access_token})+    with open(cookies_file, 'wb') as f: 
 +        pickle.dump(s.cookiesf)</code>
  
-    # Creating a concordance query +==== 3) R a MQuery API ====
-    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/query_submit', params={'format': 'json'}, json=request_body) +
-    response_json r.json() +
-    print(response_json)+
  
-    Displaying concordance +<code r> 
-    conc_persistence_op_id = response_json['conc_persistence_op_id'] +library(httr) 
-    s.get('https://korpus.cz/kontext/view', params={'format': 'json', 'q''~'+conc_persistence_op_id}+library(jsonlite) 
-    print(r.json())+ 
 +personal_access_token <- 'c7036d756212-3afbe17...' 
 +cookies_file <- 'cookies.txt' 
 +corpus <- 'syn2020' 
 +timeout_secs <- 10 
 + 
 +Create 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( 
 +    '[word="celou"] [lemma="pravda"]'
 +    attr = 'word' 
 +  )
 +  timeout(timeout_secs) 
 +
 + 
 +print(content(r))
  
-    # Store cookies 
-    with open(cookies_file, 'wb') as f: 
-        pickle.dump(s.cookies, f) 
 </code> </code>