Skip to main content

OpenWhiskからつぶやけないorz

はてなブログから引っ越しました(2019/10/21)

前回作成した天気予報を取得する仕組みからTwitterにつぶやくプログラムを作ろうとしました。

Twitterの開発者用API取得

Twitterの開発者用のAPIを取得します。

Twitterにアクセスして、[Create New App]をクリックします。

[Name]、[Description]、[Website]への入力し、[Deveopper Aggreement]に同意して、[Create your Twiiter applicaiton] をクリックします。

[Cretae my access toke] をクリックして、アクセストークンを生成したら、[Consumer Key (API Key) ]、[Consumer Secret (API Secret)]、[Access Token]、[Access Token Secret]を控えておきます。

必要なモジュールのインストール

node.js、npmを事前にインストールしておきます。

TwitterのAPIをコールするモジュールtwittを導入します。

$ npm install twitt

プログラム作成

index.jsという名前で以下のファイルを作成します。

var Twit = require('twit');
var client = new Twit({
    consumer_key: '先ほど控えた値を指定',
    consumer_secret: '先ほど控えた値を指定',
    access_token: '先ほど控えた値を指定',
    access_token_secret: '先ほど控えた値を指定'
});

function main(params) {
  msg=params.payload;
  //msg='ローカルでバッグ用メッセージ';
  client.post('statuses/update', { status: msg }, function(error, tweet, response) {
    if(error) throw error;
    console.log(tweet);     // Tweet body.
    console.log(response);  // Raw response object.
    return tweet;
  });
}

module.exports.main = main;
// ローカルで実行する場合は以下のコメントを外す
//main(params);

package.jsonの作成

package.jsonという名前で以下のファイルを作成します。

{
  "name": "TweetWeather",
  "main": "index.js",
  "dependencies" : {
    "twit" : "2.2.5"
  }
}

Bluemixへアクションを登録

作成したファイルをZIP化します。

$ zip -r action.zip *

https://console.ng.bluemix.net/openwhisk/learn/cliより、OpenWhiskのコマンドラインツールをダウンロードします。

プログラムをアップロードして、Bluemix上にアクションを作成します。ここではアクション名をTweetWeatherにしました。

先ほどダウンロードしたツールを次のように実行することでアクションを登録できます。

$ wsk action create TweetWeather --kind nodejs:6 action.zip

前回作成したシーケンスの最後にこのアクションをつなげると、日本語に翻訳した天気予報をtweetできます。と言いたいのですが、OpenWhiskからはなぜかTweetできませんでした。。。ローカルからだとつぶやけるのですが。

次のように意図的にエラーになる行を追加するとつぶやけるので、プログラムの問題だと思います。node.jsをよくわかっていないために正しいプログラムを書けていないようです。

    return tweet;
  });
  throw error;  //意図的にエラーになる行を追加
}

node.jsの勉強が必要ですね。