[mbedbot] Twitter連携

October 02, 2017

自律的にボットに何かを発話させたい場合、一番お手軽に活用できるのはTwitterとの連携かと思います。Twitterでは無数のアカウントがあり様々な情報が飛び交ってます。それを利用しない手はありません。

hubotではtwitterに対応したアダプターがありますが、これを使わず別のTwitterストリーミングAPIと連携するモジュール(ntwitter)を使用しました。下記はHubotスクリプトの一部です。

twitter = require 'ntwitter'


module.exports = (robot) ->
  envelope = room: "myhouse"

  # Twitter連携
  tw = new twitter {
    consumer_key: 'xxx',
    consumer_secret: 'xxxx',
    access_token_key: 'xxxx',
    access_token_secret: 'xxxxx'
  }
 
  userids = [169480493]
  tw.stream 'statuses/filter', {follow:userids.join(',').toString()}, (stream) =>
    stream.on 'error', (res) =>
      console.log res
    stream.on 'end', (res) =>
      console.log res
    stream.on 'destroy', (res) =>
      console.log res
    stream.on 'data', (data) =>
      d = new Date
      hour = d.getHours()
      if userids.indexOf(data.user.id) >= 0 and data.text? and hour > 6 and hour < 22
        robot.send envelope, {cmd:1,param:2,text:data.text,motion:[],irdata:[]}

これでmbedbotがnikkeiというアカウントのつぶやきを発話してくれます。useridsのidはTwitterのアカウントのID(このサイトで調べることが可能)  リストで、複数指定することも可能です。一応、深夜に呟かれるとうるさいので、7時から21時の間だけ発話するように制限をかけています。