-;; mixi-utils.el --- Utilities for mixi object
+;; mixi-utils.el --- Utilities for mixi object -*- coding: euc-jp -*-
-;; Copyright (C) 2007 OHASHI Akira
+;; Copyright (C) 2007, 2008 OHASHI Akira
;; Author: OHASHI Akira <bg66@koka-in.org>
;; Keywords: hypermedia
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, you can either send email to this
-;; program's maintainer or write to: The Free Software Foundation,
-;; Inc.; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
(put 'with-mixi-class 'lisp-indent-function 'defun)
(put 'with-mixi-class 'edebug-form-spec '(body))
+(defun mixi-make-objects (url-or-function &optional range)
+ (if (stringp url-or-function)
+ (let ((object (mixi-make-object-from-url url-or-function)))
+ (with-mixi-class object
+ (cond ((eq class 'mixi-friend)
+ (mixi-get-diaries object range))
+ ((eq class 'mixi-community)
+ (mixi-get-bbses object range))
+ ((mixi-parent-p object)
+ (mixi-get-comments object range))
+ (t (error (concat (symbol-name class)
+ " is not supported yet."))))))
+ (funcall url-or-function range)))
+
(defun mixi-make-title (object &optional add-parent)
(with-mixi-class object
(cond ((eq class 'mixi-comment)
(subject (mixi-object-title object))
(suffix (when add-parent
(concat " ("
- (if (eq class 'mixi-diary)
- (mixi-friend-nick
- (mixi-diary-owner object))
- (mixi-community-name
- (mixi-bbs-community object)))
+ (cond ((eq class 'mixi-diary)
+ (mixi-friend-nick
+ (mixi-diary-owner object)))
+ ((eq class 'mixi-news)
+ (mixi-news-media object))
+ (t
+ (mixi-community-name
+ (mixi-bbs-community object))))
")"))))
(concat prefix subject suffix))))))
-(defun mixi-make-author (object)
+(defun mixi-make-author (object &optional add-comment-count)
(with-mixi-class object
- (if (eq class 'mixi-news)
- (mixi-news-media object)
- (let ((owner (if (eq class 'mixi-log)
- (mixi-log-friend object)
- (mixi-object-owner object))))
- (mixi-friend-nick owner)))))
+ (cond ((eq class 'mixi-news)
+ (mixi-news-media object))
+ ((and add-comment-count
+ (eq class 'mixi-comment)
+ (mixi-bbs-p (mixi-comment-parent object)))
+ (concat (mixi-comment-count object) " "
+ (mixi-friend-nick (mixi-comment-owner object))))
+ ((eq class 'mixi-release)
+ "mixi±¿±Ä»ö̳¶É")
+ (t
+ (let ((owner (if (eq class 'mixi-log)
+ (mixi-log-friend object)
+ (mixi-object-owner object))))
+ (mixi-friend-nick owner))))))
(defun mixi-make-date (object)
(let* ((time (mixi-object-time object))
month " "
(format-time-string "%Y %H:%M:%S %z" time))))
-(defun mixi-make-message-id (object)
+(defun mixi-make-id-1 (object)
(with-mixi-class object
(concat
- (format-time-string "<%Y%m%d%H%M" (mixi-object-time object)) "."
+ (format-time-string "%Y%m%d%H%M" (mixi-object-time object)) "."
(cond ((eq class 'mixi-comment)
(concat (mixi-friend-id (mixi-comment-owner object)) "@"
(mixi-object-id (mixi-comment-parent object)) "."
(mixi-comment-parent object))) "."))
((eq class 'mixi-log)
(concat (mixi-friend-id (mixi-log-friend object)) "@"))
+ ((eq class 'mixi-release)
+ (concat (md5 (mixi-release-title object)) "@"))
(t
(concat (mixi-object-id object) "@"
(if (eq class 'mixi-news)
(mixi-news-media-id object)
(mixi-object-id (mixi-object-owner object))) ".")))
- (mixi-object-name object) ".mixi.jp>")))
+ (mixi-object-name object))))
+
+(defun mixi-make-message-id (object)
+ (format "<%s.mixi.jp>" (mixi-make-id-1 object)))
+
+(defun mixi-make-tag-uri (object)
+ (format "tag:mixi.jp,%s:%s"
+ (format-time-string "%Y-%m-%d" (mixi-object-time object))
+ (mixi-make-id-1 object)))
(defun mixi-make-url (object)
(with-mixi-class object
(mixi-expand-url (mixi-message-page object)))
((eq class 'mixi-news)
(mixi-news-page object))
+ ((eq class 'mixi-release)
+ (let ((url (mixi-release-list-page)))
+ (mixi-expand-url (substring url 0
+ (string-match "?" url)))))
((eq class 'mixi-log)
(mixi-expand-url (mixi-friend-page (mixi-log-friend object))))
((eq class 'mixi-friend)
(mixi-expand-url (mixi-friend-page object))))))
+(defun mixi-make-encoded-url (object)
+ (mixi-url-encode-string (mixi-make-url object)))
+
(defun mixi-make-content (object)
(with-mixi-class object
(cond ((eq class 'mixi-event)
- (let ((limit (mixi-event-limit object)))
- (setq limit (if limit
- (format-time-string "%Yǯ%m·î%dÆü" limit)
- "»ØÄê¤Ê¤·"))
- (concat "<dl>"
- "<dt>³«ºÅÆü»þ¡§</dt>"
- "<dd>" (mixi-event-date object) "</dd>\n"
- "<dt>³«ºÅ¾ì½ê¡§</dt>"
- "<dd>" (mixi-event-place object) "</dd>\n"
- "<dt>¾ÜºÙ¡§</dt>"
- "<dd>" (mixi-event-detail object) "</dd>\n"
- "<dt>Ê罸´ü¸Â¡§</dt>"
- "<dd>" limit "</dd>\n"
- "<dt>»²²Ã¼Ô¡§</dt>"
- "<dd>" (mixi-event-members object) "</dd>\n"
- "</dl>")))
+ (concat "<dl>"
+ "<dt>³«ºÅÆü»þ¡§</dt>"
+ "<dd>" (mixi-event-date object) "</dd>\n"
+ "<dt>³«ºÅ¾ì½ê¡§</dt>"
+ "<dd>" (mixi-event-place object) "</dd>\n"
+ "<dt>¾ÜºÙ¡§</dt>"
+ "<dd>" (mixi-event-detail object) "</dd>\n"
+ "<dt>Ê罸´ü¸Â¡§</dt>"
+ "<dd>" (mixi-event-limit object) "</dd>\n"
+ "<dt>»²²Ã¼Ô¡§</dt>"
+ "<dd>" (mixi-event-members object) "</dd>\n"
+ "</dl>"))
((eq class 'mixi-friend)
(if (mixi-object-realized-p object)
(let ((sex (if (eq (mixi-friend-sex object) 'male) "ÃË" "½÷"))
- (age (number-to-string (mixi-friend-age object)))
- (birthday
- (concat (mapconcat (lambda (number)
- (number-to-string number))
- (mixi-friend-birthday object) "·î")
- "Æü"))
- (blood-type (symbol-name
- (mixi-friend-blood-type object)))
+ (age (if (numberp (mixi-friend-age object))
+ (number-to-string (mixi-friend-age object))
+ "??"))
+ (birthday (if (mixi-friend-birthday object)
+ (concat
+ (mapconcat (lambda (number)
+ (number-to-string number))
+ (mixi-friend-birthday object)
+ "·î") "Æü")
+ "??·î??Æü"))
+ (blood-type (if (mixi-friend-blood-type object)
+ (symbol-name
+ (mixi-friend-blood-type object))
+ "?"))
(hobby (mapconcat 'identity
(mixi-friend-hobby object) ", ")))
(concat "<dl>"
"</dl>"))
(concat "<a href=\"" (mixi-make-url object)
"\">¥×¥í¥Õ¥£¡¼¥ë¤òɽ¼¨¤¹¤ë</a>")))
+ ((eq class 'mixi-log)
+ (mixi-make-content (mixi-log-friend object)))
(t (mixi-object-content object)))))
(defun mixi-make-reply-to (object)
(mixi-friend-id (mixi-message-owner object))))
((or (eq class 'mixi-friend) (eq class 'mixi-log))
(concat mixi-reply-to "message;"
- (mixi-friend-id object))))))))
+ (mixi-friend-id object)))
+ (t
+ (concat mixi-reply-to "diary")))))))
+
+(defconst mixi-to-regexp
+ "^mixi;\\([a-z]+\\);?\\([a-z0-9]+\\)?;?\\([0-9]+\\)?;?\\([0-9]+\\)?")
+
+(defun mixi-send-mail (to title content)
+ (when (string-match mixi-to-regexp to)
+ (let ((method (match-string 1 to)))
+ (cond ((string= method "comment")
+ (let ((parent (match-string 2 to))
+ (owner-id (match-string 3 to))
+ (id (match-string 4 to)))
+ (if (string= parent "diary")
+ (mixi-post-comment
+ (mixi-make-diary (mixi-make-friend owner-id) id) content)
+ (let ((func (intern
+ (concat mixi-object-prefix "make-" parent))))
+ (mixi-post-comment
+ (funcall func (mixi-make-community owner-id) id)
+ content)))))
+ ((string= method "topic")
+ (mixi-post-topic (mixi-make-community (match-string 2 to))
+ title content))
+ ((string= method "diary")
+ (mixi-post-diary title content))
+ ((string= method "message")
+ (mixi-post-message (mixi-make-friend (match-string 2 to))
+ title content))))))
(provide 'mixi-utils)