2011/01/31

Gauche で goo.gl api (httpsとか)

Gauche で URL 短縮したくて、せっかくなので最近公開された(?)goo.gl の api を使ってみました。

rfc.httpモジュールがhttpsコネクションをサポートします (今のところunix限定)。 コネクション自体は外部プログラム(stunnel) に依存します。

stunnel が入ってれば、サラッと動くようです。
入ってなければインストール。

自分の tumblr の quote をランダムにつぶやくボットとか、自分のふぁぼり(ふぁぼられではない)をランダムにつぶやくボットとかを serversman で動かしてるんですが、その url 短縮に使おうかなーと。

ソースはこんな感じ。
(use rfc.http)
(use rfc.json)
(use rfc.uri)


(define *goo.gl-server* "www.googleapis.com")
(define *goo.gl-request-uri* "/urlshortener/v1/url")

(define my-api-key "hoge")


(define (shorten-url url api-key)
  (body->json
   (^ _ (goo.gl-request http-post url api-key
                        :msg (construct-json-string
                              `(("longUrl" . ,url)))))))

(define (expand-url url api-key)
  (body->json
   (^ _ (goo.gl-request http-get url api-key
                        :more-req-uri #`"&shortUrl=,|url|"))))

(define (body->json req)
  (receive (status header body)
      (req)
    (parse-json-string body)))

(define (goo.gl-request method url api-key
                        :key (more-req-uri "")(msg #f))
  (let1 req-uri (string-append
                 *goo.gl-request-uri*
                 "?key=" api-key more-req-uri)
  (if msg
      (method *goo.gl-server* req-uri
              msg
              :content-type "application/json"
              :secure #t)
      (method *goo.gl-server* req-uri
              :secure #t))))


;; (shorten-url "http://valvallow.blogspot.com/" my-api-key)
;; (shorten-url "http://practical-scheme.net/" my-api-key)

;; (expand-url "http://goo.gl/wvWgf" my-api-key)
;; (expand-url "http://goo.gl/ZThO" my-api-key)

プログラミングGauche

0 件のコメント:

コメントを投稿