aboutsummaryrefslogtreecommitdiff
path: root/backend/fetchers/app.bsky.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/fetchers/app.bsky.go')
-rw-r--r--backend/fetchers/app.bsky.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/backend/fetchers/app.bsky.go b/backend/fetchers/app.bsky.go
new file mode 100644
index 0000000..df89249
--- /dev/null
+++ b/backend/fetchers/app.bsky.go
@@ -0,0 +1,47 @@
+package fetchers
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+ "llostre/backend/notes"
+ "llostre/backend/records"
+ "net/http"
+)
+
+type ListRecordsResponse struct {
+ Records []notes.AppBskyFeedPostRecord `json:"records"`
+}
+
+func FetchBlueskyPosts(did string, pdsURL string) ([]notes.AppBskyFeedPostNote, error) {
+ url := fmt.Sprintf("%s/xrpc/com.atproto.repo.listRecords?repo=%s&collection=app.bsky.feed.post&limit=50", pdsURL, did)
+
+ resp, err := http.Get(url)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+
+ var response records.ListRecordsResponse
+ err = json.Unmarshal(body, &response)
+ if err != nil {
+ return nil, err
+ }
+
+ var posts []notes.AppBskyFeedPostNote
+ for _, record := range response.Records {
+ bp, err := notes.AppBskyFeedPostFromRecord(record)
+ if err != nil {
+ fmt.Printf("skipping malformed record %s: %v\n", record.URI, err)
+ continue
+ }
+ posts = append(posts, *bp)
+ }
+
+ return posts, nil
+}