Lesson17.Alfred環境変数を使ってカスタマイズ設定を可能とする
ワークフロー
なぞなぞの出題はAlfredの出力フォーマットなので1度に9個出題できます
HTMLのパースからJSONフォーマットへの編集は今までのやり方と同じ
ただ、実際に遊んでみると、回答が見れるのは、出題後に選択した1問だけ
ちょっともどかしい
そこで、下記のカスタマイズを可能するようにしました
・出力フォーマットに表示する出題数
・出題した問題を記録するかどうか
このコントロールをするために、Alfredの環境変数を利用します
プロパティリスト(.plist)のイメージで利用するわけです
具体的にはWorkflow Environment VariablesにQmaxとoutputを記載します
いったんQmaxは1を設定しています。お好きな数字を指定してください
またoutputにはtextfileを設定しています。clipboardにすると出題をクリップします。
因みに、Workflow Environment Variablesには、
出題を保存するテキストファイルのパスも書いていますが、
ホームディレクトリの”~”はスクリプト内でうまく動きませんでした
JSONフォーマットを作成すると同時に、$clipに出力用の文字列を作成しています
整形するために改行の”\n”や、表題、日時のヘッダーも込みで編集しています
実際の出力は、個別のechoで実施しています
ScriptFilterでJSONフォーマット以外をechoするとエラーになるようなのですが、
下記のクリップボードコピーは問題ありませんでした
echo -e $clip|pbcopy
もちろん、標準出力でないファイルへの出力も問題ありません
echo -e $clip >> ~/documents/alfred/nazo/nazonazo.txt
あと、Workflow Environment Variablesで指定したoutputを
スクリプト内で$outputとして参照して、出力をコントロールしています
AlfredのWriteTextFileでは、存在しないフォルダも作成してくれるオプションがあるのですが
今回はスクリプトから直でテキストファイルを出力するので、初回は存在しないフォルダを
作成する必要があります
documentsフォルダーの直下にテキストファイルを置くことでも解決できますが、
documents/alfred/xxxx/という風にワークフロー毎に保存フォルダーを作成する方針にしました
そのため、ファイルの存在を確認してない場合は、フォルダーを作成します
フォルダーさえあればechoの追加”»“で、テキストファイルがない場合は作成、ある場合は
追加という振る舞いになります
shufコマンドを利用します。ない方はインストールしてください
またインストール先をScript Filterの先頭部分のPATHに定義してください
(私はhomebrewでインストールしています)
shufコマンドはシャッフルという意味です
下記は抽出したリンクの個数をシャッフルして、設定した出題数(Qmax)だけ取り出しています
`seq 1 ${#link[@]}| shuf| head -n $Qmax`
トリヴィアの泉のワークフローを作った時に、クイズ出題ができないかと思って作りました
あとは、1ページに多数の問題があるサイトを探して実装しました
たまたまそのサイトになぞなぞの難易度が5段階あったので、難易度ごとに出題するよにしました
ランダムになぞなぞを出題する
1.Alfredworkflowをダウンロード
2.ファイルをダブルクリックしてワークフローに登録
下記のキーワードで起動
nazo1〜5(数字は難易度)
nazoq (過去に出題したなぞなぞを表示)
シェルスクリプトをbashからzshに変更しました
トップページに戻る