X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mixi.el;h=b48c07ac6a907ca0334b417a8785f54535ff4ab9;hb=38b07099ad2519cbed3b2e929f09f5d24ae98c70;hp=dbf2a30579d1e4a1160e710d2763fd7ec6c8347b;hpb=05e05dfae73f5fdcfb1e6b198d1028176c1df3b3;p=elisp%2Fmixi.git diff --git a/mixi.el b/mixi.el index dbf2a30..b48c07a 100644 --- a/mixi.el +++ b/mixi.el @@ -1,6 +1,6 @@ ;; mixi.el --- API libraries for accessing to mixi -*- coding: euc-jp -*- -;; Copyright (C) 2005, 2006, 2007 OHASHI Akira +;; Copyright (C) 2005, 2006, 2007, 2008 OHASHI Akira ;; Author: OHASHI Akira ;; Keywords: hypermedia @@ -29,11 +29,13 @@ ;; * mixi-get-friends ;; * mixi-get-favorites ;; * mixi-get-logs +;; * mixi-get-recommended-friends (indies) ;; * mixi-get-diaries ;; * mixi-get-new-diaries ;; * mixi-search-diaries ;; * mixi-get-communities ;; * mixi-search-communities +;; * mixi-get-recommended-communities (indies) ;; * mixi-get-bbses ;; * mixi-get-new-bbses ;; * mixi-search-bbses @@ -43,6 +45,7 @@ ;; * mixi-get-messages ;; * mixi-get-introductions (broken) ;; * mixi-get-news +;; * mixi-get-releases ;; ;; APIs for posting: ;; @@ -136,7 +139,7 @@ (autoload 'w3m-retrieve "w3m") (autoload 'url-retrieve-synchronously "url")) -(defconst mixi-revision "$Revision: 1.176 $") +(defconst mixi-revision "$Revision: 1.185 $") (defgroup mixi nil "API library for accessing to mixi." @@ -473,7 +476,8 @@ Increase this value when unexpected error frequently occurs." (let ((page 1) ids) (catch 'end - (while (or (null range) (< (length ids) range)) + (while (and (or (null range) (< (length ids) range)) + (or (= page 1) (and (stringp url) (string-match "%d" url)))) (with-mixi-retrieve (when url (format url page)) (let ((func (if reverse (progn (goto-char (point-max)) @@ -1147,6 +1151,23 @@ Increase this value when unexpected error frequently occurs." (string-to-number (nth 0 item))))) items))) +;; Recommended friend. +(defmacro mixi-recommended-friend-list-page () + `(concat "http://indies.mixi.jp/recommend.pl")) + +(defconst mixi-recommended-friend-list-regexp + "
]+>.+
\\(.+?\\)¤µ¤ó([0-9]+)") + +;;;###autoload +(defun mixi-get-recommended-friends (&optional range) + "Get recommended friends." + (let ((items (mixi-get-matched-items (mixi-recommended-friend-list-page) + mixi-recommended-friend-list-regexp + range))) + (mapcar (lambda (item) + (mixi-make-friend (nth 0 item) (nth 1 item))) + items))) + ;; Diary object. (defvar mixi-diary-cache (make-hash-table :test 'equal)) (defun mixi-make-diary (owner id &optional comment-count time title content) @@ -1701,6 +1722,23 @@ Increase this value when unexpected error frequently occurs." (mixi-make-community (nth 0 item) (nth 1 item))) items))) +;; Recommended community. +(defalias 'mixi-recommended-community-list-page + 'mixi-recommended-friend-list-page) + +(defconst mixi-recommended-community-list-regexp + "
]+>.+
\\(.+\\)([0-9]+)") + +;;;###autoload +(defun mixi-get-recommended-communities (&optional range) + "Get recommended communities." + (let ((items (mixi-get-matched-items (mixi-recommended-community-list-page) + mixi-recommended-community-list-regexp + range))) + (mapcar (lambda (item) + (mixi-make-community (nth 0 item) (nth 1 item))) + items))) + ;; Topic object. (defvar mixi-topic-cache (make-hash-table :test 'equal)) (defun mixi-make-topic (community id &optional comment-count time title owner @@ -2155,7 +2193,7 @@ Increase this value when unexpected error frequently occurs." ;;;###autoload (defun mixi-get-bbses (community &optional range) - "Get bbese of COMMUNITY." + "Get bbses of COMMUNITY." (unless (mixi-community-p community) (signal 'wrong-type-argument (list 'mixi-community-p community))) (let ((items (mixi-get-matched-items (mixi-bbs-list-page community) @@ -2287,8 +2325,6 @@ Increase this value when unexpected error frequently occurs." \\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\) - - +
\\(\\(.\\|\r?\n\\)*?\\) @@ -2319,7 +2355,7 @@ Increase this value when unexpected error frequently occurs." ;; FIXME: Split regexp to time, owner(id and nick) and contents. (defconst mixi-event-comment-list-regexp - "
\\(\\|\\) + "
\\(\\|\\) \\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\)
@@ -2802,21 +2838,18 @@ Increase this value when unexpected error frequently occurs." "&media_id=" (mixi-news-media-id ,news))) (defconst mixi-news-finished-regexp - "¿½¤·Ìõ¤´¤¶¤¤¤Þ¤»¤ó¤¬¡¢¤³¤Î¥Ë¥å¡¼¥¹¤Ï·ÇºÜ¤¬½ªÎ»¤·¤¿¤«¡¢URL¤¬´Ö°ã¤Ã¤Æ¤¤¤¤¤ë¤¿¤á¤´Í÷¤¤¤¿¤À¤±¤Þ¤»¤ó¡£") + "

¢¨¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¤¬¡¢¤³¤Î¥Ë¥å¡¼¥¹¤Ï·ÇºÜ´ü´Ö¤¬½ªÎ»¤·¤¿¤«¡¢URL¤¬´Ö°ã¤Ã¤Æ¤¤¤ë¤¿¤á¤´Í÷¤¤¤¿¤À¤±¤Þ¤»¤ó¡£¾Ü¤·¤¯¤Ï¤³¤Á¤é¤ò¤´Í÷¤¯¤À¤µ¤¤¡£

") (defconst mixi-news-title-regexp - "\\(.+\\)\\( -\\)?") + "
+

\\(.+\\)

") (defconst mixi-news-media-time-regexp - "(\\(.+\\) - \\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\))") + "

¡Ê\\(.+\\) - \\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\)¡Ë

") (defconst mixi-news-content-regexp - " - + "
\\(.+\\) -
-\\(.* -\\)? - -\\(\\|
\\)") ++ +\\(
+
\\|
\\)") (defun mixi-realize-news (news) "Realize a NEWS." @@ -2915,7 +2948,8 @@ Increase this value when unexpected error frequently occurs." (aset (cdr news) 6 content)) (defconst mixi-news-category-list '(domestic politics economy area abroad - sports entertainment IT)) + sports entertainment IT game-anime + column)) (defmacro mixi-news-category-p (category) `(memq ,category mixi-news-category-list)) @@ -2948,14 +2982,9 @@ Increase this value when unexpected error frequently occurs." "&type=bn")) (defconst mixi-news-list-regexp - " -¡¦ -\\(.+\\) -\\(\\|\\) - - -\\(.+\\) -\\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\)") + "

¡¦ \\(.+\\)\"\"

+\\(.+\\) +\\([0-9]+\\)·î\\([0-9]+\\)Æü \\([0-9]+\\):\\([0-9]+\\)") ;;;###autoload (defun mixi-get-news (category sort &optional range) @@ -2970,17 +2999,80 @@ Increase this value when unexpected error frequently occurs." (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)))) + (let ((month-of-item (string-to-number (nth 4 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) + (mixi-make-news (nth 1 item) (nth 0 item) (nth 3 item) (encode-time - 0 (string-to-number (nth 9 item)) - (string-to-number (nth 8 item)) - (string-to-number (nth 7 item)) + 0 (string-to-number (nth 7 item)) + (string-to-number (nth 6 item)) + (string-to-number (nth 5 item)) month year) - (nth 3 item)))) + (nth 2 item)))) + items))) + +;; Release object. +(defun mixi-make-release (title time content) + "Return a release object." + (cons 'mixi-release (vector title time content))) + +(defmacro mixi-release-p (release) + `(eq (mixi-object-class ,release) 'mixi-release)) + +(defun mixi-release-title (release) + "Return the title of RELEASE." + (unless (mixi-release-p release) + (signal 'wrong-type-argument (list 'mixi-release-p release))) + (aref (cdr release) 0)) + +(defun mixi-release-time (release) + "Return the time of RELEASE." + (unless (mixi-release-p release) + (signal 'wrong-type-argument (list 'mixi-release-p release))) + (aref (cdr release) 1)) + +(defun mixi-release-content (release) + "Return the content of RELEASE." + (unless (mixi-release-p release) + (signal 'wrong-type-argument (list 'mixi-release-p release))) + (aref (cdr release) 2)) + +(defmacro mixi-release-list-page () + `(concat "/release_info.pl?page=%d")) + +(defconst mixi-release-list-regexp + " ¢£ \\(.+\\) +\\([1-9][0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\) + + + + + + +
+ + + + + +
+\\(.+\\) +
") + +;;;###autoload +(defun mixi-get-releases (&optional range) + "Get releases." + (let ((items (mixi-get-matched-items (mixi-release-list-page) + mixi-release-list-regexp + range))) + (mapcar (lambda (item) + (mixi-make-release (nth 0 item) + (encode-time 0 0 0 + (string-to-number (nth 3 item)) + (string-to-number (nth 2 item)) + (string-to-number (nth 1 item))) + (nth 4 item))) items))) (provide 'mixi)