Socketオブジェクトで遊ぶ。いや遊ばれる
Extend Script Toolkit 2 のヘルプで Core JavaScript Classes を見てたのだが、「え? Socketオブジェクトがあるの?」ということで調査開始!
リファレンスの該当ページはすぐ見つかった。Extend Script Toolkit 2 がインストールされているフォルダの、「SDK」フォルダの中、「JavaScript Tools Guide CS3.pdf」がそれだ。その180ページ目にSocketオブジェクトがある。270ページにはSocketオブジェクトはBridge、InDesign、After Effectsで使えると書いてある。これは試してみねばなるまい。
早速リファレンスのサンプルを応用して、htmlファイルを取得し、それをInDesignのテキストフレームに流し込むことにしよう。
reply = ""; conn = new Socket; if (conn.open ("www15.ocn.ne.jp:80","UTF-8")) { conn.write ("GET /~preopen/index.html HTTP/1.0\n\n"); reply = conn.read(999999); conn.close(); } txf = app.activeDocument.textFrames[0]; txf.contents = reply;
とやってみた。おお、見事にテキストフレームにhttpリクエストとhtmlのテキストが書き込まれているぞ。でも日本語は化けている。当たり前だ、自分のホームページはシフトJIS※で書いてあるからな。それをUTF-8で取得したから当然文字化けするわな。ではUTF-8の代わりにデフォルトのASCII、またbinaryでも試してみる。うまくいかない。ためしにunescape関数やdecodeURI関数をかませてみてもダメ。
それならブログのほうはどうだ? これはUTF-8だぞ。ところが302エラー。せうぞーさんのところもYUJIさんのところも302エラー。どうもサーバーとドメインの関係で、取得できないっぽい。
それじゃあ、サンプルに戻ってアドビのページにしようとwww.adobe.com/ja/index.htmlを試す。お、うまくいったかな? と思ったら、日本語部分が消えてる!
苦闘4時間(でもないか)、結局成功できずじまい。ああ、これができたらやりたいこといっぱいあるのにな。
2008.10.14 11:21 追記
関連記事が書き込まれています。
[InDesign][AppleScript][ruby]WebサイトのコンテンツをInDesignに取り込む
InDesignでSocketクラスの上位クラスを作りHTTPでアクセス – CLの日記
ひえー、難しいよー。自分の無知を思い知らされてます。もっと勉強しなくちゃ。
※公開時のサイトの場合。