Alfred2のWorflowsを自作して作業を効率化する

Alfred2のWorflowsを自作して作業を効率化する
LINEで送る
Pocket

こんにちは。

最近は、Alfredというアプリに大変お世話になっております。
アプリを起動するのにいちいちトラックパッドを使わなくて済むので、すごく捗ります。

Alfredには、色々な便利機能があるのですが、

今回はもう少し突っ込んだことについて書きたいので、
参考になった記事を貼っておきます。

Mac仕事効率化!Spotlightを完全に超えた神ランチャーアプリ「Alfred 2」の使い方とおすすめWorkflows10選。[Mac] | MacWin Ver.1.0

[太]MacのランチャーアプリAlfred ver2の新機能「workflows」が結構凄そう。 | Fujitaiju Blog

ここからが本題です。
AlfredにはWorkflowsという機能があります。

このWorkflowsが非常に強力で、

  • Evernoteのクリップしてある記事から検索をかけたり
  • リマインダーにワンライナーでタスクを追加したり
  • Amazonの商品検索のサジェスト機能を使ったり
  • カラーコードを入力すると該当する色を表示してくれたり
  • URLを入力すると、短縮URLが生成されてクリップボードにコピーできたり

と、他にも色々ありますが、 Alfredというアプリ上で、一つのまとまった作業を一気に行うことができます

で、この中から
WebでAPIが公開されているサービスに何らかの問い合わせをし、
その結果を元に、何かアクションを起こす

といったタスクを行うWorkflowsを作ってみようと思います。

ググっても、チュートリアル系の記事が1件も見つからなかったので、 ソースを読んで作り方を学んでいきます。

今回は、日付を入力すると、
速水もこみちがMOCO’sキッチンで使ったオリーブオイルの量を検索出来るAPI
MOCO’SキッチンオリーブオイルAPIを利用したWorkflowsを作ります。

目次

  1. Alfred Workflowsの前提知識
  2. サンプル Google Suggestを利用してみる
  3. サンプルのコードを読む
  4. 今回作るものの詳細
  5. 今回利用するAPIについて学ぶ
  6. コードの説明

といった流れで書いていきます。

Alfred Workflowsの前提知識

まず、Alfredというアプリをインストールしないと始まらないので、
公式かApp Storeからインストールをします。
インストール+利用は無料です。

Alfred App
カテゴリ: 仕事効率化
価格: 無料

そして、残念ですが、注意事項です。

Alfred Workflows(以下workflows)を利用するには、課金が必要です

価格にして、15英ポンド、2013/05/21現在¥2,300くらいです。
しかし、それだけのお金を払う価値は十分にあると思います。

ここから先の内容は、
Alfredの有料機能を使うためのPowerPackを買った人を対象に進めます。

サンプルのGoogle Suggestを利用してみる

PowerPackを購入すると、workflowsが利用できるようになります。

まずは感覚をつかむために、
Google Suggestというサンプルを利用します。

1. Google Suggestを作成

Google Suggestを作成

workflowsの下の方にある[+]を押し、
Examples→Google Suggestをクリックすると、作成完了です。 workflowsのリストにGoogle Suggestというのが表示されたと思います。

Google Suggestが作成されたか確認

これは、Alfredに予めサンプルとして入っているworkflowsで、
このまま利用することができます。

2. 使ってみる

では早速使ってみます。
Alfredを起動し、g 検索ワード(何でもいい)と入力します。

例えばg jQと入力すると、このようなリストが表示されます。

Google Suggestのテスト

表示されたものを選択し、Enterを押すと、
その検索結果ページがブラウザで開かれます。

3. つまり

このように、Googleの検索窓で打つのと同じことを、
Alfred上で完結できます

今回、
urlを叩いてjsonやらxmlを入手して、その結果を元に処理を行うことがしたいので、
このサンプルは非常に参考になります。

Examplesに、同様の機能を持ったAmazon Suggestというものもあるんですが、
こちらはコードがあまりシンプルじゃなかったので、Google Suggestの方を見ていきます。

サンプルのコードを読む

まず、Google Suggestのコードを、全部貼っつけてみます。
あまり行数はないです。PHPで書かれています。

これで分かる方なら、もう早速作り始められると思います。
備忘録のために、これを部分的に掻い摘んでいきます。

0. 言語について

その前に、workflows作成に利用できる言語について。

Google SuggestもAmazon SuggestもPHPで書かれています。
ですが、もちろん他の言語でも書くことができます

他に対応している言語は、

  • bash
  • zsh
  • Ruby
  • Python
  • Perl

があります。

PHPで書く際の注意点は、
ファイルの先頭、末尾に<?php?>を入れないこと、くらいです。

今回は、Google Suggestに倣って書くので、PHPで書きます
ご了承下さい。

というかPHP以外の言語あまり分かりません。

1. workflows.phpとWorkflowsクラス

この部分、いかにもなクラスをrequireしています。
Workflowsクラスは、workflowsを作る上でのユーティリティです。

これのお陰で、通信などの処理を自前で書かずとも、
簡単にworkflowsが作成できるようになっています。

workflows.phpは、workflowsを作成すると自動的に生成されるので、
自前で揃える必要はありません。

2. 入力値の格納

とありますが、これはworkflows上でのおまじないです。

"{query}"という文字列は、Google Suggestで設定されている、
gキーワード以降に入力された文字列に置き換えられます。

例えば、g jQueryと入力すると、
$origには、"{query}"ではなく、変換後のjQueryという文字列が入ります。

どのタイミングで置換が行われるかは、調査はしていません。

3. $wf->requesr( url )

Workflowsクラス大活躍です。
urlを渡すだけでレスポンスを取得することができます。

必要に応じて、urlencodeを使ってエンコードして下さい。

4. $wf->result()

レスポンスを取得したら、
必要なデータを抜き出して$wf->resultに突っ込んでいます。

result()に突っ込まれたデータが、Alfred上で表示されます。

この$wf->result()の引数が分かりにくいので、
Workflows.phpの中身を見てみました。

という引数になっています。
リストに見える部分は、$titleと$sub、$iconです。

$argは、取得結果を表示した次のアクションに渡される値です。

例えば、取得結果にURLが存在する場合には、そのURLを$argに渡しておくと、
次のURLを開くアクションなどで$argの値を渡すことができます。

5. echo $wf->toxml();

workflowsは、echo $wf->toxml()でechoされたxml文字列を受け取って、リスト表示するようです。

6. まとめ

これらの処理をすごくざっくりまとめると、

  1. $wf->request()でAPIを叩く
  2. レスポンスから、使いたいデータを$wf->result()に突っ込む
  3. echo $wf->toXML()でリスト表示させる

と言った3ステップになると思います。

補足. キーワード???

g 検索ワードのように、
gというキーワードにこのworkflowsが反応させるように決めます。

Script Filter

反応させるキーワードは、図の上部に書かれた文字を見れば分かります。

反応させたいキーワードを入力する

反応キーワードを変更したい場合には、
この図をダブルクリックして、keywordを変更すればOKです。

今回作るものの詳細

冒頭でも話しましたが、
今回は、MOCO’sキッチンオリーブAPIを利用したサンプルを作ります。

今回使用するキーワードは、mocosとして、

  • mocos 日付(YYYY-MM-DD)[,日付…]と入力する
  • 該当する日付に使われたオリーブの数とレシピの名前を表示
  • レシピを選択してEnterキーを押すとブラウザでレシピが見れる
  • YYYY/MM/DD形式でも入力を受け付ける

と言った機能を作ります。 完成図はこんな感じ。

MOCO'sキッチンオリーブAPIのWorkflow完成図

このAPIはパラメータは1種類しか取らず、
その書式もはっきりしているのでHello worldに最適だと思います。

今回利用するAPIについて学ぶ

MOCO’sキッチンオリーブAPIのURLは、
GET: です。

パラメータはdateのみで、
値は、YYYY-MM-DD形式の日付です。
カンマ区切りで複数書くこともできます。


にアクセスして、レスポンスを整形したものが以下です。

レスポンスは、上記の形式で得られます。

コードの説明

先ほどのGoogle Suggestにならって作ったコードがこちらです。

先ほどのGoogle Suggestの例を見れば、
特に難しいことは無いと思います。

PHPでJSONのパースを行うには、json_decode()を利用します。

ポイントは、
result()の第2引数$argに、レシピのURLを設定しているところです。

これによって、この後に続く「URLを開く」という処理が可能になります。

workflowsの全体図とopen URLの設定内容がこちらです。

Workflows全体図 open URLの設定内容

繰り返しますが、$wf->result()の第二匹数$argは、次の処理へ渡す値を指定しています
そして、次の処理でも同様に"{query}"という文字列で値を取ることが出来るようです。

まとめ

web APIと連携したAlfred Workflowsの作り方は、
このような感じになっています。

シンプルなMOCO’sキッチンAPIだから簡単だったわけではなく、
他のAPIを利用しても同様の方法でかなり簡単に書けます。

これを機に、是非皆さんもworkflow製作者になってみては如何でしょうか。

LINEで送る
Pocket