#:g1: cl-lastfmの紹介

Posted 2014-03-29 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の89日目です。

cl-lastfmとはなにか

 cl-lastfmは、Nicolas Lamirault氏作のlast.fmのAPIをCommon Lispから利用する為のライブラリです。

パッケージ情報

パッケージ名cl-lastfm
Quicklisp
プロジェクトページnlamirault/cl-lastfm · GitHub
CLiKihttp://cliki.net/cl-lastfm
Quickdocshttp://quickdocs.org/cl-lastfm

インストール方法

(ql:quickload :cl-lastfm)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 Nicolas Lamirault氏は以前、cl-audioscrobblerを開発していましたが、現在は、更新されておらず、その間にlast.fmのAPIのバージョンも変ってしまったため、cl-audioscrobblerは現在のlast.fmでは上手く使えなくなってしまいました。

 cl-lastfmのソースを眺める限り、どうもcl-audioscrobblerから現在のlast.fmでも使える部品を切り出してcl-lastfmとしているようです。
cl-audioscrobblerでは再生している音楽の情報も投稿できましたが、cl-lastfmではまだ対応していない様子。
ということで、現状では主に再生した情報を読み出す機能のみです。

(defun last.fm-api-key ()
  (let ((file (merge-pathnames (user-homedir-pathname)
                               (make-pathname :name ".LAST.FM" :case :common))))
    (with-open-file (in file) 
      (read in))))

(let* ((api-key (getf (last.fm-api-key) :api-key)) (dat (cl-lastfm:user-get-top-artists api-key "ma550"))) (flet ((? (key x) (stp:string-value (elt ($:find x key) 0)))) (series:iterate ((a (series:scan ($:find (cxml:parse dat (stp:make-builder)) "artist"))) (cnt (series:scan-range :from 1 :upto 10))) (format t "~2D: ~A: ~A~%" cnt (? "name" a) (? "playcount" a))))) ;>> 1: Miles Davis: 2428 ;>> 2: BONNIE PINK: 1310 ;>> 3: The Smashing Pumpkins: 1194 ;>> 4: David Liebman: 1119 ;>> 5: John Coltrane: 1098 ;>> 6: Elvin Jones: 999 ;>> 7: Branford Marsalis: 774 ;>> 8: Red Hot Chili Peppers: 691 ;>> 9: Brad Mehldau: 689 ;>> 10: Bill Evans: 653 ;>> ;=> NIL

まとめ

 今回は、cl-lastfmを紹介してみました。
何故名前を変更して再出発したのかは謎ですが、機能の充実をのんびり待ちたいところです。

comments powered by Disqus