Home About
InDesign , ExtendScript

ExtendScript から https にアクセスする

ExtendScript には Socket があるので、http のように SSL でない ウェブリソースにアクセスすることができる。 しかし、SSL 化された https のウェブリソースにはアクセスする方法がない・・・と思っていたのだが、 なんと macOS では curl を経由すれば簡単にできることが判明した。

Windowsの場合も VBScript を経由することで実現できるようです。 詳しくは restix をご覧ください。

wttr.in with vscode

wttr.in で天気予報を取得

https のウェブリソースに ExtendScript からアクセスできることを示すちょうど良いウェブサービスがありました。 wttr.in という天気予報のウェブサービスで、 たとえば https://wttr.in/nagoya にアクセスするだけで(この例では)名古屋の天気情報を得ることができます。 ブラウザだけでなく、curl でターミナルからアクセスしてもブラウザと同様に天気情報を得ることができます。 このように:

wttr.in with curl

天気情報をInDesignドキュメント反映

それでは、この 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 で実行すると、以下のように出力されます。

wttr.in with 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ドキュメントのテキストフレームに入れているだけです。

wttr in InDesign

まとめ

この機能を使えば、google docs の spreadsheet と InDesign との連携アプリケーションを作成できることになる。