2020年12月4日金曜日

Node for MaxでMaxからTwitterを利用

Maxのバージョン8から追加された機能に,Node.jsの機能をMaxで利用できるNode for Maxというものがあります.Max8がリリースした当初は,少し盛り上がりましたが,今は使っている人もいる一方で,あまり多用されていない気がします.私個人の話に限って言えば,下記の点において,あまり使う必要性を感じていませんでした.


・PythonプログラムをMaxとは別で動かして,udpか何かで結果を受け取ればweb APIの利用は不可能ではない(というより,Node for Max登場以前からそうしていた)

・Node.jsが何か,あまり理解していない

・C++でエクスターナルを作れば,あらかた出来ないことはない(幸い,現時点でそのスキルを有している)

・Node.jsが何か,あまり理解していない


結局,Node.jsって何なんでしょう?今の時代,webやクラウド上に存在する膨大なリソースをMaxで直接利用できるようになったのは,必然とは言えるかもしれません.

私個人が利用する分においては,全く必要性を感じないNode for Maxですが,とある事情で,大急ぎで習得しないといけなくなったので,光速に限りなく近づいていく物体よりも重い腰を上げて勉強を始めました.まずは,Node.jsの利用から試します.よく使っているwebサービスと連動すると,何だか嬉しいので,Twitterの利用を試してみます.

まず,Twitter Developperでdevelopper accountを作成し,appを作成します.この手順が非常に多くの手順を必要とします.その後,MaxでTwitterを利用するNode.jsスクリプトおよびMaxパッチを作成します.

まずは,Twitter Developperに自身のTwitter IDでログインします(今は国民一人につき,一つはTwitter IDを持っている時代ですよねぇ・・・).

その状態で,"Apps"へ行きます.


"Create an app"をクリックします.


適当な目的を選んで,Nextをクリックします.


国と名前を入力してNextをクリックします.



このappの目的を聞かれるので,Google翻訳で嘘800の目的を書いておきます.それ以外の項目は,"No"にするとNextが押せるようになります.


確認画面が出るので,"Looks good"をクリックします.


規約を読んで,チェックボックスにチェックを入れ,"Submit application"をクリックします.


メールが届くので,"Confirm your email"をクリックすると,審査が始まります.しばらく時間がかかります.


何度か追加で説明を求められる場合もありますが,その度に追加で説明をします.(日本語でも良さそうです)

審査が完了すると,メールが届きます.

developper accountにアクセスすると,このような画面になります."Create Project"をクリックします.



プロジェクト名を入力し,Nextをクリックします.


目的を選んでNextをクリックします.


目的を入力します.先のステップで入力したものと同文で大丈夫です.


app名を入力して,"Complete"をクリックすると,app作成が完了します.


今作ったappを選択し,鍵マークをクリックします.


"Keys and tokens"タブに行き,"API Key &secret"及び"Access token & secret"の欄を"Generate"もしくは"Regenerate"します.


・API key
・API key secret
・Access token
・Access token secret

の4つが必要なので,メモしておきます.

いよいよ,Node.jsスクリプトを作って行きます.

ポイントは,Maxのnode.scriptが特定のメッセージを受け取ったときのイベントハンドラを作るところです.そのときに,Twitter APIを呼び出して,タイムラインの取得やツイートの投稿を行なっています.

const Max=require('max-api');//Node for MaxのAPI
const Twitter=require('twitter');//Twitter API
console.log('app start');
var client=new Twitter({
	consumer_key:'自分のAPI key',
	consumer_secret:'自分のAPI key secret',
	access_token_key:'自分のAccess token',
	access_token_secret:'自分のAccess token secret'
	});

Max.addHandler("timeline", () => { //node.scriptが"timeline"を受け取った際のイベントハンドラ
	client.get('statuses/user_timeline',{screen_name:"dakiyamasan"},function(error,tweets,response){ //dakiyamasanのタイムラインを取得
       	 	if(!error){
			//タイムラインを表示
                	console.log(tweets);
			Max.outlet(tweets);
        	}
	});			
});

Max.addHandler("Tweet",(msg)=>{ //node.scriptが"Tweet xxx"を受け取った際のイベントハンドラ.2番目の文字列がmsgに格納されている.
	client.post('statuses/update', {status:msg}, function(error, tweet, response){ //msgをツイートする
    		if (!error) {
        		console.log(tweet);
    		} else {
        		console.log('error');
    		}
	});
});

Maxパッチはこのようになります.node.scriptに先ほど作ったスクリプトを指定します.




ここで,node.scriptに"script npm --save twitter"メッセージを入力すると,Twitter APIの利用に必要なパッケージがインストールされます.インストールできたかどうか,右下のnode.script debug toolに表示されます.


node.scriptに"script start"を入力すると,実行が始まります.実行が始まっても,イベントドリブンなので,ほぼ何も起こりません.node.script debug toolがProcess runningになる程度です.


node.script debug toolでShow consoleをクリックすると,コンソールモードになります.ここで,"app start"が表示されていることで,console.log('app start'); が実行されたことがわかります.このようにしてデバッグすることができます.


node.scriptに"timeline"を入力して,タイムラインを取得します.




node.scriptに"tweet xxx"を入力して,ツイートを投稿します.テキストボックスにツイートを入力して,上のButtonをクリックします.



ツイートできました.


Node.jsでタイムラインを取得しても,今のツイートが反映されています.

とりあえず,MaxNode.jsをMaxでどう使うかは分かりました.