Welcome, Otto's Remote!!

Otto って Automator のあのロボット君の名前ですよね?

Automator アイコン

iOS デバイスから Mac のスクリプトを実行させる...。こういうアプリケーションがなかったため、一時期自分で作ってやろうかと本気で考えておりました。まあ、三日であきらめましたが。

そういうアプリケーションが存在するということを AS Hole さんの記事で知りました。

Otto's RemoteOtto's Antenna の導入や使い方、現状での問題点などはこの記事を参照していただくと一目瞭然。ここではこの記事で触れられていないことを取り上げます。

Otto's Remotex-callback-url に対応しているんですよね。これは地味にうれしい。現状では Automator とシェルには引数を(文字列として)渡すことができます。が、AppleScript には引数を渡すことができません。

しかし、x-callback-url を使うと AppleScript にも引数を渡すことができます。

以下のようなスクリプトを Mac 上に用意し、Otto's Antenna が利用するフォルダ(~/Library/Application Scripts/com.amolloy.ottosantenna/)に保存します。

Script Editor で開く

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 上に次のようなスクリプトを用意します。

Script Editor で開く

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 を動かす...。なんだか、妄想が広がりますね。