tmytのらくがき

個人の日記レベルです

Aristea フィルタ式Tips

先日リリースされたAristea 0.9.6以降で使えるクエリ式の構文について、かずきさん(@okazuki)さんに それアンドキュメントだよね!? と言われたので、いいわけエントリ。

クエリ式について

クエリ式とかフィルタ式とか安定しませんが同じ物です。タイムラインから任意の条件にマッチしたツイートを 抽出するために使うスクリプト言語みたいなそういう感じのものです。

たとえばこういうのが書けます。

pic.twitter.com が添付されてるツイートを抜き出したい

entities.media.length > 0

これだけで画像タイムラインが出来ます。

URL が含まれるツイートを抜き出したい

entities.urls.length > 0

できました。

任意の文字列が含まれるツイートを抜き出したい

text =@ "ほげ"

=@ はc#のstring.Contains相当です。ちょっときもいですね。

さて、例はこれぐらいにして。0.9.6で配列っぽいものが書けるようになりました。 これはなにが出来るかというとまず例を挙げます。

text =@ "hoge" || text =@ "fuga"

これは、textにhogeかfugaを含むツイートを抜き出します。 数が少ない間はこれでもいけますが、多くなってくるとちょっとめんどい。 そこで配列っぽいものを使います。

text =@ {"hoge", "fuga"}

OR演算子が減りました。内部的には同じ式に展開されています。

本題

前置きが長くなりました。ここまでは一応ドキュメントに書きました。 かずきさんに昨日こんな質問を受けました。

textかscreen_nameに任意の文字列を含むのをもっとスマートに書けないか

そのときかずきさんに例示されたクエリ式はこんなかんじ。

text =@ {"hoge", "fuga"} || user.screen_name =@ {"hoge", "fuga"}

ORでつないで、同じものを2回書くのがスマートじゃないです。変数とか増えない?と言われたのですが もっとスマートな解決方法がありました。

{text, user.screen_name} =@ {"hoge", "fuga"}

これで、先に例示されたクエリ式と同等のクエリが生成されます。

意外とちゃんと動いてびっくりました。