2013年8月19日月曜日

mbedでTwitterのタイムライン・リプライを取得する(Supertweet版)

mbedとSupertweetを利用してTwitterのタイムライン・リプライを取得できるようにしてみました。
と、言ってもHTTPClientStreamingExampleに少し手を加えてしてどんなデータが送られてくるのかをPCから見れるようにしただけです。 (サンプルを作っていただいた方に感謝)

Supertweetのデータを取得できるようにしたものがこちら
http://mbed.org/users/nameless129/code/SuperTweet_get/
Supertweetのユーザー名とパスワードを入力してコンパイル。mbedから実行するとタイムラインがシリアル通信を通してPCに送られるようになっています。ボーレートを921600bpsに設定しているので注意してください。

実行するとタイムラインのデータを見ることができます。
 タイムラインの本文となる部分は5行目の"text":以降のようです。Unicodeで日本語はエンコードされています。しかし、どういう訳か通常であれば%u3010のような形式でエンコードされるはずが\u3010とエンコードされています。(おかげで文字の正体を探るのに苦労させられました。。。)

SupertweetはTwitterのAPIすべてをサポートしているようなので、リプライの取得も試してみました。方法としてはTwitter APIのアドレスに倣い、Supertweetのアドレスを修正するだけです。私がアップしたソースの36行目にリプライを取得するためのアドレスをセットしています。
実行結果は以下の通りです。

先ほどのタイムライン取得と同様に5行目の"text":からリプライの本文(@en129_mbed test)となっています。リプライ元のユーザー名は10行目の"screen_name":"en129"のようです。

以上の実行結果より、Supertweetを用いることでTwitterのAPIにアクセスしたときと同じデータを受信できるようです。ただし、受信するデータが多く、扱いが面倒と思いました。

次は同じTwitterプロキシサービスで機能が簡素化された「StewGate U」を試してみる予定です。

2013年8月17日土曜日

mbedのTwitterExampleでツイートしてみる

 mbedでTwitterの情報を取り込んで処理させる第一歩として、mbedからTwitterに投稿する動作をさせてみました。その中でトラブルがあったのでそのまとめです。

 まずはtwitterのサンプルプログラムを探すべく、「twitter」と検索。トップに出たCookBookのTwitterExampleをインポートします。

SuperTweetを経由するので登録。

http://blog.fkoji.com/2010/05250022.html

連携アプリ認証後、登録画面が変わっており、Email・Application Name・Description・Application Website・Organizationについて入力するようになっていました。重要なのはEmailだけで他はそれぞれ適当に入力して大丈夫かと思われます。
入力後、承認メールが送られてくるのでメール内のリンクをクリックしてアカウントを有効にします。
登録後の手順は上記サイトとほぼ同じでした。
mbedオンラインコンパイラに戻り、twitterアカウント名とSuperTweetにて設定したパスワードをそれぞれ"myuser", "mypass"のところに入力。(twitterアカウント名は@不要です) コンパイルしようとしたところ・・・

トラブルその1:ライブラリをインポートしてもヘッダファイルが不足しておりコンパイルできない
HTTPClient.hがないと言われます。
Fix it!ボタンを押すとライブラリを探す画面が出るので、「NetServices」をインポートします。HTTPClientもありますが、それをインポートしてもまた別のエラーでコンパイルが通りませんでした。
これにて無事にバイナリをmbedに転送してツイートが!と思いきや・・・

トラブルその2:ツイートできないorz
原因はツイートの送り先URLが古いままのようです。プログラムの36行目が
HTTPResult r = twitter.post("http://api.supertweet.net/1.1/statuses/update.xml", msg, NULL);
となっていますが、Supertweetの仕様(http://www.supertweet.net/about/api)を見てみるとアドレスの末端がxmlではなくjsonになっています。

プログラムも合わせてjsonに修正したところツイートしてくれました。