Let's start Scheme

2012-04-26

Twitterに投稿できた!

(net oauth)というライブラリを作成中。cl-oauthの移植なんだけど、drakmaとかのライブラリはあるわけ無いのでAPI名と処理の流れだけ。
Service Providerまで作る必要はないよなぁと思っているのでConsumerだけ。気が向いたらそのうち実装するかも。
っで、とりあえずTwitterに投稿できたので浮かれて書いてる。コードは以下。
(import (rnrs) (net oauth) (text sxml ssax)
 (sagittarius io)
 (srfi :26 cut))

(define (call/twitter-api->sxml token method path param . opt)
  (define (call)
    (if token
 (access-protected-resource (string-append "http://api.twitter.com" path)
       token
       :user-parameters param
       :request-method method)
 (assertion-violation 'call/twitter-api->sxml
        "later")))
  (define (retrieve body status hint advice)
    (call-with-input-string body (cut ssax:xml->sxml <> '())))
  (call-with-values call retrieve))

(define (twitter-update/sxml token message . opt)
  (call/twitter-api->sxml token 'POST "/1/statuses/update.xml"
     `(("status" ,message))))

(define access-token (make-access-token 
        :key "アクセストークンを入れてね"
        :secret "アクセスシークレットを入れてね"
        :consumer
        (make-consumer-token
         :key "コンシューマトークンを入れてね"
         :secret "コンシューマシークレットを入れてね")))
(print
 (twitter-update/sxml access-token "Hello world from Sagittarius Scheme!!"))
これだけで投稿が出来た。まぁ、アクセストークンを作る部分とかもあるんだけど、一度作ったら使いまわしなので略。Twitter用のAPI集はSagittarius本体に入れるつもりはないんだけど、どこかに置けたらいいなぁ。
これで仕事してる振りして呟ける(違

そういえば、OAuthの2.0どうしよう。今の作りだとガッツリ1.0用だ・・・

No comments:

Post a Comment