diaspora(dot)el -- Simple Emacs-based client for diaspora*

diaspora, my version of a Simple Emacs-based client

I've started a simple set of functions for posting to diaspora using Emacs.

Some of the ideas should be credit to Christian and his auth-get. I'm still trying incorporate Christian's ideas in one package. I've used the authenticity token function and not, yet, the streaming...

I don't have many experience in sharing code that is still incomplete, it is not mature enough; and so have a question. What is the thumb rule, in terms of completeness, for sharing code? It can go from a simple idea to a far complete code, right :)


  1. copy the code to a buffer and safe it
  2. eval it
  3. open a file which content you like to post to diaspora; write something
  4. type (diaspora)
  5. authenticate


The code

;;; diaspora.el --- Simple Emacs-based client for diaspora*
;; Copyright 2011 Tiago Charters Azevedo
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, write to the Free Software
;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
;; 02110-1301, USA.

;;; Commentary:

;; A diaspora* client for emacs

;;; Code:

(require 'url)
(require 'url-http)

(defvar diaspora-username nil)
(defvar diaspora-password nil)

(defconst diaspora-url-sign-in
  "URL used to signing in.")

(defconst diaspora-url-status-messages
  "URL used to update diaspora status messages.")

(defun diaspora-ask ()
   (read-from-minibuffer "username: "
                         (car diaspora-username)
                         nil nil
   (read-from-minibuffer "password: "
                         (car diaspora-password)
                         nil nil

(defun diaspora-authenticity-token (url)
  (let ((url-request-method "POST")
         '(("Content-Type" . "application/x-www-form-urlencoded")))
         (mapconcat (lambda (arg)
                      (concat (url-hexify-string (car arg)) "=" (url-hexify-string (cdr arg))))
                    (list (cons "user[username]" (car diaspora-username))
                          (cons "user[password]" (car diaspora-password)))
    (url-retrieve url 'diaspora-find-auth-token)))

(defun diaspora-find-auth-token (status)

    (goto-char (point-min))
    (search-forward-regexp "<meta name=\"csrf-token\" content=\"\\(.*\\)\"/>")
    (setq auth-token (match-string-no-properties 1)))

(defun diaspora-post (post &optional id)
  (let ((url-request-method "POST")
         '(("Content-Type" . "application/x-www-form-urlencoded")))
         (mapconcat (lambda (arg)
                      (concat (url-hexify-string (car arg)) "=" (url-hexify-string (cdr arg))))
                    (list (cons "user[username]" (car diaspora-username))
                          (cons "user[password]" (car diaspora-password))
                          (cons "status_message[text]" post)
                          (cons "user[remember_me]" "1")
                          (cons "authenticity_token" auth-token)
                          (cons "commit" "Sign in")
                          (cons "aspect_ids[]" "public"))
    (url-retrieve diaspora-url-status-messages
                  (lambda (arg)
                    (kill-buffer (current-buffer))))))

(defun diaspora ()
  (diaspora-authenticity-token diaspora-url-sign-in)
  (diaspora-post (buffer-string)))

(global-set-key (kbd "C-c d") 'diaspora)

(provide 'diaspora)


Palavras chave/keywords: diaspora, emacs, client, diaspora.el

Criado/Created: NaN

Última actualização/Last updated: 13-07-2018 [09:50]

Voltar à página inicial.

GNU/Emacs Creative Commons License

(c) Tiago Charters de Azevedo