AlfredWorkflowで遊ぶページ

Lesson17.Alfred環境変数を使ってカスタマイズ設定を可能とする

開発メモ

サンプル動画

ワークフロー

1.Alfredの環境変数を設定値をとして利用する

 なぞなぞの出題はAlfredの出力フォーマットなので1度に9個出題できます
 HTMLのパースからJSONフォーマットへの編集は今までのやり方と同じ
 ただ、実際に遊んでみると、回答が見れるのは、出題後に選択した1問だけ
 ちょっともどかしい

 そこで、下記のカスタマイズを可能するようにしました
 ・出力フォーマットに表示する出題数
 ・出題した問題を記録するかどうか

 このコントロールをするために、Alfredの環境変数を利用します
 プロパティリスト(.plist)のイメージで利用するわけです
 
 具体的にはWorkflow Environment VariablesにQmaxとoutputを記載します
 いったんQmaxは1を設定しています。お好きな数字を指定してください
 またoutputにはtextfileを設定しています。clipboardにすると出題をクリップします。
 因みに、Workflow Environment Variablesには、
 出題を保存するテキストファイルのパスも書いていますが、
 ホームディレクトリの”~”はスクリプト内でうまく動きませんでした
 

2.出題をクリップするためのロジック

 JSONフォーマットを作成すると同時に、$clipに出力用の文字列を作成しています
 整形するために改行の”\n”や、表題、日時のヘッダーも込みで編集しています
 
 実際の出力は、個別のechoで実施しています
 ScriptFilterでJSONフォーマット以外をechoするとエラーになるようなのですが、
 下記のクリップボードコピーは問題ありませんでした

echo -e $clip|pbcopy


 もちろん、標準出力でないファイルへの出力も問題ありません

 echo -e $clip >> ~/documents/alfred/nazo/nazonazo.txt


 あと、Workflow Environment Variablesで指定したoutputを
 スクリプト内で$outputとして参照して、出力をコントロールしています

3.初回にテキストファイルを作成する

 AlfredのWriteTextFileでは、存在しないフォルダも作成してくれるオプションがあるのですが
 今回はスクリプトから直でテキストファイルを出力するので、初回は存在しないフォルダを
 作成する必要があります
 documentsフォルダーの直下にテキストファイルを置くことでも解決できますが、
 documents/alfred/xxxx/という風にワークフロー毎に保存フォルダーを作成する方針にしました
 
 そのため、ファイルの存在を確認してない場合は、フォルダーを作成します
 フォルダーさえあればechoの追加”»“で、テキストファイルがない場合は作成、ある場合は
 追加という振る舞いになります

4.出題をランダムに選択してAlfredフォーマットに出力する

 shufコマンドを利用します。ない方はインストールしてください
 またインストール先をScript Filterの先頭部分のPATHに定義してください
 (私はhomebrewでインストールしています)
 
 shufコマンドはシャッフルという意味です
 下記は抽出したリンクの個数をシャッフルして、設定した出題数(Qmax)だけ取り出しています

 `seq 1 ${#link[@]}| shuf| head -n $Qmax`


 

背景

 トリヴィアの泉のワークフローを作った時に、クイズ出題ができないかと思って作りました
 あとは、1ページに多数の問題があるサイトを探して実装しました
 たまたまそのサイトになぞなぞの難易度が5段階あったので、難易度ごとに出題するよにしました

取扱説明

機能:

 ランダムになぞなぞを出題する
 

インストール:

 1.Alfredworkflowをダウンロード
 2.ファイルをダブルクリックしてワークフローに登録

使い方:

 下記のキーワードで起動
  nazo1〜5(数字は難易度)
  nazoq (過去に出題したなぞなぞを表示)

修正履歴

ver1.1(2021-04-04):

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

トップページに戻る