前回は、検索を使ってノートの情報を取得してみました。キーワードを指定することで、ノートブックやタグを限定することも可能です。
ただし、前回では検索キーワードは固定されていました。それを選択できるようにするのは、どうすればいいでしょうか。
狙いとコード
前回では、あらかじめ検索するノートブックの名前をコードに埋め込んでいました。だから、コードを何度実行しても同じノートブックが検索されます。では、それに柔軟性を持たせるにはどうすればいいでしょうか。
- 複数のノートブックの選択肢を用意しておき、そこから選んでもらう
- ノートブックリストの一覧を表示し、そこから選んでもらう
- ユーザーにノートブック名を入力してもらう
上記の三つが考えられますが、三番目については「ユーザーがノートブックの名前を正確に覚えている」という前提が必要で、その前提は来年日本から大型の油田が発見される程度には望み薄なので避けておいた方がよいでしょう。というわけで、今回はまず一つ目の方法でやってみます。
コードは以下のようになります。
set targetNotebookList to {"001 [inbox]", "002 [project/now-week]", "003 [day/stock]"} set targetNotebook to (choose from list targetNotebookList) as text tell application "Evernote" set resultNote to find notes "notebook:\"" & targetNotebook & "\"" repeat with i in resultNote --ノートに対する処理をここに書く end repeat end tell
簡単ですね。まず選択肢として上げたいノートブック名をリスト(配列)で指定しておき、あとはそのリストからユーザーに選んでもらい、その答えを使ってfind notesを走らせる、というものです。
これを少しアレンジすれば、ノートブックを選択してもらい、さらに検索のキーワードも入力してもらう、なんてこともできます。つまり「〜〜ノートブックから▼▼▼というキーワードが入ったノートを探す」というようなことですね。
コードとしては以下です。
set targetNotebookList to {"001 [inbox]", "002 [project/now-week]", "003 [day/stock]"} set targetNotebook to (choose from list targetNotebookList) as text set myAnswer to display dialog "検索のキーワードを入力してね!" default answer "" set memoTxt to text returned of myAnswer tell application "Evernote" set resultNote to find notes "notebook:\"" & targetNotebook & "\" " & memoTxt repeat with i in resultNote --ノートに対する処理をここに書く end repeat end tell
これも難しくありません。ここまで紹介してきた知識で書けます。ダイアログを表示し、ユーザーに入力してもらったテキストを使い、find notesを走らせる。これだけです。
ただし、この場合、キーワードによってはノートが一つも見つからないこともあり、そうしたときに別の処理を行いたいなら以下のように書けます。
set targetNotebookList to {"001 [inbox]", "002 [project/now-week]", "003 [day/stock]"} set targetNotebook to (choose from list targetNotebookList) as text set myAnswer to display dialog "検索のキーワードを入力してね!" default answer "" set memoTxt to text returned of myAnswer tell application "Evernote" set resultNote to find notes "notebook:\"" & targetNotebook & "\" " & memoTxt if length of resultNote ≥ 1 then repeat with i in resultNote --ノートに対する処理をここに書く end repeat else display dialog "ノートはありません" end if end tell
途中までは同じで、ノートの処理に入る前にif文が一つ追加されています。 length of resultNote は resultNoteに入っている要素の数を返すもので、それが1よりも大きいならノートの処理を行い、そうでなければ別の処理を行う、という進行になっています。
Next Step
だんだんと新しい知識を使わなくてもコードが書けるようになってきました。こうなってくると俄然プログラミングは楽しくなってきます。
さて、今回はあらかじめノートブックのリストを設定していましたが、そのとき存在するすべてのノートブックから選んで欲しいときはどうすればよいでしょうか。それについては次回に。
▼こんな一冊も:
売り上げランキング: 288
シーアンドアール研究所 (2016-02-26)
売り上げランキング: 135,855