12 KiB
12 KiB
title | author | date | url | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|---|
Tumblr の API Gauche でたたく | kazu634 | 2010-09-16 | /2010/09/16/_1576/ |
|
|
Tumblr で like したものを RSS にしたくて、 Tumblr API を Gauche でたたくプログラムを作成中です。 Shiro さんの net-twitter を参考にして、とりあえず XML を取得するところまでできました。
ちなみに API のドキュメントはこれです:
ソース
;;; Tumblrへのアクセス用 (use rfc.http) (use gauche.charconv) ;;; Tumblrで自分のページを取得するために必要となるパラメータ ;;; APIのドキュメントをそのまま書き下す (define-class <tumblr-simple-read> () ((start :init-keyword :start :init-value ) (num :init-keyword :num :init-value 20) (type :init-keyword :type :init-value "") (id :init-keyword :id :init-value "") (filter :init-keyword :filter :init-value "") (tagged :init-keyword :tagged :init-value "") (search :init-keyword :search :init-value ""))) ;;; Tumblrで自分が like したものを取得するために必要となるパラメータ ;;; APIのドキュメントをそのまま書き下す (define-class <tumblr-liked-posts> () ((email :init-keyword :email :init-value "example@example.com") (password :init-keyword :password :init-value "password") (start :init-keyword :start :init-value ) (num :init-keyword :num :init-value 20) (filter :init-keyword :filter :init-value ""))) ;;; <tumblr-simple-read>をリストにする ;;; リストにすると、 http-compose-query を使用して ;;; queryストリングを簡単に生成できる (define (make-tumblr-simple-read-param-list params) `((start ,(ref params 'start)) (num ,(ref params 'num)) (type ,(ref params 'type)) (id ,(ref params 'id)) (filter ,(ref params 'filter)) (tagged ,(ref params 'tagged)) (search ,(ref params 'search)))) ;;; <tumblr-liked-posts>をリストにする ;;; リストにすると、 http-compose-query を使用して ;;; http-post が post するデータを簡単に生成できる (define (make-liked-post-list params) `((email ,(ref params 'email)) (password ,(ref params 'password)) (start ,(ref params 'start)) (num ,(ref params 'num)) (filter ,(ref params 'filter))))
実行例
下の式を評価すれば、 XML を取得できます:
;;; テスト (receive (status-code http-header contents) (http-get "kazu634.tumblr.com" (http-compose-query "/api/read" (make-tumblr-simple-read-param-list (make <tumblr-simple-read> :type "photo")))) (if (equal? status-code "200") (ces-convert contents "*JP") #f)) ;;; テスト (receive (status-code http-header contents) (http-post "yourname.tumblr.com" "/api/likes" (make-liked-post-list (make <tumblr-liked-posts> :email "Your E-mail address" :password "Your password"))) (if (equal? status-code "200") (ces-convert contents "*JP") #f))
ToDo
あとは、これを SXML に変換してから、RSSを生成すればよいわけですな。
- 作者: Kahuaプロジェクト,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/03/14
- メディア: 大型本
- 購入: 22人 クリック: 713回
- この商品を含むブログ (272件) を見る