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:26] michalkrenmanualy:api [2024/12/12 12:10] (aktuální) – [1) curl a Treq API] zimandl
Řá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 13: Řádek 13:
 ===== Použití ===== ===== Použití =====
  
-Vyžaduje-li aplikace autentizaci, posílá se token v HTTP požadavku na URL ''https://korpus.cz/login'' metodou POST jako parametr ''personal_access_token''.+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ě. 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%> 
 +Popisy API jednotlivých aplikací:
   * [[https://github.com/czcorpus/kontext/wiki/HTTP-API|KonText]]   * [[https://github.com/czcorpus/kontext/wiki/HTTP-API|KonText]]
-  * [[https://wiki.korpus.cz/doku.php/manualy:treq:api|Treq]]+  * [[manualy:treq:api|Treq]] 
 +</WRAP>
  
-Následující příklady zahrnují vše zmíně.+Každé API běží na vlastní adrese: 
 +  * KonText: ''https://korpus.cz/kontext-api/v0.17'' 
 +  * Treq: ''https://korpus.cz/treq/api/v1''
  
-==== curl ====+<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>
  
-Dotaz do aplikace Treq+===== Příklady ===== 
 + 
 +==== 1) curl a Treq API ====
  
 <code bash> <code bash>
Řádek 33: Řádek 43:
 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 KonText API ====
- +
-Dotaz do aplikace KonText+
  
 <code python> <code python>
Řádek 49: Řádek 57:
 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))
Řádek 95: Řádek 103:
         "async": False         "async": False
     }     }
-    r = s.post('https://korpus.cz/kontext/query_submit', params={'format': 'json'}, json=request_body)+    r = s.post('https://korpus.cz/kontext-api/v0.17/query_submit', params={'format': 'json'}, json=request_body)
     response_json = r.json()     response_json = r.json()
     print(response_json)     print(response_json)
Řádek 101: Řádek 109:
     # Displaying a concordance     # Displaying a concordance
     conc_persistence_op_id = response_json['conc_persistence_op_id']     conc_persistence_op_id = response_json['conc_persistence_op_id']
-    r = s.get('https://korpus.cz/kontext/view', params={'format': 'json', 'q': '~'+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())     print(r.json())
  
Řádek 107: Řádek 115:
     with open(cookies_file, 'wb') as f:     with open(cookies_file, 'wb') as f:
         pickle.dump(s.cookies, f)         pickle.dump(s.cookies, f)
 +</code>
 +
 +==== 3) R a KonText API ====
 +
 +<code r>
 +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)
 </code> </code>