mixi メッセージにはたらく Greasemonkey
mixi メッセージってプレミアム会員じゃない限り削除されるのだね。知らなかった。というか気にしていなかった。
ということで。メッセージの詳細画面で使うと、テキストボックスやテキストエリアを追加表示する Greasemonkey を作ってみた。 Greasemonkey 0.8.20100211.5, Firefox 3.5.7, Thunderbird 2.0.0.23 がテスト環境。わたしにとって最も重要な Datula での試験をしていないけど、そこはどうにでも調整してやる。
// ==UserScript== // @name mixi message export helper // @namespace http://d.hatena.ne.jp/naglfar/ // @description v0.01 // @include http://mixi.jp/view_message.pl* // ==/UserScript== ( function(){ var container = document.getElementById("messageDetail"); m(); function m() { var vh = document.getElementsByTagName("dd"); var vd = new Date("1900/01/01 00:00:00"); var va = vh[1].getElementsByTagName("a")[0].getAttribute("href"); var vt = e(document.getElementsByTagName("h3")[0].firstChild.nodeValue); var vhb = document.getElementById("message_body").innerHTML; var vhh = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><body>'; var vhf = '</body></html>'; var vo = ""; var buf = vh[0].firstChild.nodeValue; vd.setFullYear(buf.substring(0, 4)); vd.setMonth(buf.substring(5, 7) - 1); vd.setDate(buf.substring(8, 10)); vd.setHours(buf.substring(12, 14)); vd.setMinutes(buf.substring(15, 17)); vo += "<form>" + "\r\n"; vo += '<input type="text" size="70" value="'; vo += va.substring(va.indexOf("id=") + 3); vo += '_'; vo += vd.getFullYear(); vo += f(vd.getMonth() + 1); vo += f(vd.getDate()); vo += f(vd.getHours()); vo += f(vd.getMinutes()); vo += '.txt'; vo += '" onfocus="select();">' + "\r\n"; vo += "<br />" + "\r\n"; vo += '<textarea rows="20" cols="70" onfocus="select();">' + "\r\n"; vo += "Date: "; vo += vd + "\r\n"; vo += "From: "; vo += e(vh[1].getElementsByTagName("a")[0].firstChild.nodeValue); vo += "<http://mixi.jp/"; vo += va; vo += ">" + "\r\n"; vo += "Subject: "; vo += vt + "\r\n"; vo += 'Content-Type: multipart/alternative; boundary="----=_NextPart_MIXI_MESSAGE"' + "\r\n"; vo += "\r\n"; vo += "------=_NextPart_MIXI_MESSAGE" + "\r\n"; vo += 'Content-Type: text/plain; charset="iso-2022-jp"' + "\r\n"; vo += "\r\n"; vo += e(vhb.replace(/[\r\n]/g, '').replace(/<br[ /]*>/g, '\r\n').replace(/<img src="http:\/\/img\.mixi\.jp\/img\/emoji\//gi, '[m:').replace(/\.gif".*class="emoji".*>/g, ']')) + "\r\n"; vo += "\r\n"; vo += "------=_NextPart_MIXI_MESSAGE" + "\r\n"; vo += 'Content-Type: text/html; charset="iso-2022-jp"' + "\r\n"; vo += "\r\n"; vo += e(vhh) + "\r\n"; vo += e(vhb) + "\r\n"; vo += e(vhf) + "\r\n"; vo += "\r\n"; vo += "------=_NextPart_MIXI_MESSAGE--" + "\r\n"; var divChild = document.createElement("div"); divChild.innerHTML = vo; container.appendChild(divChild); } function f(s) { return (s < 10 ? '0' + s : s); }; function e(s) { return s.replace(/</g, '<').replace(/>/g, '>').replace(/ /g, ' '); } }) ();
久しぶりにテキストエディタだけで書いたよ。入力支援なし。文字色の変更もしなかった。さすがにデバッグには Firebug を使ったけれど。
オレオレ仕様?……表示できればいいんだ、とりあえず、いまは。
ソースが汚い?……ごめんなさい。表示できれb(ry
ちなみに。圧縮でもしそうな雰囲気に仕上がったのは、途中まではソースの公開とか恥ずかしいから難読化ツールとか使おうと思っていたからだ。本来ならこんな短い命名しないし、マジックナンバーも使いたくない。本当だからね!
今でも難読化ツールは使いたい。面白そうだから。こんなコードにその価値はないけどね!でもその前に、まずきれいに書き直したいなあ。次の仕様変更に合わせて直すかな。
FIXME. タイムゾーンずれてる。ヘッダは jis-2022-jp エンコードすること。 box=outbox の場合は From を To にすること。メッセージIDが採番できないかどうか。してもあまり意味はないけど。