(ns dda.activity-pub-poc.json-ld (:require [hato.client :as http] [clojure.string :as str] [clojure.inspector :as ins] )) (def team-url "https://social.meissa-gmbh.de/users/team") (def context-cache (atom {})) (defn json-get [url] (:body (http/get url {:headers {"Accept" "application/json"} :http-client {:redirect-policy :normal} :as :json-string-keys}))) (defn fetch-context [url] (if-let [ctx (get @context-cache url)] ctx (get (swap! context-cache (fn [cache] (assoc cache url (get (json-get url) "@context")))) url))) (defn expand-context ([new-context] (expand-context {} new-context)) ([current-context new-context] (cond (string? new-context) (expand-context current-context (fetch-context new-context)) (sequential? new-context) (reduce expand-context current-context new-context) (map? new-context) (into current-context (map (fn [[k v]] (let [id (if (map? v) (get v "@id" v) v) [prefix suffix] (str/split id #":")] (if-let [base (get (merge current-context new-context) prefix)] [k (assoc (if (map? v) v {}) "@id" (str (if (map? base) (get base "@id") base) suffix))] [k (if (map? v) v {"@id" v})])))) new-context)))) (expand-context (get (json-get team-url) "@context"))