twitterのtimelineを読み上げる。
xyzzyには服部氏のtwitter-modeがあるので、せっかくだからsoftalkに読み上げさせようと思う。
というわけで、まずは準備。素数を読み上げる。 - 象徴ヶ淵の*softalk*とcall-softalkは流用する。ちなみに、softalkの設定でファイル/オプションを使ってる場合は、適宜"/S:60 /T:0 /W:"とか適当に追加して欲しい。twitter-modeを読み込んでおく。起動しなくても、多分以下を実行すればよい。もちろん、idとpassは設定しておく。
(require "twitter/api") (junk::load-config-file twitter::*config-file*)
で、適当に作ったのがこちら。
(let (last-updates) (defun twit-get-last-updates () (multiple-value-bind (result status statuses) (twitter::statuses-friends_timeline twitter::*username* twitter::*password* t) (when result (if last-updates (let ((latest (#1=twitter::twstatus-id (car (last last-updates)))) it new) (if (loop (if (and (car statuses) (< latest (#1# (setq it (pop statuses))))) (push it new) (return new))) (setq last-updates new) nil)) (push (pop statuses) last-updates))))) (defun twit-talk-text () (format nil "~{~A。~}" (mapcar 'twit-shape-up last-updates))) (defun twit-softalk () (interactive) (let (txt) (if (twit-get-last-updates) (call-softalk (setq txt (twit-talk-text)))) (max 60 (* (length txt) 0.25))))) (defun twit-shape-up (x) (#1=substitute-string (#1# (#1# (concat (twitter::twuser-name (twitter::twstatus-user x)) "、" (twitter::twstatus-text x)) "http[^ ]+" "かっこリンク") "\\[.+\\]" "") "\\(@[^ ]+\\|…+\\|・・+\\)" "、"))
1回目の(twit-softalk)で自分のTLの最新の発言を発音し、2回目からは前回以降の発言を発音する。発言はtwit-shape-upで加工する。
で、定期的に発音させるために、また関数を作るのだが、若干使い回せるようにしてみる。次も多分作り直すけど・・・。
(defvar *softalk-func* 'twit-softalk) (defun softalk-loop () (start-timer (funcall *softalk-func*) 'softalk-loop t)) (defun toggle-softalk-timer () (interactive) (and (not (stop-timer 'softalk-loop)) *softalk-func* (softalk-loop)))
これで(toggle-softalk-timer)すれば良い。・・・あーうるさい。ゆっくりすぎて追いついてないしw