それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。
") }) jQuery.noConflict()(document).ready(function(){ /**ページャーが気に入らないので修正**/ //やるべきこと // pre・next のいれかえ jQuery('span.pager-next').insertAfter('span.pager-prev') // pre/next に矢印を入れる jQuery('a[rel=next]').text(jQuery('a[rel=next]').text()+"> ") jQuery('a[rel=prev]').text("< "+jQuery('a[rel=prev]').text()) // pre/next をヘッダにもってくる //jQuery(".date.first").css("display","inline-block") jQuery('div.permalink.pager').clone().insertAfter(".date.first") jQuery("header .pager a").css("padding","0px 15px"); //pre/next をAjaxで取得してタイトルを取る。 //取得したタイトルをpre/next のタイトルに jQuery('span.pager-next,span.pager-prev').css("display","inline-block") jQuery('span.pager-next,span.pager-prev').css("width","250px"); jQuery('span.pager-next,span.pager-prev').css("overflow", "hidden"); jQuery('span.pager-next,span.pager-prev').css("white-space", "nowrap"); jQuery('span.pager-next,span.pager-prev').css("text-overflow", "ellipsis"); jQuery("a[rel=next],a[rel=prev]").each(function(idx,e){ var anchor = e jQuery.get(anchor.href,null,function(html){ jQuery(anchor).text() var title = jQuery("
").html(html).find(".entry-title").text().trim() jQuery(anchor).attr("title", title); text = jQuery(anchor).text() text = text.slice(0,10); text = text.replace(/の記事/, "の記事 ["+title+"] "); jQuery(anchor).text(text) }) }); }); })

MHTMLの実際

Yahoo!JapanをMHTMLにしてみた

WSH使ったスクリプト、mht.js

///////////JSからCDOを使って、MHTMLを作成する
var obj = WScript.CreateObject("CDO.Message");
var filename = "test.mht";
var url = "http://www.yahoo.co.jp/";
obj.MimeFormatted = true;
obj.CreateMHTMLBody( url, 0, "", "" );
obj.GetStream().SaveToFile( filename, 1 );

出来上がったMHTMLの中身

thread-index: AcgKhmRFFkspMVI3QSeZX/AcFCZgwg==
MIME-Version: 1.0
Content-Type: multipart/related;
	boundary="----=_NextPart_000_0001_01C80AD1.D4E21C90"
Content-Location: http://www.yahoo.co.jp/
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138

This is a multi-part message in MIME format.

------=_NextPart_000_0001_01C80AD1.D4E21C90
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_0002_01C80AD1.D4E21C90"


------=_NextPart_001_0002_01C80AD1.D4E21C90
Content-Type: text/plain;
	charset="euc-jp"
Content-Transfer-Encoding: base64

pLOkzqXaobyluKTypbmlv6G8pcil2qG8pbiky8DfxOqkuaTrpLOkzqXaobyluKTypbmlv6G8pcil
2qG8pbiky8DfxOqkuaTrDQqkqsbApMfK2M34pMqltaG8pdOluaSspKSkw6TRpKQJIA0KCSANCgkg
DQoJIA0KWWFob28hIEpBUEFOIA0KCSANCg0KDQoNCltuZXddy9zG/KXJpeml3qTis6u7z6GqocjG
r6Stpd6l86HJpL+kwaSszLTD5qTLpMqk67DCzO6l4qXopbOkzsCks6YgLSBbbmV3XcG0ufGkzsDk
t8q5yM3Vpbml3aXDpci+8MrzIAkNCgkgDQoJDQoJICAgICAJpaalp6XWuKG69yAJILihuvelqqXX
pbel56XzCSANCgkgDQoJIMXQz7+ltaWkpcgJIAkgsujB/AkgCSDGsLLoCSAJIKXWpe2lsA0KvK29
8QkgCSDDzrfDwt4JIAkgw8+/3gkgCSC+psnKCSAJIA0KpcShvKXrpdChvKTLv7e1oce9xeu63KGi

..(以下略

HTTPのHEADERと何ら変わらない。

もしかしてHTTP通信内容をそのまま保存するだけでMHTMLになる?
わざわざ、CDOオブジェクト作らなくても良いかも?

HTTPのMultipart/Formにソックリ

HTTPでフォームのファイル送受信の内容にソックリ。当たり前か。
メソッドがCDO.GetStream().SaveToFile()なのでStreamを直接保存してるだけだな


IEのオートパイロット中にTCP/IPをDUMPすれば?

CDO.Messageはなにするもの?

@IT:Windows TIPS -- Tips:Windows標準機能とWSHを使ってメールを送信する
http://www.atmarkit.co.jp/fwin2k/win2ktips/428wshmail/wshmail.html

Windowsシステムに含まれるCDOコンポーネントを利用することで、WSHスクリプトからメールを送信することができる。

どうやらメール送信ライブラリらしい。

じゃぁ、ほかのHTMLメール送信ライブラリでも?

ここは仮定。明日から調べる

  1. CPANのMIMEメール関連のライブラリ
  2. PHPのMIMEライブラリ
  3. PythonのMIMEライブラリ

などを使えばMHTMLの読み書きが出来る?

ただ、HTMLに必要なJSやCSSを抽出したり、パスを解決するのが面倒。
LWPもfile_get_content()もHTMLファイルだけで、そのほかのファイルの読み込みをサポートしてくれない


逆に言うと、リンクパスを解決するライブラリを持つ言語は、MHTMLパッケージを簡単に作れるってこと

ならばどうする?

いまのところCDO.MessageやOfficeをWSHで呼び出すのが安定。
IE/Operaを操作し、URLを保存するもOK。(IEは非表示で起動できるし)

ただし、FireFoxは未対応(これ重要、拡張パッケージで解決するはず)

Perlならライブラリ多いよ?

パス解決するライブラリが一番多そう。だけどCPANはLinuxがメイン
WindowsだとWSHかIronPythonが候補。
PHPはバッチ処理に向かない。

LinuxでMHTML形式を使うなら、Perlか?しかしパッケージがない。

作れと?こんな感じ?

use MHTML;
my $mhtml = get_mht "http://yahoo.co.jp" ;

id:miyagawaサンが作ってくれないかと期待しとく。