Scheme で livedoor Reader を

読めるようになりました。

scheme-ldr


http://json.org/ にリンクがありますが、MzScheme 用 JSON ライブラリを使っています。

使い方は簡単で、json-read という関数に JSON データの入力ポートを渡すだけです。抜粋:

(define (api-post api post-data)
  (let ((in (post-pure-port
             (string->url
              (string-append "http://reader.livedoor.com" api))
             (string->bytes/utf-8
              (alist->form-urlencoded
               (cons (cons 'ApiKey (api-key))
                     (or (fix-data post-data)
                         '()))))
             (list (cookie)
                   "Content-Type: application/x-www-form-urlencoded"))))
    (dynamic-wind void
        (cut json-read in)
        (cut close-input-port in))))

配列はリストとして、オブジェクト( { } で囲まれた式)はベクタとして返ってきます。


色々応用は考えられるんですが、取り敢えずは、じっくり読むことを目的としていないフィードをさっと REPL に表示して既読にする、とか、あと podcast などメディア系のフィードを自動でローカルのプレイリストに追加できたら便利だなと思います。