LoginSignup
47
45

More than 5 years have passed since last update.

気象衛星ひまわりからリアルタイムに送られてくる写真を、ひたすら Slack に投稿する

Posted at

image

ひまわりが撮影した写真を簡単に取得出来る 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 分毎に撮影されます)
infraredtrue にすると、赤外光スペクトルでの画像を取得できるとのこと。

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

組み合わせる

post_earth.js
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

image

できたー!
きれいだなあ!!

ただ、あれですね。10 分毎だと全然変化ないですね。

47
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
45