JavaScript、Ajax、HTML5(API)、Ruby…Web及び関連技術の実験&情報公開&制作物紹介。

Twitter Bot の紹介

| コメント(0) | トラックバック(0)

ツイッター(http://www.twitter.com/)で活動するボット(Bot)をいくつか作っています。

2010/05/03時点で、2つ。
それらの特設ページを作成しました。

これらのBotの詳しい内容は、各解説ページを参照戴くとして。
ちょっと技術的な話とか、苦労話とか。

そこにRubyがあったから

元々ツイッターのBotを作ろうと思ったきっかけは、Rubyの勉強。
それも(新しもの好きな自分としては)Ruby1.9の言語仕様を実例で覚えていきたいな、と思っていたのです。

できれば本職により近いところで、Webアプリでも作れたらな、と思ってました。でも話題のRADツールであるRailsは、ベースがRuby1.8。1.8系と1.9以降でRubyに色々と仕様変更があり、そこがRailsが1.9系に移行できていない原因だとは思うのですが、言語仕様を見ると、多言語対応(マルチバイト文字対応)強化とか、その他諸々、1.9系の方がより洗練されているんですよね。じゃ、せっかく一から覚えるんだったら1.9じゃなきゃ。と。

そこで手軽だったのが、ツイッターのBot作成だったというわけ。
これならツールが言語仕様に縛られることも(そんなには)なく、(多少はあっても自分でこねくり回して何とか出来るレベルだしそれも含めて)ちょうど良い勉強になりそうだ、というワケです。

初めは Twitter4R

Rubyは組み込みライブラリとしてネットワーク関係も初めから充実しているので、RESTFULなプログラムだったら追加ライブラリなしで書けちゃいます。(ま、それは昨今のサーバーサイドスクリプトとして使用されることをある程度想定されている言語ならほぼ当然ですけれど)
でも簡単なやりとりならそれでも良いですけれど、そこそこ多機能なTwitter APIをいきなり使いこなして色々やるのはやっぱりちょっと面倒。

そこで最初に手を出したTwitter APIラッパーライブラリが、Twitter4R
ま、最初に知ったRuby対応のTwitter API操作ライブラリがこれだった、ということなんですけれど。

このライブラリの良い点は、徹底したラッピング。
TwitterのAPIを操作するのではなく、ツイッターを操作するのにより近い感覚のクラスやメソッドが定義されていて、それが裏で適切なTwitter APIを使用している。
TwitterのWeb APIが返してくるデータ(xmlとかJSONとか)も、独自定義のクラスできれいにラップしてくれる。
普通なら、JSONをparseしてできるHashをそのまま扱う、というパターンが多い(その方が内部処理はシンプルだし、実際巷に出回っているTwitter API操作ライブラリの多くはそうなっていると思う)のですが、Hashだと「名前の指定間違い」があっても気付きにくく、デバッグしにくい(コンパイル型言語なら実行時までエラーに気付かないとか)という難点があるんですよね。
そう言う点でもUI設計的にも優れているし、そう言う仕組みとしてみれば、ソースコードそのものもRubyの勉強になる良い材料だったのです。

ただ大きな欠点が1つ。
あまり開発がアクティブではない、ということ。

Twitterは日々進化し続けており、APIにも仕様変更がたびたび発生しています。
今まで使えたAPIが明日いきなり使えなくなることはあまりありませんが、新しい機能が増えたり(listとか)、そういうのに追従していかないとAPI操作ライブラリとしてはどんどん置いてかれちゃうわけです。
Twitter4Rの不満はそこでした。欲しい操作が使えない!
ま、そこはRubyのダイナミック性を活かして、勝手にクラスを拡張(ライブラリのソースを直接編集するのではなく、クラスを再定義して欲しい機能を持ったメソッドやプロパティを追加する、ということ)で回避できましたけれど。

でも、それでも解決できなかった大きな問題が発生したのです。

「6月末日をもってベーシック認証が使えなくなります」

前々から言われていたことだった(らしい)のですが、セキュリティの問題等で、Twitter APIでベーシック認証の仕様が廃止されるのです。
ベーシック認証廃止カウントダウン特設サイトまであります。
ちょっと楽観視していたのですが、地上アナログ放送よりも1年も早いw

で、ベーシック認証に替わってOAuth認証の使用が勧められていたのです。
Rubyでも、その名もズバリoauthという追加ライブラリがあり、これを導入すれば今までのネットワークAPIとほぼ同じ感覚でOAuth認証を使用したREST API操作プログラムが書けるのです。
実際、APIライブラリを使用しないTwitter発言orTL収集サンプルを書いてみたら、今までと同じ感覚でちゃんと動きました。

が、ここで大きな問題が。
Twitter4Rは、ベーシック認証にしか対応していない!
ソースを見てみましたが、Net::HTTPが深く入り組んでいて、何処をどう弄ればOAuth対応化できるのか、非常に分かりづらい。
サンプルを少し書いてみましたが、なかなかうまくいきませんでした。

で。
かける労力と時間を天秤にかけた結果、諦めて別のライブラリを探すことに。

次回予告:rubytterとの出会い

OAuth認証にも対応していて、手軽に使えるRuby用Twitter APIライブラリを探して見つけたのが、rubytterでした。
Twitter4Rとの違いは......と、書きたいところですがかなり長文になってしまったので、一旦区切ります。

rubytterとの出会いの話、Twitter4Rからの以降の話等は、また次の機会に。

トラックバック(0)

トラックバックURL: http://www.antimon2.atnifty.com/mt5/mt-tb.cgi/70

コメントする

カテゴリ

月別 アーカイブ

OpenID対応しています OpenIDについて

このブログ記事について

このページは、あんちもん2が2010年5月 3日 10:10に書いたブログ記事です。

ひとつ前のブログ記事は「メールフォーム(再)設置」です。

次のブログ記事は「Rubyでちょっと込み入った変数の初期化」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。