aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/emms-librefm-client.el76
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