Lesson18.別のワークフローを呼び出す
ワークフロー
参考ワークフロー(Lesson10)
TV王国のRSSを利用して放送中の番組を取得します
このワークフローでは東京エリア地デジのRSSを利用していますので適宜修正してください
Alfredの出力フォーマットへのセットですが
タイトルに番組名、サブタイトルに放送時間、引数にチャンネルとしてみました
タイトルには思いの外、記号が含まれており、おかしな振る舞いをするかもしれません
そんなときには修正してくださいね
ロジックでわかりにくいのは、下記の部分だけだと思います
link=(1 ${link[@]})
これは、配列の添字をあわせるためのコーティングで、${link[@]}は配列全体なので、
その前に、要素として”1”を追加しています
つまり、配列の先頭の要素を追加するコードです
Script Filter
TVのチャンネル変更は、Lesson10で既に作成しているTVのリモコン with NatureRemoという
ワークフローを流用します
そのためには、呼び出されるワークフローに入口を設定する必要があります
TVのリモコンワークフローVer1.1の青い部分を追加しています
Externalオブジェクトが入口になります
IdentifierにChannelという名前をつけています
さらにワークフロー自体のIDも必要です
ワークフロー一覧でダブルクリックするとワークフローの概要が表示されますが、
中央付近のBundle IDが、ワークフローのIDとなります
<br> com.alfredapp.kitanotamotsu.tv
<br>
com.alfredapp.ユーザー名.ワークフロー名という感じが推奨れる表記ルールですが
一意であればなんでもOKです
External (Lesson10のワークフロー)
なにやらサンプルコードが目立ちますね。。気になったら下の方のおまけを見てね。
ここまで設定したら、呼び出す側のワークフローを作ります
Call Externalオブジェクトを配置して、
Workflow IDに、Bundle IDを、Trigger IDにIdentifierを記入すれば接続可能です
Call External
またTVのリモコンワークフローのKeywordオブジェクトと、
このワークフローのScriptFilterオブジェクトのキーワドを一致させることでシームレスな
利用をサポートしています
つまり、tvと入力するとScriptFilterオブジェクトのリターンである番組表を表示しつつも
そのまま ++で音量をあげるといった別ワークフローの機能も使えます(入力を受け付けます)
なお、今回は別のワークフローを呼び出すサンプルとしてこのような形にしましたが、
同じワークフローでも呼び出しは可能です
呼び出すワークフローを少しだけ修正しました
外から呼び出しようにしたので、その際発生したエラーを通知します
引数として受け取ったチャンネルがcaseのどれにも該当しない場合、エラーとしています
PostNotificationオブジェクトで{query}に何か入っている時だけ通知する機能があるので
それを利用したのですが、1点誤算がありました
正常なチャンネル変更の場合でも、CurlでNatureRemoのAPIをPOSTした際に
”{}”が引数となってしまうのです
仕方なくRunScriptオブジェクトでコントロールしましたが、ちょっと不恰好
Post Notification (Lesson10のワークフロー)
Run Script (Lesson10のワークフロー)
RSS関連のワークフローを作っている時に思いつきました
そうだ、TV番組一覧から好きな番組を選んで、チャンネル変更すると便利かも
思いついて、ちょっといじってみると、簡単にできてびっくりです
なお、ワークフロー接続は、アップルスクリプトからの接続も可能です
Alfredってよくできてますね
ということで、スクリプトからの呼び出しを試してみました
RandomTV.appというドロップレットです
適当にファイルをドロップすると、そのパス+ファイル名の文字数(9で割っ余り+1)でTVのチャンネル変更をします
RandomTV.appをautomatorで開くとスクリプトが見れますが、短いので以下に貼り付けます
tell部分がAlfredワークフローの呼び出し方です
on run {input, parameters}
set letters to input as text
set channel to (length of letters) mod 9 + 1
-- display dialog letters & " " & (length of letters) & " " & channel
tell application id "com.runningwithcrayons.Alfred" to run trigger "channel"
in workflow "com.alfredapp.kitanotamotsu.tv" with argument channel
end run
現在放送中のTV番組を表示させ、選択した番組へチャンネルを切り替える
1.Alfredworkflowをダウンロード
2.ファイルをダブルクリックしてワークフローに登録
前提として、TVのリモコン with NatureRemo.workflowのインストールが必要です
キーワード『tv』で起動
シェルスクリプトをbashからzshに変更しました
トップページに戻る