ページの最終更新日を調べる - lisp-cookbook-ja/common-lisp GitHub Wiki

Webオートメーション ライブラリ drakma net-telent-date

ページの最終更新日を調べる

下記の例では、WebクライアントにCLiki:DRAKMA、日付文字のパーズにCLiki:net-telent-dateを利用しています。

;; 素朴な実装
(defun sort-url (urls &key (test #'<))
  (flet ((ut-date-url (urls)
           (MAPCAR (lambda (url &aux (lastmod (last-modified url)))
                     (list (if lastmod (date:parse-time lastmod) 0)
                           (or lastmod "<NONE SPECIFIED>")
                           url))
                   URLS)))
    (format T "~:{~*~&~29A: ~A~%~}" 
            (sort (ut-date-url urls) test :key #'first))))

(defun last-modified (url)
  (macrolet ((%header (req) `(nth-value 2 ,req)))
    (drakma:header-value :last-modified
      (%header (drakma:http-request url :method :head)))))
;; 実行例
(sort-url '("http://tips.lisp-users.org"
            "http://tips.lisp-users.org/common-lisp/"
            "http://tips.lisp-users.org/scheme"
            "http://shibuya.lisp-users.org/"))
;-> <NONE SPECIFIED>             : http://tips.lisp-users.org/common-lisp/
;   <NONE SPECIFIED>             : http://tips.lisp-users.org/scheme
;   <NONE SPECIFIED>             : http://shibuya.lisp-users.org/
;   Thu, 20 Nov 2008 02:33:58 GMT: http://tips.lisp-users.org
;=> NIL

議論