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