Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f90cc7d2a0 | ||
|
|
1341dd2833 | ||
|
|
260b946f25 | ||
|
|
15ae3f241f |
@@ -1,5 +1,7 @@
|
||||
# Mastodon Bookmarks Archive
|
||||
|
||||
[Release download](https://git.scambier.xyz/scambier/janet-mastodon-bookmarks/releases)
|
||||
|
||||
_A small Janet script to archive all your Mastodon bookmarks in Markdown files._
|
||||
|
||||
Because Mastodon posts can disappear for a variety of reasons (deletion, defederation, server instance shutdown, ...), it is safer to archive your bookmarks.
|
||||
@@ -23,9 +25,11 @@ Most of these values will be in the form of `key:: value` for easy integration w
|
||||
- Run the program
|
||||
|
||||
```sh
|
||||
$ ./mastodon-bookmarks YOUR_APP_TOKEN
|
||||
$ ./mastodon-bookmarks YOUR_INSTANCE YOUR_APP_TOKEN
|
||||
```
|
||||
|
||||
The `YOUR_INSTANCE` value must not have the trailing slash (e.g: `https://hachyderm.io`)
|
||||
|
||||
## Development
|
||||
|
||||
- Clone this repository
|
||||
@@ -33,7 +37,7 @@ $ ./mastodon-bookmarks YOUR_APP_TOKEN
|
||||
- `jpm deps --local`
|
||||
|
||||
```sh
|
||||
$ janet main.janet YOUR_APP_TOKEN
|
||||
$ janet main.janet YOUR_INSTANCE YOUR_APP_TOKEN
|
||||
```
|
||||
|
||||
## Build binary
|
||||
|
||||
+20
-7
@@ -2,9 +2,11 @@
|
||||
(import spork/json :as json)
|
||||
(import ./utils :as utils)
|
||||
|
||||
(var server "")
|
||||
(var apptoken "")
|
||||
(var dbg false)
|
||||
(def urls @["https://hachyderm.io/api/v1/bookmarks"])
|
||||
|
||||
(def urls @[])
|
||||
(def save-path "./bookmarks/")
|
||||
(def done @[])
|
||||
|
||||
@@ -13,20 +15,27 @@
|
||||
"Downloads the media from the item."
|
||||
(def files @[])
|
||||
(def media (item "media_attachments"))
|
||||
(pp (item "media_attachments"))
|
||||
(if dbg
|
||||
(pp (item "media_attachments")))
|
||||
(each m media
|
||||
(def url (m "url"))
|
||||
(def folder (string save-path "attachments/"))
|
||||
(array/push files {:path (string "./attachments/" (utils/get-image url folder))
|
||||
:description (m "description")}))
|
||||
(pp files)
|
||||
(if dbg (pp files))
|
||||
files)
|
||||
|
||||
|
||||
(defn write-markdown [item]
|
||||
(def files (download-media item))
|
||||
(def id (item "id"))
|
||||
(def fout (file/open (string save-path id ".md") :w))
|
||||
(def path (string save-path id ".md"))
|
||||
|
||||
(if (utils/exists? path)
|
||||
(do
|
||||
(print (string "Skipping " id))
|
||||
(break)))
|
||||
(def fout (file/open path :w))
|
||||
|
||||
(def inline (string
|
||||
"mastodon-url:: " (item "url") " \n"
|
||||
@@ -65,7 +74,7 @@
|
||||
(do
|
||||
(print "Done")
|
||||
(os/exit 0)))
|
||||
|
||||
|
||||
(print (string "Downloading " url))
|
||||
(def response
|
||||
(r/get url {"Authorization" (string "Bearer " apptoken)} {}))
|
||||
@@ -96,8 +105,12 @@
|
||||
|
||||
|
||||
(defn main [& args]
|
||||
(set apptoken (or (os/getenv "TOKEN") (args 1)))
|
||||
(set dbg (get args 2))
|
||||
(set server (args 1))
|
||||
(set apptoken (args 2))
|
||||
(set dbg (get args 3))
|
||||
|
||||
(array/push urls (string server "/api/v1/bookmarks"))
|
||||
|
||||
(os/mkdir "./bookmarks")
|
||||
(os/mkdir "./bookmarks/attachments")
|
||||
(download-bookmarks))
|
||||
|
||||
+6
-1
@@ -1,5 +1,10 @@
|
||||
(import httprequest :as r)
|
||||
|
||||
(def exists? (fn [path]
|
||||
"Returns whether a file exists at the specified path."
|
||||
(def f (file/open path :r))
|
||||
(if f (do (file/close f) true) false)))
|
||||
|
||||
(defn get-image [url folder &named headers opts]
|
||||
"Download an image from a URL and save it to a file. Returns the path to the saved file."
|
||||
(default headers {})
|
||||
@@ -42,4 +47,4 @@
|
||||
(if (empty? arr) (break nil))
|
||||
(def head (in arr 0))
|
||||
(array/remove arr 0)
|
||||
head)
|
||||
head)
|
||||
|
||||
Reference in New Issue
Block a user