* mixi.el (mixi-diary-list-regexp): Fix regexp.
[elisp/mixi.git] / mixi.el
diff --git a/mixi.el b/mixi.el
index 7c29177..789ba27 100644 (file)
--- a/mixi.el
+++ b/mixi.el
@@ -1211,21 +1211,7 @@ Increase this value when unexpected error frequently occurs."
 (defconst mixi-diary-list-regexp
   "<tr VALIGN=top>
 <td ALIGN=center ROWSPAN=3 NOWRAP bgcolor=#F2DDB7><font COLOR=#996600>\\([0-9]+\\)·î\\([0-9]+\\)Æü<br>\\([0-9]+\\):\\([0-9]+\\)</font>\\(<br><input type=\"checkbox\" name=\"diary_id\" value=\"[0-9]+\">\\|\\)</td>
-<td bgcolor=\"#FFF4E0\">&nbsp;<a href=\"view_diary\\.pl\\?id=\\([0-9]+\\)&owner_id=[0-9]+\">\\(.*\\)</a></td>
-</tr>
-<tr>
-<td ALIGN=center BGCOLOR=#FFFFFF>
-<table BORDER=0 CELLSPACING=0 CELLPADDING=3 WIDTH=410>
-<tr>
-<td CLASS=h120>
-
-\\(.*\\)
-
-?<br>
-
-</td></tr>
-</table>
-</td></tr>")
+<td bgcolor=\"#FFF4E0\">&nbsp;<a href=\"view_diary\\.pl\\?id=\\([0-9]+\\)&owner_id=[0-9]+\">\\(.*\\)</a></td>")
 
 (defun mixi-get-diaries (&rest friend-or-range)
   "Get diaries of FRIEND."
@@ -1255,7 +1241,7 @@ Increase this value when unexpected error frequently occurs."
                                    (string-to-number (nth 2 item))
                                    (string-to-number (nth 1 item))
                                    month year)
-                                  (nth 6 item) (nth 7 item))))
+                                  (nth 6 item))))
              items))))
 
 (defmacro mixi-new-diary-list-page ()
@@ -2025,8 +2011,7 @@ Increase this value when unexpected error frequently occurs."
 (defconst mixi-bbs-list '(mixi-topic mixi-event))
 
 (defmacro mixi-bbs-p (object)
-  `(when (memq (mixi-object-class ,object) mixi-bbs-list)
-     t))
+  `(memq (mixi-object-class ,object) mixi-bbs-list))
 
 (defun mixi-bbs-community (object)
   "Return the community of OBJECT."
@@ -2333,8 +2318,7 @@ Increase this value when unexpected error frequently occurs."
 (defconst mixi-message-box-list '(inbox outbox savebox thrash)) ; thrash?
 
 (defmacro mixi-message-box-p (box)
-  `(when (memq ,box mixi-message-box-list)
-     t))
+  `(memq ,box mixi-message-box-list))
 
 (defun mixi-message-box-name (box)
   "Return the name of BOX."
@@ -2758,8 +2742,7 @@ Increase this value when unexpected error frequently occurs."
                                             sports entertainment IT))
 
 (defmacro mixi-news-category-p (category)
-  `(when (memq ,category mixi-news-category-list)
-     t))
+  `(memq ,category mixi-news-category-list))
 
 (defun mixi-news-category-id (category)
   "Return the id of CATEGORY."
@@ -2769,9 +2752,24 @@ Increase this value when unexpected error frequently occurs."
    (1+ (- (length mixi-news-category-list)
          (length (memq category mixi-news-category-list))))))
 
-(defmacro mixi-news-list-page (category)
-  `(concat "http://news.mixi.jp/list_news_category.pl?page=%d&sort=1"
-          (concat "&id=" (mixi-news-category-id category) "&type=bn")))
+(defconst mixi-news-sort-list '(newest pickup))
+
+(defmacro mixi-news-sort-p (sort)
+  `(memq ,sort mixi-news-sort-list))
+
+(defun mixi-news-sort-id (sort)
+  "Return the id of SORT."
+  (unless (mixi-news-sort-p sort)
+    (signal 'wrong-type-argument (list 'mixi-news-sort-p sort)))
+  (number-to-string
+   (- (length mixi-news-sort-list)
+      (length (memq sort mixi-news-sort-list)))))
+
+(defmacro mixi-news-list-page (category sort)
+  `(concat "http://news.mixi.jp/list_news_category.pl?page=%d"
+          "&sort=" (mixi-news-sort-id ,sort)
+          "&id=" (mixi-news-category-id ,category)
+          "&type=bn"))
 
 (defconst mixi-news-list-regexp
   "<tr bgcolor=\"\\(#FCF5EB\\|#FFFFFF\\)\">
@@ -2783,28 +2781,30 @@ Increase this value when unexpected error frequently occurs."
 <td WIDTH=\"1%\" nowrap CLASS=\"f08\"><A HREF=\"list_news_media\\.pl\\?id=[0-9]+\">\\(.+\\)</A></td>
 <td WIDTH=\"1%\" nowrap CLASS=\"f08\">\\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\)</td></tr>")
 
-(defun mixi-get-news (category &optional range)
-  "Get news of CATEGORY."
+(defun mixi-get-news (category sort &optional range)
+  "Get news of CATEGORY and SORT."
   (unless (mixi-news-category-p category)
     (signal 'wrong-type-argument (list 'mixi-news-category-p category)))
-    (let ((items (mixi-get-matched-items (mixi-news-list-page category)
-                                        mixi-news-list-regexp
-                                        range))
-         (year (nth 5 (decode-time (current-time))))
-         (month (nth 4 (decode-time (current-time)))))
-      (mapcar (lambda (item)
-               (let ((month-of-item (string-to-number (nth 6 item))))
-                 (when (> month-of-item month)
-                   (decf year))
-                 (setq month month-of-item)
-                 (mixi-make-news (nth 2 item) (nth 1 item) (nth 5 item)
-                                  (encode-time
-                                   0 (string-to-number (nth 9 item))
-                                   (string-to-number (nth 8 item))
-                                   (string-to-number (nth 7 item))
-                                   month year)
-                                  (nth 3 item))))
-             items)))
+  (unless (mixi-news-sort-p sort)
+    (signal 'wrong-type-argument (list 'mixi-news-sort-p sort)))
+  (let ((items (mixi-get-matched-items (mixi-news-list-page category sort)
+                                      mixi-news-list-regexp
+                                      range))
+       (year (nth 5 (decode-time (current-time))))
+       (month (nth 4 (decode-time (current-time)))))
+    (mapcar (lambda (item)
+             (let ((month-of-item (string-to-number (nth 6 item))))
+               (when (> month-of-item month)
+                 (decf year))
+               (setq month month-of-item)
+               (mixi-make-news (nth 2 item) (nth 1 item) (nth 5 item)
+                               (encode-time
+                                0 (string-to-number (nth 9 item))
+                                (string-to-number (nth 8 item))
+                                (string-to-number (nth 7 item))
+                                month year)
+                               (nth 3 item))))
+           items)))
 
 (provide 'mixi)