💾 Archived View for perplexing.space › 2020 › re-emacsposting-to-gemlog-blue.gmi captured on 2023-01-29 at 15:54:09. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2020-09-24)

-=-=-=-=-=-=-

RE: Emacsposting to gemlog.blue

2020-09-04

A quick thought regarding acdw's recent entry⁰ about posting entries directly to gemlog.blue from emacs.

acdw mentions a stretch goal of using emacs' own URL module instead of the emacs-requests, it happens that what he has done is almost usable by the url module already. The mm-url module (originally written for gnus) provides a necessary url encoding helper function "mm-url-encode-www-form-urlencoded" (what a mouthful!), but it takes a list of pairs in much the same way as the emacs-requests format, set a Content-Type and Bob's your uncle.

(defun post-to-gemlog-blue (post-title user pass)
  (interactive "sTitle: \nsUsername: \nsPassword: ")
  (let ((url-request-method "POST")
        (url-request-extra-headers '(("Content-Type" . "application/x-www-form-urlencoded")))
        (url-request-data (mm-url-encode-www-form-urlencoded `(("title" . ,post-title)
                                                               ("gemloguser" . ,user)
                                                               ("pw" . ,pass)
                                                               ("post" . ,(buffer-string))))))
    (with-current-buffer (url-retrieve-synchronously "https://gemlog.blue/post.php")
      (goto-char (point-min))
      (re-search-forward "\\(gemini://.*\\.gmi\\)")
      (elpher-go (match-string 1)))))

gemlog.blue returns a full page of HTML with the gemini link embedded in it, so passing the result buffer (the output of url-retrieve-synchronously) to with-current-buffer allows some grungy text munging to carve up the text/HTML appropriately. With a single gemini URI available through the regex group, elpher can be launched. This could be a lot cleaner and more robust, emacs has a number of XML/HTML libraries that could probably parse the resulting HTML. As far as neat hacks though, this seems to work fine.

apologies to gemlog.blue

In testing the above snippet out I ended up creating and deleting a number of entries -- pardon the dust!

0: Emacsposting to gemlog.blue!