commit 3088f54904e71b544dc919944a29ac1c94a8b6be Author: @s.roertgen Date: Tue Dec 31 11:36:22 2024 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1038e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +.calva/output-window/ +.calva/repl.calva-repl +.classpath +.clj-kondo/.cache +.cpcache +.eastwood +.factorypath +.hg/ +.hgignore +.java-version +.lein-* +.lsp/.cache +.lsp/sqlite.db +.nrepl-history +.nrepl-port +.portal/vs-code.edn +.project +.rebel_readline_history +.settings +.socket-repl-port +.sw* +.vscode +*.class +*.jar +*.swp +*~ +/checkouts +/classes +/target + +*.jsonl diff --git a/README.md b/README.md new file mode 100644 index 0000000..97e8904 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# AMB Publisher + +Publishes AMB data from a json-file to some relay. + +`clj -X publisher.core/process-json-lines-file :path resources/oersi_data.jsonl` + + +## TODO + +- [ ] make relay configurable diff --git a/deps.edn b/deps.edn new file mode 100644 index 0000000..e418ae9 --- /dev/null +++ b/deps.edn @@ -0,0 +1,5 @@ +{:deps {clj-http/clj-http {:mvn/version "3.13.0"} + cheshire/cheshire {:mvn/version "5.13.0"} + hato/hato {:mvn/version "1.0.0"} + nostr/nostr {:local/root "/home/steffen/coding/nostr-clj"}}} + diff --git a/src/publisher/core.clj b/src/publisher/core.clj new file mode 100644 index 0000000..748b04d --- /dev/null +++ b/src/publisher/core.clj @@ -0,0 +1,39 @@ +(ns publisher.core + (:require [nostr.edufeed :as edufeed] + [nostr.event-composer :as event-composer] + [clojure.java.io :as io] + [hato.websocket :as ws] + [cheshire.core :as json])) + +(defn create-websocket [] + ;; Create the WebSocket connection and return it + (let [ws @(ws/websocket "ws://localhost:7778" + {:on-message (fn [ws msg last?] + (when last? + (println msg))) + :on-close (fn [ws status reason] + (println "WebSocket closed with reason:" reason))})] + ws)) + +(defn send-to-relay [ws raw-event] + (let [signed-event (event-composer/body->event raw-event "9109ffc9fcddb1086e153ed23ff91c4f69f726178bf959f09b1f29c7569e24a1") + _ (println (json/generate-string signed-event))] + (ws/send! ws (json/generate-string signed-event)))) + +(defn save-to-jsonl [data file-path] + (with-open [writer (io/writer file-path :append true)] + (.write writer (str (json/generate-string data) "\n")))) + +(defn process-json-line [raw-event] + (save-to-jsonl raw-event "events.jsonl")) + +(defn process-json-lines-file [file-path] + (let [ws (create-websocket)] + (with-open [reader (io/reader "resources/oersi_data.jsonl")] + (doseq [line (line-seq reader)] + (let [json-data (json/parse-string line true) + raw-event (edufeed/transform-amb-to-30142-event (:_source json-data)) + ] + (process-json-line raw-event) + (send-to-relay ws raw-event)))))) +