LoginSignup
27
24

More than 5 years have passed since last update.

node.jsで定期的にツイッター検索して、メール送信する

Last updated at Posted at 2015-12-23

最近、山手線にホームドア設置されて遅延すること多くないですか?
社畜の僕は遅刻しないよう、毎朝ツイッターで山手線で検索しています。
毎朝ツイッター検索するのがめんどくさいので、node.jsを使って、自動化しました。
環境はCentOS6.5、node.jsはv5.2.0です。

これを読むと分かること
1. node.jsでツイッター検索
2. node.jsでメール送信
3. cronに登録し、1と2を定期的に自動実行

node.jsでツイッター検索

twitパッケージを使用しました。
https://github.com/ttezel/twit

書いてあるとおり、twitをインストールします。
npm install twit

tokenなどが必要になるので、下記ページで登録します。
入力項目通りに入れてくだけなので説明は端折ります。
https://apps.twitter.com/

出来上がったjavascriptは下記のとおりです。
twitに設定するキーなどは登録したキーをコピペしてください。

javascript
var Twit = require('twit')

var T = new Twit({
    consumer_key:         ''
  , consumer_secret:      ''
  , access_token:         ''
  , access_token_secret:  ''
});

T.get('search/tweets', { q: '山手線', count: 30 }, function(err, data,
  var statuses = data['statuses'];
  for (var i = statuses.length - 1; i >= 0; i--) {
    var user_name = statuses[i].user.name;
    var text = statuses[i].text;
    console.log(i + ' : ' + user_name + ' > ' + text);
  };
});

出来上がったjsを実行します。
ファイル名は適宜読み替えてください。
node twit_yamanote.js

実行するとコンソールに山手線でツイッター検索した結果が出ます。

node.jsでメール送信

メール送信はnodemailerを使いました。
http://nodejs.osser.jp/node/node-nodemailer/
とりあえず、インストール!
npm install nodemailer

これもドキュメント通りに実装します。
出来上がったjsは下記のとおりです。

javascript
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport();
transporter.sendMail({
    from: 'hoge@gmail.com',
    to: 'fuga@ezweb.ne.jp',
    subject: 'ハロー',
    text: 'ハローニューワールド'
});

実行してみましょう。
node nodemailer.js

これでtoに設定したメールアドレスにメールが届くと思います。
めっちゃ簡単ですね。これは普通にびっくりしました。

ちなみにメール本文に設定したのは、プログラミング言語でよくあるhello worldではなく、
ハローニューワールド。アイカツの名曲です。
ぜひ聴いてみてください。

1と2で作ったjsを合体させて、最終的に下記のようなjsファイルができました。

javascript
var Twit = require('twit')

var T = new Twit({
    consumer_key:         ''
  , consumer_secret:      ''
  , access_token:         ''
  , access_token_secret:  ''
});

// メール本文用の文字列
var mail_text = '';
T.get('search/tweets', { q: '山手線', count: 30 }, function(err, data, response) {
  var statuses = data['statuses'];
  for (var i = statuses.length - 1; i >= 0; i--) {
    var user_name = statuses[i].user.name;
    var text = statuses[i].text;
    mail_text += i + ' : ' + user_name + ' > ' + text;
  };

  var nodemailer = require('nodemailer');
  var transporter = nodemailer.createTransport();
  transporter.sendMail({
    from: 'hoge@gmail.com',
    to: 'fuga@ezweb.ne.jp',
    subject: '山手線遅れてね?',
    text: mail_text
  });
});

cronに登録し、1と2を定期的に自動実行

crontabに普通に登録します。
59 7 * * * node /hoge/twit_yamanote.js

node.jsにもcronのようなパッケージがありますが、
cronより便利な点が見当たらなかったので、今回は使用していません。
https://github.com/ncb000gt/node-cron
あえて、node-cronを使用する特長があれば、ぜひ知りたいです。

cronに設定している時間を見ていただくとお分かりのように、
今勤めている会社は9時始業でとてもつらいです。
自動化されたメールを見て、もう少しゆっくりできるかどうかを
素早く判断し、朝のちょっとした時間を有効活用したいものです。

27
24
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
27
24