"http://www.cnn.com/cnn.rss"
"The world's news leader.")
("FreshMeat"
- "http://freshmeat.net/backend/fm.rdf"
+ "http://freshmeat.net/backend/fm-releases.rdf"
"The one-stop-shop for all your Linux software needs.")
("The.Guardian.newspaper"
"http://www.guardianunlimited.co.uk/rss/1,,,00.xml"
;;("TNL.net newsletter" "http://www.tnl.net/newsletter/channel100.asp" "A newsletter about Internet technology and issues.")
("W3C" "http://www.w3.org/2000/08/w3c-synd/home.rss" "The latest news at the World Wide Web Consortium.")
;;("XML News: RSS Live Content" "http://www.xmlnews.org/RSS/content.html" "A listing of well-known RSS feeds.")
- ("[fr] XMLfr" "http://xmlfr.org/actualites/general.rss10"
+ ("|fr| XMLfr" "http://xmlfr.org/actualites/general.rss10"
"French speaking portal site dedicated to XML.")
- ("XMLhack" "http://xmlhack.com/rss10.php"
+ ("XMLhack" "http://xmlhack.com/rss10.php"
"Developer news from the XML community.")
- ("The Register"
- "http://www.theregister.co.uk/tonys/slashdot.rdf"
+ ("The Register"
+ "http://www.theregister.co.uk/tonys/slashdot.rdf"
"The Register -- Biting the hand that feeds IT.")
- ("[de] Heise-Ticker"
- "http://www.heise.de/newsticker/heise.rdf"
+ ("|de| Heise-Ticker"
+ "http://www.heise.de/newsticker/heise.rdf"
"German news ticker about technology.")
- ("[de] Telepolis News"
- "http://www.heise.de/tp/news.rdf"
+ ("|de| Telepolis News"
+ "http://www.heise.de/tp/news.rdf"
"German background news about technology.")
- ("Kuro5hin"
+ ("Kuro5hin"
"http://www.kuro5hin.org/backend.rdf"
"Technology and culture, from the trenches.")
("JabberCentral"
"Field name used for DESCRIPTION.
To use the description in headers, put this name into `nnmail-extra-headers'.")
+(defvar nnrss-url-field 'X-Gnus-Url
+ "Field name used for URL.
+To use the description in headers, put this name into `nnmail-extra-headers'.")
+
(nnoo-define-basics nnrss)
;;; Interface functions
"\t" ;; subject
(if (nth 4 e)
(nnrss-format-string (nth 4 e))
- "(nobody)")
+ "(nobody)")
"\t" ;;from
(or (nth 5 e) "")
"\t" ;; date
(format "<%d@%s.nnrss>" (car e) group)
"\t" ;; id
"\t" ;; refs
- "0" "\t" ;; chars
- "0" "\t" ;; lines
+ "-1" "\t" ;; chars
+ "-1" "\t" ;; lines
"" "\t" ;; Xref
- (if (memq nnrss-description-field nnmail-extra-headers)
+ (if (and (nth 6 e)
+ (memq nnrss-description-field
+ nnmail-extra-headers))
(concat (symbol-name nnrss-description-field)
": "
- (nnrss-format-string (nth 6 e)) "\t")
+ (nnrss-format-string (nth 6 e))
+ "\t")
+ "")
+ (if (and (nth 2 e)
+ (memq nnrss-url-field
+ nnmail-extra-headers))
+ (concat (symbol-name nnrss-url-field)
+ ": "
+ (nnrss-format-string (nth 2 e))
+ "\t")
"")
"\n")))))
'nov)
(with-current-buffer nntp-server-buffer
(erase-buffer)
(goto-char (point-min))
+ (if group
+ (insert "Newsgroups: " group "\n"))
(if (nth 3 e)
(insert "Subject: " (nnrss-format-string (nth 3 e)) "\n"))
(if (nth 4 e)
(insert "\n")
(if (nth 6 e)
(let ((point (point)))
- (insert (nnrss-string-as-multibyte (nth 6 e)) "\n\n")
+ (insert (nnrss-string-as-multibyte (nth 6 e)))
+ (goto-char point)
+ (while (search-forward "\n" nil t)
+ (delete-char -1))
+ (goto-char (point-max))
+ (insert "\n\n")
(fill-region point (point))))
(if (nth 2 e)
(insert (nth 2 e) "\n")))))
(if (and (setq e (assq art nnrss-group-data))
(nnmail-expired-article-p
group
- (if (listp (setq days (nth 1 e))) days
+ (if (listp (setq days (nth 1 e))) days
(days-to-time (- days (time-to-days '(0 0)))))
force))
(setq nnrss-group-data (delq e nnrss-group-data)
(setq nnrss-server-data
(delq (assoc group nnrss-server-data) nnrss-server-data))
(nnrss-save-server-data server)
- (let ((file (expand-file-name
+ (let ((file (expand-file-name
(nnrss-translate-file-chars
(concat group (and server
(not (equal server ""))
(defun nnrss-read-server-data (server)
(setq nnrss-server-data nil)
- (let ((file (expand-file-name
+ (let ((file (expand-file-name
(nnrss-translate-file-chars
(concat "nnrss" (and server
(not (equal server ""))
nnrss-directory)))
(when (file-exists-p file)
(with-temp-buffer
- (let ((coding-system-for-read 'binary))
- (insert-file-contents file))
- (emacs-lisp-mode)
- (goto-char (point-min))
- (eval-buffer)))))
+ (let ((coding-system-for-read 'binary)
+ emacs-lisp-mode-hook)
+ (insert-file-contents file)
+ (emacs-lisp-mode)
+ (goto-char (point-min))
+ (eval-buffer))))))
(defun nnrss-save-server-data (server)
(gnus-make-directory nnrss-directory)
- (let ((file (expand-file-name
+ (let ((file (expand-file-name
(nnrss-translate-file-chars
(concat "nnrss" (and server
(not (equal server ""))
"-")
server ".el"))
nnrss-directory)))
- (let ((coding-system-for-write 'binary))
+ (let ((coding-system-for-write 'binary)
+ print-level print-length)
(with-temp-file file
(insert "(setq nnrss-server-data '"
(prin1-to-string nnrss-server-data)
(let ((pair (assoc group nnrss-server-data)))
(setq nnrss-group-max (or (cadr pair) 0))
(setq nnrss-group-min (+ nnrss-group-max 1)))
- (let ((file (expand-file-name
+ (let ((file (expand-file-name
(nnrss-translate-file-chars
(concat group (and server
(not (equal server ""))
nnrss-directory)))
(when (file-exists-p file)
(with-temp-buffer
- (let ((coding-system-for-read 'binary))
- (insert-file-contents file))
- (emacs-lisp-mode)
- (goto-char (point-min))
- (eval-buffer))
+ (let ((coding-system-for-read 'binary)
+ emacs-lisp-mode-hook)
+ (insert-file-contents file)
+ (emacs-lisp-mode)
+ (goto-char (point-min))
+ (eval-buffer)))
(dolist (e nnrss-group-data)
(gnus-sethash (nth 2 e) e nnrss-group-hashtb)
(if (and (car e) (> nnrss-group-min (car e)))
(defun nnrss-save-group-data (group server)
(gnus-make-directory nnrss-directory)
- (let ((file (expand-file-name
+ (let ((file (expand-file-name
(nnrss-translate-file-chars
(concat group (and server
(not (equal server ""))
"-")
server ".el"))
nnrss-directory)))
- (let ((coding-system-for-write 'binary))
+ (let ((coding-system-for-write 'binary)
+ print-level print-length)
(with-temp-file file
(insert "(setq nnrss-group-data '"
(prin1-to-string nnrss-group-data)
(mm-with-unibyte-buffer
(if (and nnrss-use-local
(file-exists-p (setq file (expand-file-name
- (nnrss-translate-file-chars
- (concat group ".xml"))
- nnrss-directory))))
+ (nnrss-translate-file-chars
+ (concat group ".xml"))
+ nnrss-directory))))
(insert-file-contents file)
(setq url (or (nth 2 (assoc group nnrss-server-data))
(second (assoc group nnrss-group-alist))))
(unless url
(setq url
- (read-string (format "RSS url of %s: " group "http://")))
+ (read-string (format "RSS url of %s: " group "http://")))
(let ((pair (assoc group nnrss-server-data)))
(if pair
(setcdr (cdr pair) (list url))
(if (re-search-forward "<rdf\\|<rss" nil t)
(goto-char (match-beginning 0)))
(setq xml (xml-parse-region (point) (point-max))))
- (error
+ (error
(nnheader-message 1 "Error in group %s: %s" group (cadr err))))
(while (and xml (not (assq 'item xml)))
(unless (listp (car (setq xml (cddar xml))))
(setq xml nil)))
(dolist (item (nreverse xml))
- (when (and (listp item)
- (eq 'item (car item))
- (setq url (nnrss-node-text (assq 'link (cddr item))))
- (setq url (nnrss-decode-entities-unibyte-string url))
- (not (gnus-gethash url nnrss-group-hashtb)))
- (setq subject (nnrss-node-text (assq 'title (cddr item))))
- (setq extra (or (nnrss-node-text (assq 'description (cddr item)))
- (nnrss-node-text (assq 'dc:description (cddr item)))))
- (setq author (nnrss-node-text (assq 'dc:creator (cddr item))))
- (setq date (or (nnrss-node-text (assq 'dc:date (cddr item)))
- (message-make-date)))
- (push
- (list
- (incf nnrss-group-max)
- (current-time)
- url
- (and subject (nnrss-decode-entities-unibyte-string subject))
- (and author (nnrss-decode-entities-unibyte-string author))
- date
- (and extra (nnrss-decode-entities-unibyte-string extra)))
- nnrss-group-data)
- (gnus-sethash url (car nnrss-group-data) nnrss-group-hashtb)
- (setq changed t)))
+ (when (and (listp item)
+ (eq 'item (car item))
+ (setq url (nnrss-node-text (assq 'link (cddr item))))
+ (setq url (nnrss-decode-entities-unibyte-string url))
+ (not (gnus-gethash url nnrss-group-hashtb)))
+ (setq subject (nnrss-node-text (assq 'title (cddr item))))
+ (setq extra (or (nnrss-node-text (assq 'description (cddr item)))
+ (nnrss-node-text (assq 'dc:description (cddr item)))))
+ (setq author (nnrss-node-text (assq 'dc:creator (cddr item))))
+ (setq date (or (nnrss-node-text (assq 'dc:date (cddr item)))
+ (message-make-date)))
+ (push
+ (list
+ (incf nnrss-group-max)
+ (current-time)
+ url
+ (and subject (nnrss-decode-entities-unibyte-string subject))
+ (and author (nnrss-decode-entities-unibyte-string author))
+ date
+ (and extra (nnrss-decode-entities-unibyte-string extra)))
+ nnrss-group-data)
+ (gnus-sethash url (car nnrss-group-data) nnrss-group-hashtb)
+ (setq changed t)))
(when changed
(nnrss-save-group-data group server)
(let ((pair (assoc group nnrss-server-data)))
(dolist (elem nnrss-server-data)
(let ((url (or (nth 2 elem)
(second (assoc (car elem) nnrss-group-alist)))))
- (insert "$WGET -q -O \"$RSSDIR\"/'"
- (nnrss-translate-file-chars (concat (car elem) ".xml"))
- "' '" url "'\n"))))
+ (insert "$WGET -q -O \"$RSSDIR\"/'"
+ (nnrss-translate-file-chars (concat (car elem) ".xml"))
+ "' '" url "'\n"))))
(defun nnrss-translate-file-chars (name)
(let ((nnheader-file-name-translation-alist
(append nnheader-file-name-translation-alist '((?' . ?_)))))
(nnheader-translate-file-chars name)))
-(defvar nnrss-moreover-url
+(defvar nnrss-moreover-url
"http://w.moreover.com/categories/category_list_rss.html"
"The url of moreover.com categories.")
(with-temp-buffer
(nnrss-insert nnrss-moreover-url)
(goto-char (point-min))
- (while (re-search-forward
+ (while (re-search-forward
"<A NAME=\"\\([^\"]+\\)\">\\|<A HREF=\"\\(http://[^\"]*moreover\\.com[^\"]+page\\?c=\\([^\"&]+\\)&o=rss\\)" nil t)
(if (match-string 1)
(setq category (match-string 1))
(setq url (match-string 2)
name (nnweb-decode-entities-string
- (rfc2231-decode-encoded-string
+ (rfc2231-decode-encoded-string
(match-string 3))))
(if category
(setq name (concat category "." name)))
(nnweb-replace-in-string (nnrss-string-as-multibyte string) " *\n *" " "))
(defun nnrss-node-text (node)
- (if (stringp node) node
- (mapconcat 'nnrss-node-text (cddr node) "")))
+ (if (and node (listp node))
+ (mapconcat 'nnrss-node-text (cddr node) "")
+ node))
(provide 'nnrss)