ひまわりが撮影した写真を簡単に取得出来る himawari.js を使って、地球の画像を Slack に定期的にポストしていきます。
こんな雄大な地球の姿を見たら、きっと怒る人もいなくなりますね。職場の雰囲気を良くするためにも、あらゆるチャンネルにガンガンポストしていきましょう。
ひまわりの画像を取得する
たったこれだけで、取得出来ます。
var himawari = require('himawari');
himawari({
zoom: 1,
date: 'latest',
debug: false,
infrared: false,
outfile: '/path/to/output/earth.jpg',
skipEmpty: true,
success: function () { process.exit(); },
error: function (err) { console.log(err); },
chunk: function (info) {
console.log(info.outfile + ': ' + info.part + '/' + info.total);
}
});
いくつかオプションを説明すると、
zoom
は 1 〜 5 を指定する事ができ、値が大きくなるほど画像サイズが上がります。
date
は、いつの写真を取ってくるかを、Date()
か文字列で指定する事が出来ます。また、latest
とすると最新の写真を取ってきます。(ちなみに、写真は 10 分毎に撮影されます)
infrared
は true
にすると、赤外光スペクトルでの画像を取得できるとのこと。
Slack にポストする
#earth チャンネルに地球の画像をアップする postToSlack
関数を実装しました。token
は各自の bot の token を入れて下さい。himawari
で作成した画像の filename
を引数としています。
function postToSlack(filename) {
var fs = require('fs');
var path = require('path');
var request = require('request');
var payload = {
channels: '#earth',
token: 'hogehoge',
file: fs.createReadStream(path.join(__dirname, filename)),
filename: filename,
username: 'pekepek'
}
var options = {
uri: 'https://slack.com/api/files.upload',
formData: payload
}
request.post(options, function(error, response, body){
if (!error && response.statusCode == 200) {
console.log(body.name);
} else {
console.log('error: '+ response.statusCode);
}
});
};
10 分毎に衛星写真をポストする
node-cron を使って、10 分毎に写真の取得、Slack へのポストを行います。
var cronTime = '*/10 * * * *';
CronJob = require('cron').CronJob;
var job = new CronJob({
cronTime: cronTime,
onTick: function() {
// ひまわり画像の取得
// Slack へポスト
},
start: false
});
job.start();
これで準備 OK
組み合わせる
function postToSlack(filename) {
var fs = require('fs');
var path = require('path');
var request = require('request');
var payload = {
channels: '#earth',
token: 'hogehoge',
file: fs.createReadStream(path.join(__dirname, filename)),
filename: filename,
username: 'pekepek'
}
var options = {
uri: 'https://slack.com/api/files.upload',
formData: payload
}
request.post(options, function(error, response, body){
if (!error && response.statusCode == 200) {
console.log(body.name);
} else {
console.log('error: '+ response.statusCode);
}
});
};
var cronTime = '*/10 * * * *';
CronJob = require('cron').CronJob;
var job = new CronJob({
cronTime: cronTime,
onTick: function() {
var himawari = require('himawari');
himawari({
zoom: 1,
date: 'latest',
debug: false,
infrared: false,
outfile: './earth.jpg',
skipEmpty: true,
success: function (info) {
postToSlack('earth.jpg');
},
error: function (err) { console.log(err); },
chunk: function (info) {
console.log('Saved' + ': ' + info.part + '/' + info.total);
}
});
},
start: false
});
job.start();
できた!
あとは実行するだけ
node post_earth.js &
disown
できたー!
きれいだなあ!!
ただ、あれですね。10 分毎だと全然変化ないですね。