それPostgreSQLで出来るよ - twitter_fdw
pyfesで「それPostgreSQLでできるよ」ってつぶやいた手前、ちゃんと試さなければなりません。
PostgreSQL 9.1から外部データラッパ(FDW) という規格がサポートされました。 またさらに、このFDWを使ってTwitterのAPIを叩いて結果をテーブルとして出 してくれる twiter_fdw という拡張が 公開されています。
準備
% sudo apt-get install libcurl4-openssl-dev (libjsonもいるかも) % curl -O http://api.pgxn.org/dist/twitter_fdw/1.0.0/twitter_fdw-1.0.0.zip % unzip twitter_fdw % cd twitter_fdw % make % sudo su # export USE_PGXS=1 # make install
DBの作成して、twitter拡張をDBに入れます。
% createdb twitter % psql -c "CREATE EXTENSION twitter_fdw" twitter
さて、これで準備は終わりです。
使ってみる
% psql twitter twitter=# SELECT from_user, created_at, text FROM twitter WHERE q = '#pyfes'; from_user | created_at | text ---------------------------------------------------- tw_ox | 2012-03-19 13:43:58 | RT @zusaar: 【新着イベント】Python Developers Festa (一般枠) #pyfes #pyspa http://t.co/X9SyQ0hg #zusaar #イベント #eventjp inoshiro | 2012-03-19 10:46:58 | RT @shomah4a: 少ないけど写真上げました https://t.co/aqvDAjrC #pyfes shomah4a | 2012-03-19 10:32:03 | 少ないけど写真上げました https://t.co/aqvDAjrC #pyfes tcsh | 2012-03-19 10:14:06 | RT @tk0miya: Sphinx ハンズオンの資料(サンプル)です。 http://t.co/TzokaIJ2 #sphinxjp #pyfes
中身はTwitter APIを叩いているだけなので、残念ながら WHERE from_user ='' とは書けません。投稿者を探すにはqの中にfrom:をつけます。 詳しくは https://dev.twitter.com/docs/using-search を見てください。
twitter=# SELECT from_user, text FROM twitter WHERE q = 'from:voluntas' limit 5; from_user | text ----------------------------------------------- voluntas | @Surgo お、一口書いとくね voluntas | @turky や一口とか提示しなかったので、再度確認します。イメージは一口 1000 円で問題ないです。 voluntas | @turky ちょw ブログにまとめます。 voluntas | 支援は一人1000円として 15000 円位か。 voluntas | 姉に Twitter Bot の作り方を聞かれている
ちなみにdefaultでは15件までしか出ませんが以下のようにしてあげると100件まで出るようになります。
- appendStringInfo(&buf, "q=%s", + appendStringInfo(&buf, "q=%s&rpp=100",
いろいろしてみる
# SELECT to_user, count(to_user) FROM twitter WHERE q = 'from:voluntas' GROUP BY to_user ORDER BY count(to_user) desc limit 10 to_user | count ----------------+------- tokoroten | 8 Seasons | 7 heavenshell | 6 sawonya | 4 turky | 3 tokibito | 3 yokatsuki | 3 mkouhei | 3 mopemope | 3 Surgo | 2
fdwいいよfdw