#:g1: clickrの紹介

Posted 2014-05-28 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の149日目です。

clickrとはなにか

 clickrは、Mark Probst氏作のFlickr APIをCommon Lispから利用するユーティリティです。

パッケージ情報

パッケージ名clickr
Quicklisp
参考サイトLisping Flickr | Mostly Software
CLiKihttp://cliki.net/clickr
Quickdocshttp://quickdocs.org/clickr
CL Test Grid: ビルド状況clickr | CL Test Grid

インストール方法

(ql:quickload :clickr)

試してみる

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

 利用にあたって、まずflickr.lispの

(defun md5sum-string (string)
  (octets-to-md5-string (md5sum-sequence string)))

がmd5:md5sum-stringを上書きして変なことになっているので、名前を変更します。

(defun string-md5sum-string (string)
  (octets-to-md5-string (md5sum-string string)))

そしてこれを利用している関数も変更

(defun arguments-signature (api-info args)
  (labels ((convert (args)
	     (if (null args)
		 nil
		 (cons (list (symbol-name (car args)) (cadr args)) (convert (cddr args))))))
    (let* ((sorted-args (sort (convert args) #'(lambda (x y) (string< (car x) (car y)))))
	   (args-string (apply #'concatenate 'string
			       (mapcar #'(lambda (a) (concatenate 'string (car a) (cadr a)))
				       sorted-args))))
      (string-md5sum-string (concatenate 'string (flickr-api-info-shared-secret api-info) args-string)))))

多分ロードした後では変なことになってしまうので、変更してからライブラリを読み込み直す必要があると思います。

 clickrを利用する上での注意点ですが、OAuth対応でない古いAPIを利用しているので、そのうち使えなくなる可能性が高いと思われます。とりあえず、現時点では古いAPIでも動くようです。
また、ブラウザを開くプログラムがMac用のopenしか用意されていないので、flickr.lispのurl_handler.shを適当に作成するか変更します。

 全体の構成ですが、基礎的な部分を構成するflickrパッケージと高レベルのAPIのclickrパッケージ、自動化を目的としたautomatrパッケージに分かれています。
下記の例では、ログインしてユーザーの最新の画像を取得してみています。
※FlickrのAPIキーは下記で取得します

(defpackage :myclickr 
  (:use :cl :automatr :flickr :clickr))

(cl:in-package :myclickr)

(defvar *api-key* "...") (defvar *shared-secret* "...") (defvar *my-api-info* nil) (defvar *my-user-name* "...") (defvar *my-user* nil)

(setf *my-api-info* (request-authorization *api-key* *shared-secret*))

(complete-authorization *my-api-info*)

(setf *my-user* (user-with-name *my-api-info* *my-user-name*))

(defvar *api-info* *my-api-info*)

(defvar *me* (user-with-name *api-info* *my-user-name*))

(user-photopage-url *me*) ;=> "http://www.flickr.com/photos/70064901@N00"

(clickr::fetch-user-photosets *me*) ;=> (#<CLICKR::PHOTOSET {1015D6C7D3}> #<CLICKR::PHOTOSET {1015D6EDF3}> ; #<CLICKR::PHOTOSET {1015D6F373}>)

(photo-urls (first (clickr::fetch-user-photos *me*))) ;=> (#S(FLICKR::FLICKR-URL ; :TYPE "photopage" ; :URL "https://www.flickr.com/photos/masso/14101544217/"))

load-flickr.lispに簡単なコード例があるので参考にできるかと思います。

まとめ

 今回は、clickrを紹介してみました。
clickrのgithubでのissueページを眺める限り、今後メンテナンスはする予定がないようなので興味のある方は誰か引き継いでみるのも良いかもしれません〈Pull Reqは歓迎の様子〉。

comments powered by Disqus