前回は、選択されたノートの複数を対象とした処理について書きました。これを使えば、ノートタイトルの一括処理などが簡単に行えますね。
今回は、「選択されたノート」以外によるノートの処理方法を紹介してみます。使うのは、検索です。
狙いとコード
たとえば、特定のノートブックの中にあるノートについて処理したい、としましょう。
そのためには、その「特定のノートブックの中にあるノート」の情報を取得しなければならないわけですが、そういうときには、 find notes コマンドが使えます。その名の通り、ノートを見つけ出すための命令です。
書き方は、
find notes v
で、vには、Evernoteで使う検索構文を入れます。普通にキーワードを入れてもいいですし、notebook:~や、tag:~のようにノートブックやタグを指定することもできます。使える構文については以下のページを参照してみてください。
Evernote の高度な検索構文の使い方 – Evernote ヘルプ&参考情報
今回は、inboxノートブックに入っているノートに対して、何かしらの操作を行うとしましょう。コードは以下のように書けます。
set targetNotebook to "001 [inbox]" tell application "Evernote" set resultNote to find notes "notebook:\"" & targetNotebook & "\"" repeat with i in resultNote log i end repeat end tell
まず、探したいノートブックの名前を変数targetNotebooに入れておきます。私のinboxは、「001 [inbox]」という名前になっているので、それをそのままコピペしました。
続いてEvernoteへの命令です。5行目に先ほど紹介した、find notes コマンドが出ていますね。書き方がややこしいので詳しく解説しますが、その前にこの文全体について書いておきましょう。
この文では、find notesによる検索で見つかったノートの情報を変数resultNoteに入れるように指定しています。以降は、この resultNote を扱えば、それらのノートが操作できます。そういう文です。
では、5行目をもう少し詳しくみていきましょう。find notesの後に以下のような記述が続きます。
“notebook:\”” & targetNotebook & “\””
記号が多くてややこしいですが、これをEvernoteの検索文風に書けば以下になります。
notebook:”001 [inbox]”
こういう書き方なら、お馴染みでしょう。今回は001 [inbox]の部分がtargetNotebookに置き換えられているのですが、一筋縄ではいかないのが ” という記号です。コード内では、””で囲まれた部分が「文字列ですよ」ということになるのですが、それはEvernoteの検索構文でも同様です。つまり、以下のように書くとうまくいきません。
find notes “notebook:”001 [inbox]””
この場合は、”notebook:”までが一つの文字列だと判断されてスクリプトがうまく動きません。逆に、以下のように書くと、
find notes “notebook:001 [inbox]”
今度はEvernoteでの検索が期待しないものになります。そこで出てくるのが、エスケープ文字なのですが、簡単に言えば、””で括った中で、”を使いたいなら、そのことを明示してね、ということです。で、その明示に使われるのが \ という記号です。この\の後に続く”は、日本語的に言えば、「」つきで扱われます。特別な意味を持つ(あるいは特別な意味を持たない)記号として扱われるのです。
そのことを踏まえて再び5行を見返せば、
“notebook:\”” & targetNotebook & “\””
は、&──これは文字列を足し算してくれます──を使った3つのブロックで構成されており、最初のブロックは、notebook:” までを 二つ目のブロックは、 001 [inbox] までを、最後のブロックでは ” を担当していることがわかります。それらを結合すると、
notebook:”001 [inbox]”
となるわけですね。ちなみに、targetNotebookの中身を、
set targetNotebook to “\”001 [inbox]\””
としておけば、5行目は次のようになります。
set resultNote to find notes “notebook:” & targetNotebook
あらかじめ探すノートブックが決まっている場合はこちらの書き方がシンプルですが、もしユーザーにテキストを入力してもらって、その値を使って探す、という場合は最初の書き方の方がおそらくはよいでしょう。
next step
あとは前回と同じで、resultNoteに格納されたノートの情報を、repeatを使って一つずつ取り出し、それに対して処理していけばいいことになります。
リピートでノート情報が格納されるiに対して、ifで判断してけば、「〜〜ノートブックにある、~~というタイトルのノートに対しては○○の処理を行う」といったことも可能です。
次回はこのfind notes を使った、もう少し柔軟性のある検索をやってみましょう。
▼こんな一冊も:
シーアンドアール研究所 (2016-02-26)
売り上げランキング: 218,172
売り上げランキング: 477