プログラマーじゃなくても分かる,Krileのクエリの書き方

twitterを本気でやるならやっぱりKrile Starryeyesを使うのが一番。

セットアップの仕方は以下のサイトに書かれています。

Krile StarryEyesのセットアップの仕方 - -

Krileではタブというものがあり,「自分がフォローしている人のツイートを表示するタブ」「自分宛てのリプを表示するタブ」「自分の名前が含まれるツイートを全て表示するタブ」など,一つ一つのタブに表示するツイートを指定することができます。

しかし指定するための「クエリ」の書き方が分からない…!!という人も多いのではないでしょうか。

実はクエリの書き方は次のサイトに全て書かれています。

KQ_Overview · karno/StarryEyes Wiki · GitHub

しかしこれ…文体がプログラマー向けなんですよね。

まぁクエリを書くのはプログラミングと同じなので仕方ない。

でもKrileを使う人がみんなプログラマーというわけではありません。なのでここでは,プログラマーでない人のためにKrileのクエリの書き方を説明したいと思います。

(おっと…プログラミングが小学校で義務教育化されるんだっけ?まぁそうなったらこういう記事の需要も無くなっていくのでしょうね…)

クエリの構成

Krileのクエリは前半部分と後半部分に分かれています。前半が「from」で始まる「ソースクエリ」,後半が「where」で始まる「フィルタクエリ」です。例えばクエリが「from local where text contains "love"」なら「from local」がソースクエリで,「where text contains "love"」がフィルタクエリです。

ソースクエリではツイートを取得する範囲を指定し,そのうちフィルタクエリで指定した条件を満たすものだけがタブに表示されます。

例えばソースクエリでは「タイムラインに流れてくる全てのツイート」「検索でヒットした全てのツイート」「特定の人の全てのツイート」などが指定できて,フィルタクエリでは「本文中に~を含む」「~RT以上されている」「リスト~に登録されていてIDに数字0を含まない人のうち~人以上にいいねされている」などが細かく指定できます。

ソースクエリ

fromの後に書ける単語がいくつか決まっています。

local (allと書いても同じ)

「from local」とすると,Krileを使っている間に一度でも保存されたツイート全てが対象になります。タイムラインやリプライなど自分に関連しているツイートならFF内外は関係ないのですが,twitter上のツイートが全て検索できるわけではありません。

「from local: ~」のように,コロン「:」で区切ってその後にKrileのタブ名を指定すると,そのタブ内にある全てのツイートが対象になります。*1

 home

「from home」とすると,タイムライン(フォローしている人のツイート)が対象になります。

複数のアカウントを使っている場合は,「from home: "57tggx"」のように,コロン「:」で区切った後「"」2つで囲った部分にIDを書くと,そのアカウントのタイムラインだけが対象になります。

 mention (mentions, reply, repliesも全て同じ)

自分宛の返信が対象になります。複数のアカウントを使っている場合はhomeと同じように「from mention: "ID"」でアカウントを指定します。

message (messages, dm, dmsも全て同じ)

自分宛のDMと自分が送ったDMが対象になります。複数のアカウントを使っている場合はhomeと同じように「from message: "ID"」でアカウントを指定します。

list

指定したリストのツイートが対象になります。「/」で区切って「from list:"自分のID/リスト名"」と書きます。他の人の作ったリストの場合は,自分の持っているアカウントから一つ選んで,「from list:"自分のID/リスト作成者のID/リスト名"」とします。

search (findも同じ)

「from search:"~"」とするとtwitter検索でヒットした全てのツイートが対象になります。普通のtwitter検索とほぼ同じですが,「"そんなの聞いてない"」のような完全一致検索をするときは中の「"」を「\"」(円マーク+「"」)に書き換えて「from search:" \"そんなの聞いてない\" "」とします。

track (streamも同じ)

「from track:"~"」でもツイート検索ができます。こちらはストリーム検索といって,検索結果に新しいツイートが自動で読み込まれ続けるため,サーバに負荷がかかりません。

conv (conversation, talk, treeも同じ)

twitterでは,全てのツイートにID番号が振られています。「from conv:"01234567890123456789"」のようにIDを指定すると,そのツイートとそれに対する全ての返信(リプライツリー)が対象になります。

user

特定の誰かに張り付くならこれ。「from user:"57tggx"」でIDを指定するか,「from user:"#808612487507513344"」(「#」を忘れないこと)で固有IDを指定します。

フィルタクエリ

フィルタクエリを省略すると,取得した全てのツイートがそのまま表示されます。

フィルタクエリには色々な文が書けます。

文の例とその意味,同じと見なせる単語は次の通りです:

text="334" 本文が「334」と一致する textとbody, =と==
text->"334" 本文に「334」が含まれる ->とcontains
text startswith "334" 本文が「334」で始まる startswithとstartwith
text endswith "334" 本文が「334」で終わる endswithとendwith
text->"windows" 本文に「windows」が含まれる(大文字小文字を区別しない)  
caseful text->"windows" 本文に「windows」が含まれる(大文字小文字を区別する)  
favs=3 ふぁぼ数が3 favsとfavorites, favorer, favorers
favs>3 ふぁぼ数が3より多い  
rts>3 RT数が10より多い rtsとretweets, retweeters
rts>favs RT数がふぁぼ数より多い  
rts*rts>favs*2+5 RT数の2乗がふぁぼ数の2倍+5より多い  
rt リツイートである*2 rtとretweet, isretweet, is_retweet
user=@57tggx ツイート主が@57tggx  
user="57tggx" ツイート主のIDが57tggx*3 userとuser.screen_name
user->"tg" ツイート主のIDに「tg」が含まれる  
user=808612487507513344 ツイート主の固有IDが808612487507513344*4 userとuser.id
user.status>100 ツイート主のツイート数が100より多い*5 .statusと.statuses, .statuscount, .status_count, .statusescount, .statuses_count
user.following>100 ツイート主のフォロー数が100より多い .followingと.friend, .friends, .followings, .friendscount, .friends_count, .followingscount, .followings_count
user.follower>100 ツイート主のフォロワー数が100より多い .followerと.followers, .followerscount, .followers_count
user.fav>100 ツイート主のふぁぼ数が100より多い .favと.favs, .favcount, .favorite, .favorites, .favscount, .favs_count, .favoritescount, .favorites_count
user.list>100 ツイート主のリスト被登録数が100より多い .listと.listed, .listcount, .list_count, .listedcount, .listed_count
user.screenname="57tggx" ツイート主のスクリーンネームが「57tggx」 .screennameと.screen_name
user.name->"ビタリスト" ツイート主のハンドルネームに「ビタリスト」が含まれる .nameと.username
user.bio->"数ぽよ" ツイート主のプロフィールに「数ぽよ」が含まれる .bioと.desc, .description
user.loc="どこでもない" ツイート主の設定所在地が「どこでもない」 .locと.location
user.lang="en" ツイート主の設定言語が「en」(=英語) .langと.language
user.protected 鍵アカウント .protectedと.isprotected, .is_protected
via->"twitter web client" twitter web clientから投稿されている*6 viaとfrom, source, client

数字に対して使える記号は次の通りです:「+」(加),「-」(減),「*」(乗),「/」(除),「=」(イコール, 「==」も同じ),「<」(小なり),「<=」(小なりイコール),「>」(大なり),「>=」(大なりイコール),「!=」(ノットイコール)。

複数の条件を重ねるときは「&」「|」を使います。例えば「user.following > 100 | user.follower > 100」は「フォロー数が100より多い」「フォロワー数が100より多い」の少なくとも一方を満たしているという意味で,「user.protected & user.status<=100」は「鍵アカウント」「ツイート数が100以下」の両方を満たしているという意味です。「&&」は「&」,「||」は「|」と同じ意味です。

条件を否定するには「!」を使います。「!user.protected」は「鍵アカウントでない」という意味です。

優先順位は括弧で指定します。「!(text->"57tggx" & user.name!="57tggx")」は「「「text->"57tggx"」かつ「user.name!="57tggx"」」でない」という意味になります。

 ここまでで大体のことはできると思います。とりあえずこの記事はこれで終わりですが,興味があったらこの先を自分で調べてみて下さい。

*1:複数のタブに同じ名前を付けることができますが,そのときは指定した名前を持つタブのうち1つのみが対象となります

*2:Krileではリツイートが元ツイートと別に扱われます。フィルタにrtを指定すると,元ツイートは表示されずリツイートのみが表示されます。

*3:「@57tggx」と「=」で結ばれたときの「user」と,「"57tggx"」と「=」で結ばれたときの「user」は微妙に違う意味になります。前者は「ユーザオブジェクト」,後者は「文字列」です。userはもともとユーザオブジェクトですが,文字列と比較しようとしたときだけIDを表す文字列になります

*4:数値と比較しようとすると,今度は固有IDを表す数値になります

*5:ユーザオブジェクトの後に「.~」と続けることでそのアカウントに関する情報が得られます

*6:正確には「via名の中に"twitter web client"という文字列が含まれている」ですが,「->」を「=」に変えるとなぜか上手くいきません