Otto って Automator のあのロボット君の名前ですよね?
iOS デバイスから Mac のスクリプトを実行させる...。こういうアプリケーションがなかったため、一時期自分で作ってやろうかと本気で考えておりました。まあ、三日であきらめましたが。
そういうアプリケーションが存在するということを AS Hole さんの記事で知りました。
Otto's Remote と Otto's Antenna の導入や使い方、現状での問題点などはこの記事を参照していただくと一目瞭然。ここではこの記事で触れられていないことを取り上げます。
Otto's Remote は x-callback-url に対応しているんですよね。これは地味にうれしい。現状では Automator とシェルには引数を(文字列として)渡すことができます。が、AppleScript には引数を渡すことができません。
しかし、x-callback-url を使うと AppleScript にも引数を渡すことができます。
以下のようなスクリプトを Mac 上に用意し、Otto's Antenna が利用するフォルダ(~/Library/Application Scripts/com.amolloy.ottosantenna/)に保存します。
on run {arg}
tell me
activate
display dialog arg
end tell
end run
iOS デバイス上から以下の URL を開きます。
otto://x-callback-url/action?computer=[Mac の名前]&action=[スクリプト名]&argument1=[引数1]
computer と action、argument1 に渡す値は適宜変更してください。この URL を開くと Otto's Remote が起動し、指定したスクリプトに指定した引数を渡して実行されます。引数は複数でも大丈夫です。複数の場合は、
otto://x-callback-url/action?computer=[Mac の名前]&action=[スクリプト名]&argument1=[引数1]&argument2=[引数2]...
となります。引数は URL エンコードしておく必要があります。
AppleScript といっても現在ではシェルスクリプトとしても利用できるので、このようなことができます。x-callback-url を利用しなければいけないという制限はあるものの、逆に言えば利用範囲は広がります。
x-callback-url というのは iOS デバイス上でのアプリ間連携に関するプロトコルですので、なんらかのアプリで利用したデータを Otto's Remoteに渡し、Mac 上の AppleScript で処理ということができるようになります。
ちょっとした例として、現在地を Mac 上のファイルに追記して行くスクリプトを。
iOS 上で簡単に現在地を取得できるようなアプリがあればいいのですが、ここでは Pythonista というアプリを利用します。
このアプリは iOS 上で Python が実行できるアプリで、特筆すべきは iOS 上のいろんな機能(アドレス帳、通知センター、GPS、クリップボード、写真等々...)にアクセスすることができることです。
URL スキームも持っているので作成したスクリプトをいろんなところから実行することができます。ちょっと準備が手間ですが、やってみましょう。
まず、Mac 上に次のようなスクリプトを用意します。
property filename : "GPS_LOG.txt"
property directory : path to desktop folder as text
on run {lat, long}
set theDate to (current date) as text
set theText to theDate & "," & (lat as text) & "," & (long as text)
try
set fh to open for access file (directory & filename) with write permission
if (get eof fh) is 0 then
write theText to fh as «class utf8»
else
set eof fh to (get eof fh) + 1
set theText to (string id 10) & theText
write theText to fh as «class utf8» starting at eof
end if
close access fh
on error
close access fh
end try
display notification "GPS を追記しました" with title "GPS"
delay 1
end run
これを GPS という名前で保存しておきます。
次に iOS デバイス上の Pythonista で次のようなスクリプトを作成します。
import location
import time
import webbrowser
url = 'otto://x-callback-url/action?computer=[YOUR MAC NAME]&action=GPS&argument1='
location.start_updates()
time.sleep(2)
current = location.get_location()
location.stop_updates()
url = url + str(current['latitude']) + '&argument2=' + str(current['longitude'])
webbrowser.open(url)
URL の Mac の名前は適宜変更してください。
最後に Launch Center Pro のようなランチャーアプリで URL スキームを登録。
pythonista://GPS?action=run
実行すると Pythonista が起動し、スクリプトが実行され、Otto's Remote が起動し、現在地を Mac 上のスクリプトに送信し、ファイルに経度と緯度を追記します。
単純に位置情報が欲しいだけなら他にも方法があるでしょうけど...。
AppleScript の実行結果を iOS デバイス上で受け取ることはできませんが、これはどうとでもなる問題でしょう。結果をメモ.app を使って iCloud で同期とか、Dropbox を利用する、メールや SMS でもいいでしょう。
このように iOS デバイス上のアプリを組み合わせて Mac 上の AppleScript を動かす...。なんだか、妄想が広がりますね。