アクション メニュー アイテム(AMI)の非常に実用的なバージョンは、ローカル コンピュータ上でアプリケーションまたはスクリプトを実行するバリアントです。これを機能させるには、ブラウザと実行するスクリプトまたはアプリケーションとの間に接続をセットアップする必要があります。このリンクはカスタム ブラウザ プロトコルと呼ばれます。
たとえば、ユーザがクリックすると、[foo]アプリケーションが起動するようなリンクをセットアップするとします。プリフィックスに「http」ではなく、「foo」などのカスタム プロトコルを指定する必要があります。理想的には、次のようなリンクが必要です。
foo://some/info/here
.
オペレーティング システムにはプロトコルの処理方法を通知する必要があります。既定では、「http」は既定の Web ブラウザで処理され、「mailto」は既定のメール クライアントで処理されると、現在のすべてのオペレーティング システムは認識しています。アプリケーションがインストールされると、OS に登録され、特定のプロトコルでそのアプリケーションを起動するよう OS に指示する場合があります。
たとえば、RV をインストールした場合、アプリケーションは rvlink://
を OS に登録し、RV がすべての rvlink://
プロトコル要求を処理して RV にイメージまたはシーケンスを表示するように指示します。そのため、ユーザが Shotgun と同じように rvlink://
で始まるリンクをクリックすると、オペレーティング システムはこのリンクで RV を起動することを認識し、アプリケーションはこのリンクを解析して処理方法を認識できます。
RV が URL と「rvlink」プロトコルのプロトコル ハンドラとしてどのように機能するかの詳細については、RV のユーザ マニュアルを参照してください。
プロトコルを登録する
Windows 上でプロトコルを登録する
Windows でプロトコル ハンドラを登録するには、Windows レジストリを変更します。レジストリ キーは一般的に次のようになります。
HKEY_CLASSES_ROOT foo (Default) = "URL:foo Protocol" URL Protocol = "" shell open command (Default) = "foo_path" "%1"
ターゲット URL は次のようになります。
foo://host/path...
注: 詳細については、http://msdn.microsoft.com/ja/library/aa767914(VS.85).aspx を参照してください。
Windows QT/QSetting の例
開発しているアプリケーションが QT (または PyQT/PySide)フレームワークを使用して記述されている場合は、QSetting オブジェクトを利用してレジストリ キーの作成を管理できます。
アプリケーションがレジストリ キーを自動的にセットアップする場合のコードは次のようになります。
// cmdLine points to the foo path. //Add foo to the Os protocols and set foobar to handle the protocol QSettings fooKey("HKEY_CLASSES_ROOT\\foo", QSettings::NativeFormat); mxKey.setValue(".", "URL:foo Protocol"); mxKey.setValue("URL Protocol", ""); QSettings fooOpenKey("HKEY_CLASSES_ROOT\\foo\\shell\\open\\command", QSettings::NativeFormat); mxOpenKey.setValue(".", cmdLine);
Shotgun AMI を介して Python スクリプトを開始する Windows の例
ローカルで動作する AMI の多くは、Python インタプリタを介して単純な Python スクリプトを開始することができます。これにより、単純なスクリプトに加えて、GUI (PyQT、PySide、または選択した GUI フレームワーク)を使用したアプリも実行することができます。この目標のために役立つ実例を見てみましょう。
手順 1: カスタム「shotgun」プロトコルをセットアップする
Windows レジストリ エディターを使用します。
[HKEY_CLASSES_ROOT\shotgun] @="URL:shotgun Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\shotgun\shell] [HKEY_CLASSES_ROOT\shotgun\shell\open] [HKEY_CLASSES_ROOT\shotgun\shell\open\command] @="\"python\" \"sgTriggerScript.py\" \"%1\""
このセットアップでは、最初の引数がスクリプト sgTriggerScript.py
で、2 番目の引数が %1
である python
インタプリタを起動するための shotgun://
プロトコルが登録されます。%1
が、ブラウザでクリックされた URL または呼び出された AMI の URL に置き換えられることを理解することが重要です。これが Python スクリプトの最初の引数になります。
注: Python インタプリタと Python スクリプトへのフル パスが必要となる場合があります。適宜調整してください。
手順 2: Python スクリプトで受信 URL を解析する
スクリプト内で、指定された最初の引数である URL を取得し、AMI が呼び出されたコンテキストを把握するためにそのコンポーネントまで解析します。次のコードに、これを行う方法を示す簡単なスクリプトの例を示しています。
Python スクリプト
import sys import urlparse import pprint def main(args): # Make sure we have only one arg, the URL if len(args) != 1: return 1 # Parse the URL: protocol, fullPath = args[0].split(":", 1) path, fullArgs = fullPath.split("?", 1) action = path.strip("/") args = fullArgs.split("&") params = urlparse.parse_qs(fullArgs) # This is where you can do something productive based on the params and the # action value in the URL. For now we'll just print out the contents of the # parsed URL. fh = open('output.txt', 'w') fh.write(pprint.pformat((action, params))) fh.close() if __name__ == '__main__': sys.exit(main(sys.argv[1:]))
手順 3: Shotgun インタフェースをカスタム プロトコルと接続し、最終的にスクリプトと接続する
最後に、URL 値が shotgun://processVersion
になる Shotgun の AMI を作成します。この AMI は任意のエンティティ タイプに割り当てることができますが、この例ではバージョン エンティティを使用します。
バージョン ページに移動し、バージョンを右クリックして、メニューから AMI を選択します。これにより、ブラウザで shotgun://
URL が開かれ、登録されたカスタム プロトコルを介してスクリプトにリダイレクトされます。
スクリプトと同じフォルダにある output.txt
ファイルの内容が、次のようになります。
('processVersion', {'cols': ['code', 'image', 'entity', 'sg_status_list', 'user', 'description', 'created_at'], 'column_display_names': ['Version Name', 'Thumbnail', 'Link', 'Status', 'Artist', 'Description', 'Date Created'], 'entity_type': ['Version'], 'ids': ['6933,6934,6935'], 'page_id': ['4606'], 'project_id': ['86'], 'project_name': ['Test'], 'referrer_path': ['/detail/HumanUser/24'], 'selected_ids': ['6934'], 'server_hostname': ['patrick.shotgunstudio.com'], 'session_uuid': ['9676a296-7e16-11e7-8758-0242ac110004'], 'sort_column': ['created_at'], 'sort_direction': ['asc'], 'user_id': ['24'], 'user_login': ['shotgun_admin'], 'view': ['Default']})
考えられるバリエーション
AMI で URL の //
の後にあるキーワードを変更することで、同じ shotgun://
プロトコルを維持したままスクリプト内の action
変数の内容を変更し、単一のカスタム プロトコルのみを登録することができます。これにより、action
変数の内容とパラメータの内容に基づいて、スクリプトが意図された動作を把握できます。
この方法を使用することで、アプリケーションの起動、FTP などのサービスを介したコンテンツのアップロード、データのアーカイブ、電子メールの送信、または PDF レポートの生成を行うことができます。
Mac OSX 上でプロトコルを登録する
Mac OSX でプロトコルを登録するには、アプリケーションまたはスクリプトを実行するように設定された .app バンドルを作成する必要があります。
まず、AppleScript スクリプト エディタで次のスクリプトを記述します。
on open location this_URL do shell script "sgTriggerScript.py '" & this_URL & "'" end open location
上級者向けのヒント: tcsh などの特定のシェルから Python を確実に実行するには、do シェル スクリプトを次のように変更します。
do shell script "tcsh -c \"sgTriggerScript.py '" & this_URL & "'\""
スクリプト エディタで、この短いスクリプトを「アプリケーション バンドル」として保存します。
保存したアプリケーション バンドルを見つけて、Open Contents を選択します。次に、info.plist ファイルを開き、次のコードを plist dict に追加します。
<key>CFBundleIdentifier</key> <string>com.mycompany.AppleScript.Shotgun</string> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>Shotgun</string> <key>CFBundleURLSchemes</key> <array> <string>shotgun</string> </array> </dict> </array>
次の 3 つの文字列を変更することもできます。
com.mycompany.AppleScript.Shotgun Shotgun shotgun
3 番目の文字列はプロトコル ハンドラです。そのため、URL は次のようになります。shotgun://something
最後に、.app
バンドルを Mac のアプリケーション フォルダに移動します。このバンドルをダブルクリックすると、プロトコルがオペレーティング システムに登録されます。
Shotgun で AMI をクリックするか、shotgun://
で始まる URL をクリックすると、.app
バンドルがそれに応答して URL を Python スクリプトに渡す、というようなデータ フローになります。この時点で、Windows の例で使用したものと同じスクリプトを使用でき、同じことができるようになります。
Linux 上でプロトコルを登録する
次のコードを使用します。
gconftool-2 -t string -s /desktop/gnome/url-handlers/foo/command 'foo "%s"' gconftool-2 -s /desktop/gnome/url-handlers/foo/needs_terminal false -t bool gconftool-2 -s /desktop/gnome/url-handlers/foo/enabled true -t bool
次に、次の場所にあるグローバル既定値にローカル GConf ファイルの設定を使用します。/etc/gconf/gconf.xml.defaults/%gconf-tree.xml
この変更は GNOME 設定でのみ行われますが、KDE でも機能します。Firefox と GNU IceCat は、不明なプレフィックス(foo://
など)を検出したときに、実行しているウィンドウ マネージャに関係なく gnome-open に従います。そのため、KDE の Konqueror のような他のブラウザは、このシナリオでは機能しません。
Ubuntu でアクション メニュー アイテムのプロトコル ハンドラをセットアップする方法については、http://askubuntu.com/questions/527166/how-to-set-subl-protocol-handler-with-unity を参照してください。