ExtendScript には Socket があるので、http のように SSL でない ウェブリソースにアクセスすることができる。 しかし、SSL 化された https のウェブリソースにはアクセスする方法がない・・・と思っていたのだが、 なんと macOS では curl を経由すれば簡単にできることが判明した。
Windowsの場合も VBScript を経由することで実現できるようです。 詳しくは restix をご覧ください。
https のウェブリソースに ExtendScript からアクセスできることを示すちょうど良いウェブサービスがありました。 wttr.in という天気予報のウェブサービスで、 たとえば https://wttr.in/nagoya にアクセスするだけで(この例では)名古屋の天気情報を得ることができます。 ブラウザだけでなく、curl でターミナルからアクセスしてもブラウザと同様に天気情報を得ることができます。 このように:
それでは、この wttr.in のサービスを使って得た天気情報を InDesign ドキュメントに ExtendScript を使って反映するコードです。
main.jsx:
//@target InDesign
var url = 'https://wttr.in/nagoya?T0';
var curlCmd = 'curl '+url;
var result = app.doScript('do shell script "'+curlCmd + '"', ScriptLanguage.APPLESCRIPT_LANGUAGE);
$.writeln(result);
VSCode で実行すると、以下のように出力されます。
難なく https のウェブリソースを ExtendScript で取得できています。 からくりはコードの通りですが、要するに、ExtendScript の app.doScript を使って AppleScript 経由で curl のコマンドを実行し、 結果を取得しているだけです。
せっかくなので、コンソールに結果を出すだけでなく InDesign ドキュメントに反映してみましょう。
main.jsx:
//@target InDesign
var url = 'https://wttr.in/nagoya?T0';
var curlCmd = 'curl '+url;
var result = app.doScript('do shell script "'+curlCmd + '"', ScriptLanguage.APPLESCRIPT_LANGUAGE);
$.writeln(result);
// 以下で取得した結果をInD文書に作成.
var params = {};
params.documentPreferences = {pageWidth:"160mm", pageHeight:"160mm", facingPages:false};
var doc = app.documents.add(params);
var page = doc.pages.item(0);
page.marginPreferences.properties = {top:"10mm", left:"10mm", bottom:"10mm", right:"10mm"};
var textFrame = page.textFrames.add({geometricBounds:["10mm","10mm","150mm","150mm"]});
textFrame.contents = result;
for( var i=0; i<textFrame.paragraphs.length; i++ ){
var paragraph = textFrame.paragraphs[i];
paragraph.pointSize = 16;
paragraph.appliedParagraphStyle.appliedFont = app.fonts.item('Andale Mono');
}
取得した結果を、新規のInDesignドキュメントのテキストフレームに入れているだけです。
この機能を使えば、google docs の spreadsheet と InDesign との連携アプリケーションを作成できることになる。