AlfredWorkflowで遊ぶページ

Lesson18.別のワークフローを呼び出す

サンプル動画

開発メモ

ワークフロー


参考ワークフロー(Lesson10)

1.TV番組の取得と表示

 TV王国のRSSを利用して放送中の番組を取得します
 このワークフローでは東京エリア地デジのRSSを利用していますので適宜修正してください 

 Alfredの出力フォーマットへのセットですが
 タイトルに番組名、サブタイトルに放送時間、引数にチャンネルとしてみました
 タイトルには思いの外、記号が含まれており、おかしな振る舞いをするかもしれません
 そんなときには修正してくださいね
 ロジックでわかりにくいのは、下記の部分だけだと思います

 link=(1 ${link[@]})


 これは、配列の添字をあわせるためのコーティングで、${link[@]}は配列全体なので、
 その前に、要素として”1”を追加しています
 つまり、配列の先頭の要素を追加するコードです
 
 Script Filter
 

2.別のワークフローを呼び出す

 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オブジェクトのリターンである番組表を表示しつつも
 そのまま ++で音量をあげるといった別ワークフローの機能も使えます(入力を受け付けます)

 なお、今回は別のワークフローを呼び出すサンプルとしてこのような形にしましたが、
 同じワークフローでも呼び出しは可能です

3.エラーを通知させる

 呼び出すワークフローを少しだけ修正しました
 外から呼び出しようにしたので、その際発生したエラーを通知します
 引数として受け取ったチャンネルが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』で起動

修正履歴

ver1.1(2021-04-04):

 シェルスクリプトをbashからzshに変更しました

トップページに戻る