というわけで、まったく進まずイライラする研究の合間にちょこちょこ作り続けてたbot用のクラスの作成メモ。while(true){実験用プログラム;bot;}て感じだったのであちこち記述がひどいがまぁ多めに見てほしいです。
ちなみにソースコードというよりもノウハウのメモがメイン
[メモ]OAuth認証でTwitterにアクセスを試してみたで取得した情報(「Consumer key」「Consumer secret」「Access token」「Access token secret」)を使うのでまだ持ってない人はそちらを先にどうぞ。
「普通に配布されてるの使えよw」という突っ込みには「趣味です(キリッ」と答えます。
ちなみにソースコードというよりもノウハウのメモがメイン
[メモ]OAuth認証でTwitterにアクセスを試してみたで取得した情報(「Consumer key」「Consumer secret」「Access token」「Access token secret」)を使うのでまだ持ってない人はそちらを先にどうぞ。
「普通に配布されてるの使えよw」という突っ込みには「趣味です(キリッ」と答えます。
クラスのひな形
とりあえずクラスのひな形、今回はOAuth認証を使って接続するので(もう少しするとBASIC認証は使えなくなる)gemで入れたoauthライブラリを使います。また、取得するデータの形式は(現状では)jsonとxmlとrssが選べるが選べるのでとりあえずJSON、これは単に好みの問題、とりあえずgemでjson用のライブラリもね。後述しますが、プロフィール画像のアップロードもbotからやりたいときは3つほど追加で読み込んでおく必要があります。 ここで注意すべきは、「access_token」はAPIにアクセスするたびに使うのでインスタンス変数にしてクラス内のどこからでも使えるようにする事。「consumer」は初期化以外ではプロフィール画像の投稿にしか使いません。
APIへのアクセス
関数の引数で送信する
というわけで、post関数の引数でアクセスする例。アクセストークン.post("APIのURL","APIのパラメータ"=>"内容")以下はツィートを投稿するための関数。注意しないといけないのが「タイムアウトはrescueしないとキャッチできない」らしいということ。どこかのサイトでみたんだけどねw updateのAPIは成功すると送信したメッセージの内容を返してくれるので、返事の中に送信したメッセージが含まれているかどうかで成否を判定しています。
もう一つ注意、「Twitterの制限があるので全く同じ文章を半日以内に送る事は出来ない」らしいので、この関数を試すときは試すたびに文章を変えてね!
「メソッド/パラメータ.format」な方法
たとえばidというメッセージIDをもつツィートをリツィートするには「http://api.twitter.com/1/statuses/retweet/id.format」をPOSTする。 この方法ではURLを変更しないといけないのでちょっとめんどい、でもこれでしかアクセスできないAPIもあるっぽい。「URL?パラメータ=内容」で渡す例
3つめとして、「URL?パラメータ=内容」でできるAPIもある。ここではタイムラインの取得を行う例。”取得”なのでPOSTではなくGETなとこに注意。以下のようにすると”メッセージID”以降最新20件のツィートを持ってくる関数です。
statuses = twitter.get_timeline("since_id=メッセージID")エラー処理はテンプレと化しているなw
トラックバック
URL :
コメント