Tags: インターネットサービス, HTML
HTML から必要な情報を抜き出すためのライブラリは様々ありますが、下記では、CLiki:closure-htmlを使用しています。
(defun count-pages (url) (let* ((page (drakma:http-request url)) (doc (chtml:parse page (cxml-stp:make-builder))) (ans 0)) (stp:do-recursively (a doc) (when (and (typep a 'stp:element) (equal (stp:local-name a) "li")) (incf ans))) ans)) ;; 試してみる (mapcar #'count-pages '("http://practical-scheme.net/wiliki/wiliki.cgi?c=a" "http://tips.lisp-users.org/common-lisp/index.cgi?c=a" "http://tips.lisp-users.org/scheme/index.cgi?c=a")) ;=>(942 202 114)
(defun all-items (url) (let* ((page (drakma:http-request url)) (doc (chtml:parse page (cxml-stp:make-builder))) (ns (stp:namespace-uri (stp:document-element doc)))) (mapcar #'stp:string-value (stp:filter-recursively (stp:of-name "li" ns) doc)))) ;; 逆引きSchemeに存在して 逆引きCLに存在しない項目をリストにする (let ((p1 (all-items "http://tips.lisp-users.org/common-lisp/index.cgi?c=a")) (p2 (all-items "http://tips.lisp-users.org/scheme/index.cgi?c=a"))) (set-difference p2 p1 :test #'string=)) ;=> ("CGI を作る" "CPUのエンディアンを調べる" ...)