diff options
-rw-r--r-- | lisp/emms-librefm-client.el | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lisp/emms-librefm-client.el b/lisp/emms-librefm-client.el new file mode 100644 index 0000000..19a92bc --- /dev/null +++ b/lisp/emms-librefm-client.el @@ -0,0 +1,76 @@ +;;; emms-librefm-client.el --- Last.FM Music API + +;; Copyright (C) 2014 Free Software Foundation, Inc. + +;; Author: Yoni Rabkin <yrk@gnu.org> + +;; Keywords: emms, libre.fm + +;; EMMS 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 3, or (at your option) +;; any later version. +;; +;; EMMS is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +;; License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with EMMS; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +;; MA 02110-1301, USA. + +;;; Commentary: +;; +;; Definitive information on how to setup and use this package is +;; provided in the wonderful Emms manual, in the /doc directory of the +;; Emms distribution. + +;;; Code: + +(defvar emms-librefm-client-handshake-url + "turtle.libre.fm") + +(defvar emms-librefm-client-method + "http") + +(defvar emms-librefm-client-username + "") + +(defvar emms-librefm-client-password + "") + +(defvar emms-librefm-client-debug + "") + + +(defun emms-librefm-client-handshake-string (url username password) + (let ((timestamp (format-time-string "%s"))) + (concat emms-librefm-client-method + "://" + url "/?" + "hs=true" "&" + "p=1.2" "&" + "c=emm" "&" + "v=1.0" "&" + "u=" (url-encode-url username) "&" + "t=" timestamp "&" + "a=" (md5 (concat (md5 password) timestamp))))) + +(defun emms-librefm-client-handshake (url username password) + (let ((url-request-method "POST")) + (let ((response + (url-retrieve-synchronously + (emms-librefm-client-handshake-string + url username password)))) + (setq emms-librefm-client-debug + (with-current-buffer response + (buffer-substring-no-properties (point-min) + (point-max))))))) + + +(provide 'emms-librefm-client) + + +;;; emms-librefm-client.el ends here |