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メール送信ライブラリでも?
ここは仮定。明日から調べる
などを使えば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サンが作ってくれないかと期待しとく。