2010/10/09

cl-twitter で OAuth

cl-twitter で OAuth ってこれどあってるのか?

いきなり cl-twitter へのパッチ。


~/letter/lisp/clbuild/source/cl-twitter% darcs whatsnew
hunk ./elements.lisp 32
- (record-type-args name args)
+ (record-type-args ',name args)
hunk ./twitter.lisp 49
- url access-token (oauth:token-consumer (twitter-user-access-token *twitter-user*))
+ url access-token
+ :consumer-token (oauth:token-consumer (or access-token
+ (twitter-user-access-token *twitter-user*)))
+;; :consumer-token (oauth:token-consumer (or (getf (getf args :auth) :oauth)
+;; (twitter-user-access-token *twitter-user*)))
hunk ./twitter.lisp 154
- (oauth:token-consumer request-token)
- request-token))
+ request-token
+ :consumer-token (oauth:token-consumer request-token)))

OAuth するために http://twitter.com/apps で consumer key と consumer secret を取得する。その後、次のコードで動かせた。

#|
http://twitter.com/apps で consumer key と consumer secret を取得する
|#

(eval-when (:compile-toplevel :load-toplevel :execute)
(require :cl-twitter))

(defpackage :try-cl-twitter
(:use :cl))

(in-package :try-cl-twitter)

(setf twit::*consumer-key* "aaaaaaaaaaaaaaaaaa"
twit::*consumer-secret* "bbbbbbbbbbbbbbbbbbbbbbbbbbbb")

(setf (values url request-token)
(twit:oauth-make-twitter-authorization-uri))
;; => #<PURI:URI http://twitter.com/oauth/authorize?&oauth_token=ccccccccccccccccccccccccccc>
;;#<CL-OAUTH:REQUEST-TOKEN
;; :CONSUMER #<CL-OAUTH:CONSUMER-TOKEN
;; :KEY "aaaaaaaaaaaaaaaaaa"
;; :SECRET "bbbbbbbbbbbbbbbbbbbbbbbbbbbb"
;; :USER-DATA NIL
;; :LAST-TIMESTAMP 0>
;; :KEY "ccccccccccccccccccccccccccc"
;; :SECRET "ddddddddddddddddddddddddddddddddd"
;; :USER-DATA (("oauth_callback_confirmed" . "true"))
;; :CALLBACK-URI NIL
;; :VERIFICATION-CODE "verification_code"
;; :AUTHORIZED-P NIL>

;; url にブラウザでアクセスし PIN コードを↓に設定
(setf (oauth::request-token-verification-code request-token) "5512017")

;; request-token から access-token を
(twit:oauth-authenticate-user (oauth:token-key request-token))
;; => #<TWITTER-USER 'quek'>

(twit::twitter-user-access-token (twit::get-user "quek"))
;; => #<CL-OAUTH:ACCESS-TOKEN
;; :CONSUMER #<CL-OAUTH:CONSUMER-TOKEN
;; :KEY "aaaaaaaaaaaaaaaaaa"
;; :SECRET "bbbbbbbbbbbbbbbbbbbbbbbbbbbb"
;; :USER-DATA NIL
;; :LAST-TIMESTAMP 0>
;; :KEY "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
;; :SECRET "ffffffffffffffffffffffffffffffff"
;; :USER-DATA (("user_id" . "4344931") ("screen_name" . "quek"))
;; :SESSION-HANDLE NIL
;; :EXPIRES NIL
;; :AUTHORIZATION-EXPIRES NIL
;; :ORIGIN-URI "http://twitter.com/oauth/access_token">

;; 以上で、アクセストークンが取得できた。



;; 次からは consumer key, consumer secret, access-token key, access-token secret で
(setf access-token (oauth:make-access-token
:consumer (oauth:make-consumer-token
:key "aaaaaaaaaaaaaaaaaa"
:secret "bbbbbbbbbbbbbbbbbbbbbbbbbbbb")
:key "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
:secret "ffffffffffffffffffffffffffffffff"))

(setf twit:*twitter-user* (twit:twitter-op :user-show :id "quek" :auth (list :oauth access-token)))
;; => #<TWITTER-USER 'quek'>

(setf (twit::twitter-user-access-token twit:*twitter-user*) access-token)q

(twit:friends-timeline)

(twit:update "まみむめも♪")

あってる気がしない。もっとスマートな方法は?

0 件のコメント: