(defvar nnrss-group-alist
'(("MacWeek"
- "http://macweek.zdnet.com/macweek.xml")
+ "http://macweek.zdnet.com/macweek.xml"
+ "The Macintosh news authority.")
("Linux.Weekly.News"
"http://lwn.net/headlines/rss")
("Motley.Fool"
("Slashdot"
"http://www.slashdot.com/slashdot.rdf")
("CNN"
- "http://www.cnn.com/cnn.rss")
+ "http://www.cnn.com/cnn.rss"
+ "The world's news leader.")
("FreshMeat"
- "http://freshmeat.net/backend/fm.rdf")
+ "http://freshmeat.net/backend/fm.rdf"
+ "The one-stop-shop for all your Linux software needs.")
("The.Guardian.newspaper"
- "http://www.guardianunlimited.co.uk/rss/1,,,00.xml")
+ "http://www.guardianunlimited.co.uk/rss/1,,,00.xml"
+ "Intelligent news and comment throughout the day from The Guardian newspaper.")
("MonkeyFist.rdf"
- "http://monkeyfist.com/rdf.php3")
+ "http://monkeyfist.com/rdf.php3"
+ "News and opinion on politics, technology, and eclectic miscellany.")
("NewsForge"
"http://www.newsforge.com/newsforge.rss")
("Reuters.Health"
- "http://www.reutershealth.com/eline.rss")
+ "http://www.reutershealth.com/eline.rss"
+ "Consumer-oriented health-related news stories.")
("Salon"
"http://www.salon.com/feed/RDF/salon_use.rdf")
("Wired"
("ITN"
"http://www.itn.co.uk/itn.rdf")
("Meerkat"
- "http://www.oreillynet.com/meerkat/?_fl=rss10")
+ "http://www.oreillynet.com/meerkat/?_fl=rss10"
+ "An Open Wire Service")
("MonkeyFist"
- "http://monkeyfist.com/rss1.php3")
+ "http://monkeyfist.com/rss1.php3"
+ "News and opinion on politics, technology, and eclectic miscellany.")
("Reuters.Health.rdf"
- "http://www.reutershealth.com/eline.rdf")))
+ "http://www.reutershealth.com/eline.rdf"
+ "Consumer-oriented health-related news stories.")
+ ;;("4xt" "http://4xt.org/news/general.rss10" "Resources for XT users.")
+ ("Aaronland" "http://aaronland.net/xml/abhb.rdf" "A boy and his basement.")
+ ("Art of the Mix" "http://www.artofthemix.org/xml/rss.asp" "A website devoted to the art of making mixed tapes and cds.")
+ ("Dave Beckett's RDF Resource Guide" "http://www.ilrt.bristol.ac.uk/discovery/rdf/resources/rss.rdf" "A comprehensive guide to resources about RDF.")
+ ("David Chess" "http://www.davidchess.com/words/log.rss" "Mostly-daily musings on philosophy, children, culture, technology, the emergence of life from matter, chocolate, Nomic, and all that sort of thing.")
+ ;;("Dublin Core Metadata Intitiative" "http://www.dublincore.org/news.rss" "Latest news from DCMI.")
+ ("Figby Articles" "http://www.figby.com/index-rss.php" "A weblog with daily stories about technology, books and publishing, privacy, science, and occasional humor.")
+ ;;("Figby News" "http://www.figby.com/news.php" "Categorized RSS feeds from various sources.")
+ ("Figby Quickies" "http://www.figby.com/quickies-rss.php" "Quick commented links to other sites from Figby.com.")
+ ("Flutterby!" "http://www.flutterby.com/main.rdf" "News and views from Dan Lyke.")
+ ("Groovelog" "http://groovelog.agora.co.uk/groove+log/groovelog.nsf/today.rss.xml" "The open-access groove users' weblog.")
+ ;;("Groovelog.rss10" "http://groovelog.agora.co.uk/groove+log/groovelog.nsf/today.rss10.xml" "The open-access groove users' weblog.")
+ ("Hit or Miss" "http://hit-or-miss.org/rss/" "Daily weblog and journal.")
+ ;;("Internet.com Feeds" "http://www.webreference.com/services/news/" "News from ")
+ ("Larkfarm News" "http://www.larkfarm.com/Larkfarm.rdf" "Mike Gunderloy's web site.")
+ ("Latest RFCs" "http://x42.com/rss/rfc.rss")
+ ("Linux Today" "http://linuxtoday.com/backend/biglt.rss")
+ ("Linux Today.rdf" "http://linuxtoday.com/backend/my-netscape10.rdf")
+ ("More Like This WebLog" "http://www.whump.com/moreLikeThis/RSS" "Because the more you know, the more jokes you get.")
+ ("Motivational Quotes of the Day" "http://www.quotationspage.com/data/mqotd.rss" "Four motivational quotations each day from the Quotations Page.")
+ ;;("My Netscape Network" "http://www.dmoz.org/Netscape/My_Netscape_Network/")
+ ;;("My UserLand" "http://my.userland.com/choose")
+ ("Network World Fusion NetFlash" "http://www.nwfusion.com/netflash.rss" "Daily breaking news about networking products, technologies and services.")
+ ;;("News Feeds" "http://newsfeeds.manilasites.com/" "Jeff Barr highlights high quality RSS feeds.")
+ ;;("News Is Free Export" "http://www.newsisfree.com/export.php3")
+ ("News Is Free" "http://www.newsisfree.com/news.rdf.php3")
+ ;;("News is Free XML Export" "http://www.newsisfree.com/ocs/directory.xml")
+ ("O'Reilly Network Articles" "http://www.oreillynet.com/cs/rss/query/q/260?x-ver=1.0")
+ ("Quotes of the Day" "http://www.quotationspage.com/data/qotd.rss" "Four humorous quotations each day from the Quotations Page.")
+ ("RDF Interest Group" "http://ilrt.org/discovery/rdf-dev/roads/cgi-bin/desire/ig2rss?list=www-rdf-interest" "An experimental channel scraped from the RDF Interest Group mail archives.")
+ ("RDF Logic List" "http://ilrt.org/discovery/rdf-dev/roads/cgi-bin/desire/ig2rss?list=www-rdf-logic" "An experimental channel scraped from the RDF Logic mail archives.")
+ ("RSS Info" "http://www.blogspace.com/rss/rss10" "News and information on the RSS format")
+ ;;("RSS-DEV listing" "http://www.egroups.com/links/rss-dev/Feeds_000966335046/" "A listing of RSS files from the RSS-DEV list.")
+ ("Semantic Web List" "http://ilrt.org/discovery/rdf-dev/roads/cgi-bin/desire/ig2rss?list=semantic-web" "An experimental channel scraped from the W3C's Semantic Web mail archives.")
+ ;;("Sherch!" "http://www.sherch.com/~pldms/cgi-bin/sherch.pl" "Sherlock for the rest of us.")
+ ;;("Street Fusion Archived Financial Webcasts" "http://partners.streetfusion.com/rdf/archive.rdf")
+ ;;("Street Fusion Upcoming Financial Webcasts" "http://partners.streetfusion.com/rdf/live.rdf")
+ ;;("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.")
+ ("XMLfr" "http://xmlfr.org/actualites/general.rss10" "French speaking portal site dedicated to XML.")
+ ("XMLhack" "http://xmlhack.com/rss10.php" "Developer news from the XML community.")))
(defvar nnrss-use-local nil)
(setq nnrss-server-data
(delq (assoc group nnrss-server-data) nnrss-server-data))
(nnrss-save-server-data server)
- (let ((file (expand-file-name (concat group (and server
- (not (equal server ""))
- "-")
- server ".el") nnrss-directory)))
+ (let ((file (expand-file-name
+ (nnrss-translate-file-chars
+ (concat group (and server
+ (not (equal server ""))
+ "-")
+ server ".el")) nnrss-directory)))
(delete-file file))
t)
+(deffoo nnrss-request-list-newsgroups (&optional server)
+ (nnrss-possibly-change-group nil server)
+ (save-excursion
+ (set-buffer nntp-server-buffer)
+ (erase-buffer)
+ (dolist (elem nnrss-group-alist)
+ (if (third elem)
+ (insert (car elem) "\t" (third elem) "\n"))))
+ t)
+
(nnoo-define-skeleton nnrss)
;;; Internal functions
(defun nnrss-read-server-data (server)
(setq nnrss-server-data nil)
- (let ((file (expand-file-name (concat "nnrss" (and server
- (not (equal server ""))
- "-")
- server
- ".el")
- nnrss-directory)))
+ (let ((file (expand-file-name
+ (nnrss-translate-file-chars
+ (concat "nnrss" (and server
+ (not (equal server ""))
+ "-")
+ server
+ ".el"))
+ nnrss-directory)))
(when (file-exists-p file)
(with-temp-buffer
(let ((coding-system-for-read 'binary))
(defun nnrss-save-server-data (server)
(gnus-make-directory nnrss-directory)
- (let ((file (expand-file-name (concat "nnrss" (and server
- (not (equal server ""))
- "-")
- server ".el")
- nnrss-directory)))
+ (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))
(with-temp-file file
(insert "(setq 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 (concat group (and server
- (not (equal server ""))
- "-")
- server ".el")
- nnrss-directory)))
+ (let ((file (expand-file-name
+ (nnrss-translate-file-chars
+ (concat group (and server
+ (not (equal server ""))
+ "-")
+ server ".el"))
+ nnrss-directory)))
(when (file-exists-p file)
(with-temp-buffer
(let ((coding-system-for-read 'binary))
(defun nnrss-save-group-data (group server)
(gnus-make-directory nnrss-directory)
- (let ((file (expand-file-name (concat group (and server
- (not (equal server ""))
- "-")
- server ".el")
- nnrss-directory)))
+ (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))
(with-temp-file file
(insert "(setq nnrss-group-data '"
(defun nnrss-check-group (group server)
(let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities))
file xml subject url extra changed author date)
- (mm-with-unibyte-buffer
- (if (and nnrss-use-local
- (file-exists-p (setq file (expand-file-name
- (concat group ".xml")
+ (condition-case err
+ (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))))
- (insert-file-contents file)
- (setq url (or (nth 2 (assoc group nnrss-server-data))
- (second (assoc group nnrss-group-alist))))
- (unless url
- (setq url
+ (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://")))
- (let ((pair (assoc group nnrss-server-data)))
- (if pair
- (setcdr (cdr pair) (list url))
- (push (list group nnrss-group-max url) nnrss-server-data)))
- (setq changed t))
- (nnrss-insert url))
- (goto-char (point-min))
- (while (re-search-forward "\r\n?" nil t)
- (replace-match "\n"))
- (goto-char (point-min))
- (if (re-search-forward "<rdf\\|<rss" nil t)
- (goto-char (match-beginning 0)))
- (setq xml (xml-parse-region (point) (point-max))))
+ (let ((pair (assoc group nnrss-server-data)))
+ (if pair
+ (setcdr (cdr pair) (list url))
+ (push (list group nnrss-group-max url) nnrss-server-data)))
+ (setq changed t))
+ (nnrss-insert url))
+ (goto-char (point-min))
+ (while (re-search-forward "\r\n?" nil t)
+ (replace-match "\n"))
+ (goto-char (point-min))
+ (if (re-search-forward "<rdf\\|<rss" nil t)
+ (goto-char (match-beginning 0)))
+ (setq xml (xml-parse-region (point) (point-max))))
+ (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)))
(push (list group nnrss-group-max) nnrss-server-data)))
(nnrss-save-server-data server))))
+(defun nnrss-generate-download-script ()
+ "Generate a download script in the current buffer.
+It is useful when `(setq nnrss-use-local t)'."
+ (interactive)
+ (insert "#!/bin/sh\n")
+ (insert "WGET=wget\n")
+ (insert "RSSDIR='" (expand-file-name nnrss-directory) "'\n")
+ (dolist (elem nnrss-group-alist)
+ (insert "$WGET -q -O \"$RSSDIR\"/'"
+ (nnrss-translate-file-chars (concat (car elem) ".xml"))
+ "' '"
+ (second elem) "'\n")))
+
+(defun nnrss-translate-file-chars (name)
+ (let ((nnheader-file-name-translation-alist
+ (append nnheader-file-name-translation-alist '((?' . ?_)))))
+ (nnheader-translate-file-chars name)))
+
(provide 'nnrss)
;;; nnrss.el ends here