まえがき
Yahoo!デベロッパーネットワークが提供しているAPIが、indesign上でも動作するぞ!という噂を聞きました。
ですが、調べてみた限りネット上で紹介されている方法がMacのものばかりだったので、windowsで動作するよう関数を作成してみました。
Mac版のスクリプトとの違いはAppleScriptの代わりにVBSを利用するところのみなので、詳しい解説や使い方は他の方のブログや記事などを参考にしてください。
ざっくりとした処理の流れは、
- 変数に処理を書き込む
- doscriptメソッドでVBSを実行
- WinHttpからYahooAPIにPOSTリクエストを送る
- 結果を取得して返す
のような形です。
動作環境
・Indesign 18.064/17.064 で動作確認済み
サンプルコード
useApiTest.js
function httpRequest(input) {
var result = "";
var myinput = input;
var vbs = "";
vbs += "Public s\r";
vbs += 'Dim http: Set http = CreateObject("WinHttp.WinHttpRequest.5.1")\r';
vbs += 'Dim url: url = "https://jlp.yahooapis.jp/FuriganaService/V2/furigana"\r';
vbs +=
'Dim data : data = "{ ""id"": ""1234-1"", ""jsonrpc"": ""2.0"", ""method"": ""jlp.furiganaservice.furigana"", ""params"": { ""q"": ""' +
myinput +
'"", ""grade"": ""1"" } }"\r';
vbs += "With http\r";
vbs += '.Open "POST", url, False\r';
vbs += '.SetRequestHeader "Content-Type", "application/json"\r';
vbs += '.SetRequestHeader "User-Agent" , "Yahoo AppID: あなたの取得したYahoo AppID"\r';
vbs += ".Send data\r";
vbs += "End With\r";
vbs += "s = http.ResponseText\r";
vbs += 'Set objInDesign = CreateObject("InDesign.Application")\r';
vbs += 'objInDesign.ScriptArgs.SetValue "http_data", s\r';
app.doScript(vbs, ScriptLanguage.VISUAL_BASIC, undefined, UndoModes.FAST_ENTIRE_SCRIPT);
result = app.scriptArgs.getValue("http_data");
app.scriptArgs.clear();
return result;
}
alert(httpRequest("漢字混じりの文字列からふりがなを取得します。"));
Yahoo!デベロッパーネットワークでClient IDを取得してきて、上記コードのあなたの取得したYahoo AppID
の部分を置き換えるだけで動作すると思います。
あとはレスポンスを加工してよしなにしてください。
注意点
ESDebuggerでスクリプトを実行した際に「エンジンのxml が無効です」のメッセージが表示されたり、Indesign上で実行したときに何も結果が表示されないなど、うまく動作しないことがあります。
その場合は、以下の手順を実行して「Resources for Visual Basic.tlb
」を再作成することでうまく動作するようになるかもしれません。
手順
- 次のディレクトリに移動する
: C:\ProgramData\Adobe\InDesign\Version XX.X\xx_XX\Scripting Support\XX.X (または tlb ファイルが配置されている場所) - ファイル「Resources for Visual Basic.tlb」を削除する
- Indesignを管理者権限で起動する
以上
参考サイト
APIドキュメント
諸々の仕様の参考にさせて頂いたサイト