Alfred のワークフローを作ってサクッとタスク登録する

以前 Backlog の複数スペースの自分のタスクを見れるようにした。

最近は Biscuit に追加してそちらで見れるようにしてある。
使ってみると自分のメモ的なタスクとかも登録しておきたいと思うことが増えたのでそれも登録できるようにしておいた。
Backlog にプロジェクト作ればいいんだろうけど、とりあえずそういう要望はありそうな気がしたので。

そういうタスクの登録はサクッと登録しておきたい感じのものが多いと思ったので、 Alfred のワークフローを作ってみた。

入力したタスクを受け取る

input を受け取るようにする

Alfred を使うキーワードを指定する

Workflow Environment Variables を設定する

ベタ書きしても良かったのだけど勉強がてら Workflow Environment Variables を使ってみることにした。
authkey , endpointURL , nulabid をとりあえずセットするようにした

処理全体

Workflow 自体は色々な書き方ができるっぽいのだけど、今回はPHPでやってみた。

改善すべきところは多々あるだろうけど、ひとまずコード全体としてはこんな感じ。

$header = array(
  // 'Content-Type: application/json',
  'Content-type: application/x-www-form-urlencoded',
  'Authorization: Bearer '.getenv('authkey'),
);
$url = getenv('endpointURL');
$today = date('Y-m-d\\TH:i+09:00');

$data = array(
	'query' => 'mutation($title:String,$nulabId:String,$doDate:DateTime) {
    save_task_task_Entry(
          authorId:"1",
          title: $title,
          nulabid: $nulabId,
          dodate: $doDate,
          statusid: 1,
          resolvedtask: false,
          dothisweek: false
      ) {
          id
          slug
          dodate
          resolvedtask
          dothisweek
      }
  }',
  'variables' => array(
    "title" => "{query}",
    "nulabId" => getenv('nulabid'),
    "doDate" => $today
    ),
);

$content = http_build_query($data);
$options = array('http' => array(
    // 'ignore_errors' => true,
    'method' => 'POST',
    'header' => implode("\r\n", $header),
    'content' => $content
));

$contents = file_get_contents($url, false, stream_context_create($options));

$arr = json_decode($contents,true);
echo "Task Created id : ".$arr['data']['save_task_task_Entry']['id'];

ヘッダーは

'Content-Type: application/json',

だとダメだったので、

'Content-type: application/x-www-form-urlencoded',

にした。

Workflow Environment Variables に設定した内容は

$url = getenv('endpointURL');

という感じで取得した。

{var:varname}

みたいに取れるのかと思ったけど違ったらしい。

Workflow Script Environment Variables - Alfred Help and Support
https://www.alfredapp.com/help...

こちらの記事が参考になった。

Workflow/environment variables in Alfred — deanishe.net
https://www.deanishe.net/post/...

GraphQLでエントリ作成する部分はこれまでと変わらず mutation に作成するセクション、入力タイプを設定する。

$data = array(
	'query' => 'mutation($title:String,$nulabId:String,$doDate:DateTime) {
    save_task_task_Entry(

今回は投稿者は固定にしてあるけど、ここも変数にしておいてもいいかもしれない。
一応今日やるタスクとして登録しておく想定にした。

GraphQL に投げるときの variables は配列で渡す必要がある。
PHPで書くのははじめてだったから最初この辺どうやるのかよくわからなかった。

Alfred で入力した内容は query で受け取る

"title" => "{query}",

タスク作成後の通知を表示

あとはGraphQLでエントリ作成した後のレスポンスを受け取って、ID取り出してそれを通知として出すようにした。

PHPでJSONデータの取得の仕方 - Qiita
https://qiita.com/fantm21/item...

エラーの分岐とかもホントはいれたほうがよさそうではある・・・
であればレスポンスそのまま出しておくほうが使いやすいのかもしれないが。。。


Alfred を入れたMacでしか使えない、ということにはなるけど、、、
スマホだったらなんかHTML用意してそれをブラウザで開くとかかなー。
iPad だとどうするかな。