30 lines
1.1 KiB
Clojure
30 lines
1.1 KiB
Clojure
(ns wikidata
|
|
(:require [com.yetanalytics.flint :as f])
|
|
(:require [babashka.http-client :as http])
|
|
(:require [cheshire.core :as json]))
|
|
|
|
(def wikidata-query-url "https://query.wikidata.org/sparql")
|
|
|
|
(defn- query [latin]
|
|
(-> `{:prefixes {:wdt "<http://www.wikidata.org/prop/direct/>"
|
|
:wd "<http://www.wikidata.org/entity/>"
|
|
:bd "<http://www.bigdata.com/rdf#>"
|
|
:wikibase "<http://wikiba.se/ontology#>"}
|
|
:select [~'?name]
|
|
:where [[~'?bird :wdt/P31 :wd/Q16521]
|
|
[~'?bird :wdt/P225 ~latin]
|
|
[~'?bird :wdt/P1843 ~'?name]
|
|
[:service :wikibase/label [[:bd/serviceParam :wikibase/language "en,de,fr"]]]]
|
|
}
|
|
(f/format-query :pretty true)))
|
|
|
|
|
|
(defn get-bird [latin]
|
|
(let [bindings (-> (http/get wikidata-query-url {:query-params {:query (query latin) :format "json"}})
|
|
(:body)
|
|
(json/parse-string true)
|
|
(:results)
|
|
(:bindings))]
|
|
{:name (apply hash-map (flatten (map (fn [{name :name}] [(keyword (:xml:lang name)) (:value name)]) bindings))) :latin latin}))
|
|
|