Skip to content

Latest commit

 

History

History
107 lines (77 loc) · 3.5 KB

README.md

File metadata and controls

107 lines (77 loc) · 3.5 KB

Absolute Terror Protocol

atproto Clojure SDK

Work very much in progress

Progress

Feature Status
http client 🟡
identifiers 🔴
bsky 🔴
crypto 🔴
mst 🔴
lexicon 🔴
identity 🔴
streaming 🟡
service auth 🔴
plc 🔴
oauth server 🔴

Usage

HTTP client

The client is using Martian under the hood to handle the HTTP endpoints published by the Bsky team in OpenAPI format

(require '[net.gosha.atproto.client :as at])

;; Unauthenticated client
(def session (at/init :base-url "https://public.api.bsky.app"))

;; Authenticated client
(def session (at/init :username "me.bsky.social"
                      :app-password "SECRET"
                      :base-url "https://bsky.social"))


;; Bluesky endpoints and their query params can be found here:
;; https://docs.bsky.app/docs/category/http-reference
(let [resp (at/call session :app.bsky.actor.get-profile {:actor "gosha.net"})]
  (select-keys (:body @resp) [:handle :displayName :createdAt :followersCount]))
;; => {:handle "gosha.net",
;; :displayName "Gosha ⚡",
;; :createdAt "2023-05-08T19:08:05.781Z",
;; :followersCount 617}

Jetstream

Connect to Bluesky's Jetstream service to get real-time updates of public network data. Jetstream provides a JSON-based alternative to the binary CBOR firehose, making it easier to work with post streams, likes, follows, and other events.

(require '[net.gosha.atproto.jetstream :as jetstream]
         '[clojure.core.async          :as async]
         '[examples.jetstream-analysis :as analysis]))

;; Connect with default settings (subscribes to posts)
(def conn (jetstream/connect-jetstream (async/chan 1024)))

;; Print out a single post (with 5 second timeout)
(let [event (async/alt!!
             (:events conn)    ([v] v)
             (async/timeout 5000) :timeout)]
  (clojure.pprint/pprint event))

;; Start analyzing the stream
(def analysis (analysis/start-analysis conn))

;; Get current statistics about post rates, sizes, etc
(analysis/get-summary @(:state analysis))

;; Save sample messages for offline analysis
(analysis/collect-samples conn
                        {:count    10
                         :filename "samples/my-samples.json"})

;; Cleanup
(analysis/stop-analysis analysis)
(jetstream/disconnect conn)

Check out the examples.jetstream-analysis namespace for a complete example of stream processing and analysis.

References

Contribute

Help is very much welcomed!

Before submitting a pull request, please take a look at the Issues to see if the topic you are interested in is already being discussed, and if it is not, please create an Issue to discuss it before making a PR.

For anything else, please reach out on 🦋: @gosha.net!

License

MIT, see LICENSE file