X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fnnweb.el;h=ab4f421cb72762996db66dd9d5759b4e9504fb12;hb=23544667b54a01c4dbe52137060eb3817394c6f6;hp=df03e93b0194f411877a0283c8941e9cc548990d;hpb=a24c6fd688a5a3ab4553a8e2e1191643d46b5f31;p=gnus diff --git a/lisp/nnweb.el b/lisp/nnweb.el index df03e93b0..ab4f421cb 100644 --- a/lisp/nnweb.el +++ b/lisp/nnweb.el @@ -1,6 +1,7 @@ ;;; nnweb.el --- retrieving articles via web search engines -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -;; Free Software Foundation, Inc. + +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -19,13 +20,19 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; Note: You need to have `w3' installed for some functions to work. +;; FIXME: Due to changes in the HTML output of Google Groups and Gmane, stuff +;; related to web groups (gnus-group-make-web-group) doesn't work anymore. + +;; Fetching an article by MID (cf. gnus-refer-article-method) over Google +;; Groups should work. + ;;; Code: (eval-when-compile (require 'cl)) @@ -53,12 +60,13 @@ Valid types include `google', `dejanews', and `gmane'.") (defvar nnweb-type-definition '((google - (article . ignore) - (id . "http://groups.google.com/groups?selm=%s&output=gplain") + (id . "http://www.google.com/groups?as_umsgid=%s&hl=en&dmode=source") + (article . nnweb-google-wash-article) (reference . identity) (map . nnweb-google-create-mapping) (search . nnweb-google-search) (address . "http://groups.google.com/groups") + (base . "http://groups.google.com") (identifier . nnweb-google-identity)) (dejanews ;; alias of google (article . ignore) @@ -67,6 +75,7 @@ Valid types include `google', `dejanews', and `gmane'.") (map . nnweb-google-create-mapping) (search . nnweb-google-search) (address . "http://groups.google.com/groups") + (base . "http://groups.google.com") (identifier . nnweb-google-identity)) (gmane (article . nnweb-gmane-wash-article) @@ -303,35 +312,29 @@ Valid types include `google', `dejanews', and `gmane'.") (current-buffer)))))) ;;; -;;; Deja bought by google.com +;;; groups.google.com ;;; (defun nnweb-google-wash-article () - (let ((case-fold-search t) url) - (goto-char (point-min)) - (re-search-forward "^
" nil t)
-    (narrow-to-region (point-min) (point))
-    (search-backward "" nil t)
-      (replace-match "\n"))
-    (mm-url-remove-markup)
+  ;; We have Google's masked e-mail addresses here.  :-/
+  (let ((case-fold-search t))
     (goto-char (point-min))
-    (while (re-search-forward "^[ \t]*\n" nil t)
-      (replace-match ""))
-    (goto-char (point-max))
-    (insert "\n")
-    (widen)
-    (narrow-to-region (point) (point-max))
-    (search-forward "" nil t)
-    (delete-region (point) (point-max))
-    (mm-url-remove-markup)
-    (widen)))
+    (if (save-excursion
+	  (or (re-search-forward "The requested message.*could not be found."
+				 nil t)
+	      (not (and (re-search-forward "^
" nil t)
+			(re-search-forward "^
" nil t))))) + ;; FIXME: Don't know how to indicate "not found". + ;; Should this function throw an error? --rsteib + (progn + (gnus-message 3 "Requested article not found") + (erase-buffer)) + (delete-region (point-min) + (1+ (re-search-forward "^
" nil t)))
+      (goto-char (point-min))
+      (delete-region (- (re-search-forward "^
" nil t) (length "")) + (point-max)) + (mm-url-decode-entities)))) (defun nnweb-google-parse-1 (&optional Message-ID) (let ((i 0) @@ -349,7 +352,7 @@ Valid types include `google', `dejanews', and `gmane'.") "a href=/groups\\(\\?[^ \">]*selm=\\([^ &\">]+\\)\\)" nil t) (setq mid (match-string 2) url (format - "http://groups.google.com/groups?selm=%s&output=gplain" mid)) + (nnweb-definition 'id) mid)) (narrow-to-region (search-forward ">" nil t) (search-forward "" nil t)) (mm-url-remove-markup) @@ -420,7 +423,7 @@ Valid types include `google', `dejanews', and `gmane'.") (>= i nnweb-max-hits)) (setq more nil) ;; Yup, there are more articles - (setq more (concat "http://groups.google.com" (match-string 1))) + (setq more (concat (nnweb-definition 'base) (match-string 1))) (when more (erase-buffer) (mm-url-insert more)))) @@ -435,9 +438,9 @@ Valid types include `google', `dejanews', and `gmane'.") "?" (mm-url-encode-www-form-urlencoded `(("q" . ,search) - ("num". "100") + ("num" . "100") ("hq" . "") - ("hl" . "") + ("hl" . "en") ("lr" . "") ("safe" . "off") ("sites" . "groups")))))