Node-RED(IBM Cloud)でTwitter APIを叩く

準備するもの

Node-REDのアカウント

今後の予定として自然言語処理を行いたいためIBM icloudから作成しました。

Twitter API

ツイッターアカウントを新規作成してアクセス権限をここから申請して権限を獲得してください。英語で申請する必要があるので私は、deeplなどの翻訳アプリを使って文章を作って申請しました。

申請が通ったら、プロジェクトを作成してアクセストークンを獲得してください(メモを忘れずに)

叩き方

モジュールを追加する方法

node-red-node-twitterが一番個人的に使い勝手が良かったです。

このモジュールを追加するとツイートの検索を行う「twitter in」とツイートやDMの送信を行う「twitter out」が使えるようになります。

「twitter out」は使いにくかったので、「twitter in」のみ紹介します。

「twitter in」では次の4つの検索が行えます。

  • すべての公開ツイート・・検索ワードの指定が可能
  • フォローしている全てのユーザのツイート
  • 特定のユーザのツイート・・IDによる検索で複数のID指定が可能
  • ダイレクトメッセージ

の検索が行えます。

結果としてtweetオブジェクトが返されます。

注意点としてリツイートやリプライが含まれるため、tweetオブジェクトに含まれるリツイートやリプライのフラグから判別を行ってください。

functionノードを使う方法

準備(IBM Watsonから行う場合)

node-redでtwitterのAPIを叩くために、IBMのContinuous Delivery > git >  bluemix-settings.js に移動し、functionGlobalContext内に記述を加えてアプリケーションの再起動を行う。これにより、twitter APIを叩けるようになる。

functionGlobalContext: { 
        twitter:require('twitter'), // <--追記   
        // os:require('os'),
        // jfive:require("johnny-five"),
        // j5board:require("johnny-five").Board({repl:false})
 },

ツイート検索

var twitter = global.get('twitter')

var client = new twitter({
  consumer_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  consumer_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz',
  access_token_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  access_token_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
});

 

searchWord = '検索したいワード'

const params = {q:searchWord ,count: 5,result_type:'recent',}

msg = client.get('search/tweets', params)

return msg;

リツイート

上のツイート検索によって、msgに5個のツイートを取得した後にリツイートを行う。

var twitter = global.get('twitter')

var client = new twitter({
  consumer_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  consumer_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz',
  access_token_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  access_token_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
});


client.post('statuses/retweet', {id:msg.statuses[1].id_str}) //1つ目の取得したツイートをリツイートする

return msg;

コメント

タイトルとURLをコピーしました