ArduinoからTwitterにPOSTするライブラリ


このエントリで紹介しているライブラリは、2010/8月に廃止されたBASIC認証を使用しており、現在動作しません。
以後は、OAuth対応版に移行して下さい。使い方はほぼ同じです。


一つ前のエントリで紹介したArduinoの魅力の一つに、「シールド」と呼ばれる拡張ボードを載せることで簡単に様々なハードウェアを利用できることがあります。純正のEthernetシールドやXBee(無線通信)シールドなどが販売されているほか、ユーザの手によっても作品が作られているようです。純正のシールドはライブラリやサンプルもIDEに組み込まれているので、非常に簡単に使えます。


今回はスイッチサイエンスさんで純正Ethernetシールドを購入してみました。
+
Arduino Duemilanove 328 + Ethernet Shield


これを使って、TwitterにメッセージをポストするSketchを書いてみました。せっかくなので、ライブラリ化して簡単に使えるようにしてあります。


似たようなコードはこの辺りにもありますが、このライブラリではBAISC認証で必要なMIMEエンコード等の処理もライブラリ内で行えるため、より簡単に利用できるようになっています。

ライブラリのダウンロード

こちらからどうぞ。Library-Twitter.zip ※7/11バグ修正を行いました:詳細下記。


ダウンロード後、アーカイブを解凍してできるTwitterフォルダをArduino IDEのHardware/Libararyに格納すればOKです。(追記:MacIDE 17以降では、~/Documents/Arduino/libraries フォルダ(なければ新規作成)に入れてください。)。IDEを再起動すると自動的にライブラリがビルドされます。
簡単なサンプルが用意してあり、メニューの File>Sketchbook>Examples>Twitter>SimplePost から開けます。
これを(IPアドレス等の設定の上)Arduinoにアップロードすると、"Hello, World! I'm Arduino!"というメッセージをTwitterに投稿します。

↑こんなかんじ。また、シリアルポートに接続状況等を出力します。

使い方

上記サンプルをベースに説明します。最初に、グローバル変数としてTwitterライブラリを初期化します。アカウント名:パスワード という文字列を引数に渡します。

Twitter twitter("YourID:Password");

setup()関数では、Ethernetの初期化が必要です。詳細はリファレンスを。


TwitterへのPOSTは、

    twitter.post("POSTする文字列");

というメソッドで行います。Twitterへの接続が成功するとtrueが返ります。


Twitterからのレスポンスを待つためには

    int status = twitter.wait();

を呼びます。このメソッドはレスポンスに含まれるHTTPステータスコードを数値で返します。
200なら投稿成功です! 401が返ってきた場合は認証エラーですので、パスワード等を見直してみてください。ほかにも短時間の間に全く同じ文字列を投稿するとエラーになるようなので注意して下さい。

応用

これを使えば、いろんなセンサからTwitterにPOSTできる「実世界bot」がArduino単独で簡単に作れるはず。植木鉢とかキャットドアとか、いろいろbot化してみると良いんじゃないかな?

追記5/13

Arduino Wikiに使い方の説明(in English)を書いたのでリンク貼っておきます。
http://www.arduino.cc/playground/Code/TwitterLibrary
フォーラムへの投稿:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241597160

追記7/11

複数回のPOSTがうまくいかないというバグがありましたので、修正しました。

また、Arduinoのシリアルポートにターミナルソフト等で接続してTwitterにPOSTするというサンプルスケッチをExamplesに追加しました。

旧バージョンをダウンロードされた方は、上記のリンク先から再ダウンロードをお願いします。