twitter bot を GAE で

データストアに格納した文言をランダムに取り出して tweet したい。
ドキュメントを見た所では

  • Model#all() で全件取りだして
  • Query#count() で件数を取りだして
    • てか、int(random.random() * Query#count()) でオフセット値をナニして
  • Query#fetch() でレコード選択

な方法で何とかなりそげ。後は bot なサンプルがあるのでアカウント作ってごにょごにょするだけか。

とりあえず

作ってみます。GAE のダッシュボードからアプリを一つ登録しといてローカル側でも作成。また、以下のコマンドにて git clone しておく。

$ git clone http://github.com/mikeknapp/AppEngine-OAuth-Library.git

AppEngine-OAuth-Library の中にある oauth.py をプロジェクトなディレクトリにコピーが必要。あ、アカウント作らなきゃ駄目だな。

アカウント作成

関係者宛て周知実施。てーかこないだ google なアカウント作ろうとして微妙にハマッてたのですが、単純に invite 送付すりゃ良かったのか。でもどこに invite を送付するか、という話があったりなかったりしますな。
それは良いとして、アカウント作成してアプリ登録して access_token まで入手。
tweet する内容は以下なカンジでセレクトするナニを今から upload してみます。

        query = Tweet.all()
        tweet = query.fetch(int(random.random() * query.count()))
        param = {'status' : tweet.content}

CRUD

なインターフェースをなんとかしないとデプロイしてもデータが無い。しかも最初 CRUD という単語が頭に全然出てこなくって検索できなかったりなんかしてました。元は django のはずなので簡単に作れるはずなんじゃないの? と言いつつ材料が無い。
と思ったら大量にデータを登録するソレについては材料発見。

でもどちらにしても CRUD なインターフェースは必要かなぁ。

と、言う事で

無理矢理 CRUD なソレを書いて appspot に upload したんですが、文法エラーがいきなり出たorz
なんとか追加はできるようになりましたが、編集および削除がオチます。わははは。

と言いつつ

CRUD なナニも tweet なソレも実機 (?) デバッグでなんとか動くようになりますた。てか、ローカルで動かす方法とか全然忘れてたりしてorz

上記の方式では駄目だった模様。fetch が戻すのは list みたい。なので、

        query = Tweet.all()
        result = query.fetch(1, int(random.random() * query.count()))
        tweet = result.pop(0)
        param = {'status' : tweet.content}

みたいな形で param に設定。もっとスマートな方法があるんだろうな。結構力任せ。