bird-server/src/wikidata.clj

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}))