#:g1: (net oauth)の紹介

Posted 2014-02-22 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の54日目です。

(net oauth)とはなにか

 (net oauth)は R7RS準拠のsagittarius schemeのOAuthのライブラリです

パッケージ情報

パッケージ名(net oauth)
マニュアルSagittariusUsers'Reference

インストール方法

標準添付のライブラリなので
(import (net oauth))
するだけです。

試してみる

 マニュアルに詳しいコード例も載っているので、そちらを参考にすれば簡単に使えると思いますが、Twitterにポストする例を書いてみます。

(import (rnrs) (net oauth) (sagittarius io) (json) (srfi :1))

#|| ;; .twitter-oauth.lisp の形式 ((consumer-key "......") (consumer-secret ".....") (access-key "...") (access-secret "...")) ||#

(define .twitter-oauth.lisp ".twitter-oauth.lisp")

(define (readfile1 file) (call-with-input-file file read))

(define access-token (let ((token (readfile1 .twitter-oauth.lisp))) (define (<o key) (second (assoc key token))) (lambda () (make-access-token :key (<o 'access-key) :secret (<o 'access-secret) :consumer (make-consumer-token :key (<o 'consumer-key) :secret (<o 'consumer-secret))))))

(define (twclient :key (get "statuses/home_timeline") (? '() ) (post #f)) (let ((meth (if post 'POST 'GET)) (rsrc (or post get))) (reverse! (call-with-input-string (access-protected-resource (string-append "https://api.twitter.com/1.1/" rsrc ".json") (access-token) :request-method meth :user-parameters ?) json-read))))

;;;; (define (update mesg :key (re #f)) (twclient :post "statuses/update" :? `(("status" ,mesg) ,@(if re `(("in_reply_to_status_id" (number->string ,re))) '() ))))

;; (define tw update)

(tw "食べすぎた")
;=> [jsonの塊......

 どうも認証トークンをファイルから読んでみたりと、いらないものをごちゃごちゃ書いてしまいましたが、access-protected-resourceが肝で、これにURLとパラメータをtwitterのAPIの通り渡してやればOKです。
cl-oauthを移植したものとのことでcl-oauthを利用したことがある人には、そのままの感覚で利用できると思います。

まとめ

 今回は、(net oauth)を紹介してみました。
sagittariusは実用指向とのことで便利なライブラリも標準で色々添付されてきます。
一度眺めてみては如何でしょうか。

comments powered by Disqus