TwitterがBasic認証締め出しために、Twitter APIを利用するために
OAuthという方法を使用しなければいけなくなりました。
なので、以前書いた記事
http://ros-robot.blogspot.com/2010/01/twitterros.html
が役に立たなくなってしまいました。
Twitter APIを再び使いたくなったので、またROSノードを作って見ました。
相変わらずへなちょこな私なので既存のライブラリを使わせていただきました。
Pythonだけあれば使える以下のライブラリが良さげでした。
http://www.techno-st.net/wiki/Python-twoauth
OAuthを利用するプログラムを書くためには、まず
http://dev.twitter.com/apps/でソフトを登録します。
そこでconsumer keyとconsumer secretを取得します。
そしてユーザにaccess_tokenとPINを取得してもらいます。
この4つの情報をつかってAPIを利用します。
なのでノードは以下のようになります。
パスワードを直接書かなくてよいので安全にはなったでしょうか。
面倒くさいですが。
#!/usr/bin/env python
import twoauth
import roslib; roslib.load_manifest('rostwitter')
import rospy
from std_msgs.msg import String
# 以下をあらかじめ取得しておく必要がある。
consumer_key = 'HOHGOEHOGHEOHGOE'
consumer_secret = 'HOGEOGHOEHO'
access_token = 'HOGEOHGOEHOG'
access_token_secret = 'HOGEOGOEHOGHOE'
def twit(data):
rospy.loginfo(rospy.get_name()+"I heard %s",data.data)
twitter.status_update(data.data)
def listener():
rospy.init_node('rostwit_server', anonymous=True)
rospy.Subscriber("twit", String, twit)
rospy.spin()
if __name__ == '__main__':
twitter = twoauth.api(consumer_key, consumer_secret, access_token, access_token_secret)
listener()
書き込みは
$ rostopic pub /twit std_msgs/String 'Tweet by ROS node test'
でやりました。
via lv1と書かれています。
lv1というのが登録したソフトの名称になります。