(defvoo nnweb-directory (nnheader-concat gnus-directory "nnweb/")
"Where nnweb will save its files.")
-(defvoo nnweb-type 'dejanews
+(defvoo nnweb-type 'google
"What search engine type is being used.
-Valid types include `dejanews', `dejanewsold', `reference',
+Valid types include `google', `dejanews', `dejanewsold', `reference',
and `altavista'.")
(defvar nnweb-type-definition
'(
- (dejanews ;; bought by google.com
- (article . nnweb-google-wash-article)
- (id . "http://groups.google.com/groups?as_umsgid=%s")
- (reference . nnweb-google-reference)
+ (google
+ ;;(article . nnweb-google-wash-article)
+ ;;(id . "http://groups.google.com/groups?as_umsgid=%s")
+ (article . ignore)
+ (id . "http://groups.google.com/groups?selm=%s&output=gplain")
+ ;;(reference . nnweb-google-reference)
+ (reference . identity)
+ (map . nnweb-google-create-mapping)
+ (search . nnweb-google-search)
+ (address . "http://groups.google.com/groups")
+ (identifier . nnweb-google-identity))
+ (dejanews ;; alias of google
+ ;;(article . nnweb-google-wash-article)
+ ;;(id . "http://groups.google.com/groups?as_umsgid=%s")
+ (article . ignore)
+ (id . "http://groups.google.com/groups?selm=%s&output=gplain")
+ ;;(reference . nnweb-google-reference)
+ (reference . identity)
(map . nnweb-google-create-mapping)
(search . nnweb-google-search)
(address . "http://groups.google.com/groups")
(deffoo nnweb-request-scan (&optional group server)
(nnweb-possibly-change-server group server)
+ (if nnweb-ephemeral-p
+ (setq nnweb-hashtb (gnus-make-hashtable 4095)))
(funcall (nnweb-definition 'map))
(unless nnweb-ephemeral-p
(nnweb-write-active)
(when (and group
(not (equal group nnweb-group))
(not nnweb-ephemeral-p))
- (setq nnweb-group group)
+ (setq nnweb-group group
+ nnweb-articles nil)
(let ((info (assoc group nnweb-group-alist)))
(when info
(setq nnweb-type (nth 2 info))
(when (string-match "^<\\(.*\\)>$" article)
(setq art (match-string 1 article)))
(when (and fetch art)
- (setq url (format fetch article))
+ (setq url (format fetch art))
(mm-with-unibyte-current-buffer
(nnweb-fetch-url url))
(if (nnweb-definition 'reference t)
(setq article
- (funcall (nnweb-definition
+ (funcall (nnweb-definition
'reference) article)))))))
(unless nnheader-callback-function
- (funcall (nnweb-definition 'article))
- (nnweb-decode-entities))
+ (funcall (nnweb-definition 'article)))
(nnheader-report 'nnweb "Fetched article %s" article)
(cons group (and (numberp article) article))))))
(nnweb-open-server server)))
(unless nnweb-group-alist
(nnweb-read-active))
+ (unless nnweb-hashtb
+ (setq nnweb-hashtb (gnus-make-hashtable 4095)))
(when group
(when (and (not nnweb-ephemeral-p)
- (not (equal group nnweb-group)))
- (setq nnweb-hashtb (gnus-make-hashtable 4095))
+ (equal group nnweb-group))
(nnweb-request-group group nil t))))
(defun nnweb-init (server)
(while (search-forward "," nil t)
(replace-match " " t t)))
(widen)
+ (nnweb-decode-entities)
(set-marker body nil))))
(defun nnweb-reference-search (search)
(while (re-search-forward "<A.*\\?id@\\([^\"]+\\)\">[0-9]+</A>" nil t)
(replace-match "<\\1> " t)))
(widen)
- (nnweb-remove-markup)))
+ (nnweb-remove-markup)
+ (nnweb-decode-entities)))
(defun nnweb-altavista-search (search &optional part)
(url-insert-file-contents
(goto-char (point-min))
(re-search-forward "^<pre>" nil t)
(narrow-to-region (point-min) (point))
- (search-backward "</table>" nil t 2)
+ (search-backward "<table " nil t 2)
(delete-region (point-min) (point))
- (if (search-forward "[view thread]" nil t)
+ (if (re-search-forward "Search Result [0-9]+" nil t)
+ (replace-match ""))
+ (if (re-search-forward "View complete thread ([0-9]+ articles?)" nil t)
(replace-match ""))
(goto-char (point-min))
(while (search-forward "<br>" nil t)
(case-fold-search t)
(active (cadr (assoc nnweb-group nnweb-group-alist)))
Subject Score Date Newsgroups From
- map url)
+ map url mid)
(unless active
- (push (list nnweb-group (setq active (cons 1 0)))
+ (push (list nnweb-group (setq active (cons 1 0))
+ nnweb-type nnweb-search)
nnweb-group-alist))
;; Go through all the article hits on this page.
(goto-char (point-min))
(while (re-search-forward
- "a href=/groups\\(\\?[^ \">]*seld=[0-9]+[^ \">]*\\)" nil t)
- (setq url
- (concat (nnweb-definition 'address)
- (match-string 1)))
+ "a href=/groups\\(\\?[^ \">]*selm=\\([^ &\">]+\\)\\)" nil t)
+ (setq mid (match-string 2)
+ url (format
+ "http://groups.google.com/groups?selm=%s&output=gplain" mid))
(narrow-to-region (search-forward ">" nil t)
(search-forward "</a>" nil t))
(nnweb-remove-markup)
(setq Subject (buffer-string))
(goto-char (point-max))
(widen)
- (forward-line 2)
+ (forward-line 1)
(when (looking-at "<br><font[^>]+>")
(goto-char (match-end 0)))
(if (not (looking-at "<a[^>]+>"))
(goto-char (point-max))
(widen)
(skip-chars-forward "- \t"))
- (when (looking-at
- "\\([0-9]+/[A-Za-z]+/[0-9]+\\)[ \t]*by[ \t]*\\([^<]*\\) - <a")
+ (when (looking-at
+ "\\([0-9]+[/ ][A-Za-z]+[/ ][0-9]+\\)[ \t]*by[ \t]*\\([^<]*\\) - <a")
(setq From (match-string 2)
Date (match-string 1)))
(forward-line 1)
(incf (cdr active))
(make-full-mail-header
(cdr active) (if Newsgroups
- (concat "(" Newsgroups ") " Subject)
+ (concat "(" Newsgroups ") " Subject)
Subject)
- From Date Message-ID
+ From Date (or Message-ID mid)
nil 0 0 url))
map)
(nnweb-set-hashtb (cadar map) (car map))))
(defun nnweb-google-reference (id)
(let ((map (nnweb-google-parse-1 id)) header)
- (setq nnweb-articles
+ (setq nnweb-articles
(nconc nnweb-articles map))
(when (setq header (cadar map))
(mm-with-unibyte-current-buffer
(defun nnweb-google-identity (url)
"Return an unique identifier based on URL."
- (if (string-match "seld=\\([0-9]+\\)" url)
+ (if (string-match "selm=\\([^ &>]+\\)" url)
(match-string 1 url)
url))
"Insert the contents from an URL in the current buffer.
If FOLLOW-REFRESH is non-nil, redirect refresh url in META."
(let ((name buffer-file-name))
- (if follow-refresh
+ (if follow-refresh
(save-restriction
(narrow-to-region (point) (point))
(url-insert-file-contents url)
(listp (cdr element)))
(nnweb-text-1 element)))))
-(defun nnweb-replace-in-string (string match newtext)
- (while (string-match match string)
- (setq string (replace-match newtext t t string)))
- string)
-
(provide 'nnweb)
;;; nnweb.el ends here