(require "xml-parser-modoki") (require "rss/main") (provide "rss/filter/zianplus") (in-package "rss") (defvar *zianplus-title* "自アン+") (defvar *zianplus-url-base* "http://www.zianplus.net/") (defvar *zianplus-url-regexp* (concat *zianplus-url-base* "\\(.*\\)")) ; SoccerAge Asia (defun zianplus-parse-buffer (url) (let (items title anchor) (save-excursion (goto-char (point-min)) (while (scan-buffer "\\(.*\\):\\(.*\\):\\(.*\\)
" :regexp t :tail t) ;↑探す部分の正規表現↓一致した部分うまくつかってURLとか取りだす (setq anchor (concat "http://www.zianplus.net/cgi-bin/vote+/" (match-string 1))) (setq title (concat (match-string 2) ":" (match-string 3) ":" (match-string 4))) (setq title (ed::xmlpm-decode-special-chars title)) (push (rss-create-item title anchor) items)) (nreverse items)))) ;; フィルタ関数 ;; (チャネル, ファイルを引数にfuncallされる) (defun zianplus-filter (channel file) (let ((url (rss-link channel)) title items) (setq title *zianplus-title*) (save-excursion (set-buffer (get-buffer-create *rss-buffer-temp*)) (erase-buffer (selected-buffer)) (insert-file-contents file) (setq items (rss::zianplus-parse-buffer url)) (delete-buffer (selected-buffer))) ; 元のファイルを上書き (convert-to-rss (rss-create title url nil items) file))) ;; フィルタの登録 ;; (URLがマッチした時にフィルタが呼ばれる) (rss-filter-regist *zianplus-url-base* 'zianplus-filter)