Skip to content

Instantly share code, notes, and snippets.

@Magistol
Last active May 4, 2016 07:52
Show Gist options
  • Save Magistol/3040c89d342fb787b0fd to your computer and use it in GitHub Desktop.
Save Magistol/3040c89d342fb787b0fd to your computer and use it in GitHub Desktop.
Twitterのライムラインからエゴサします
{
"debug": {
"show_timeline": false
},
"twitter": {
"consumer_key": "",
"consumer_secret": "",
"access_token_key": "",
"access_token_secret": ""
},
"pushover": {
"user": "",
"token": ""
},
"filter": {
"keyword_regular_expression": "",
"keyword_match": [
""
],
"exclude_source_username": [
""
]
},
"target_device": [
""
]
}
var twitter = require('ntwitter');
var pushover = require('pushover-notifications');
var colors = require('colors');
var conf = require('config');
var util = require('util');
var tw = new twitter({
consumer_key: conf.twitter.consumer_key,
consumer_secret: conf.twitter.consumer_secret,
access_token_key: conf.twitter.access_token_key,
access_token_secret: conf.twitter.access_token_secret
});
var push = new pushover({
user: conf.pushover.user,
token: conf.pushover.token
});
// 例外処理エラー
// forever 使うならコメントにしておいて
/*
process.on('uncaughtException', function(err) {
util.log('uncaughtException => ' + err);
});
*/
// メイン処理
function main_process() {
tw.stream('user', function(stream) {
stream.on('data', function(data) {
// ツイートの時のみ
if (data && data.user && data.text) {
if (filter_tweet(data.user.screen_name, data.text)) {
send_pushover(data.user.screen_name, data.text, data.id_str);
util.log((data.user.screen_name + " " + data.text).red);
}
else if(conf.debug.show_timeline){
util.log(data.user.screen_name + " " + data.text);
}
}
});
stream.on('end', function(response) {
// 切断
main_process();
});
stream.on('destroy', function(response) {
// 接続の破棄
});
stream.on('error', function(response) {
util.log(response);
main_process();
});
});
}
var keyword_list = conf.filter.keyword_match;
var exclude_username = conf.filter.exclude_source_username;
// フィルタリング
// 通知条件にヒットしたらtrueを返す
function filter_tweet(user, tweet) {
// 自分の発言は通知しない(RTも通知しない)
for (var i = 0; i < exclude_username.length; i++) {
if (user == exclude_username[i]) {
return false;
}
}
// キーワードにヒットするか
for (i = 0; i < keyword_list.length; i++) {
if (tweet.indexOf(keyword_list[i]) != -1) {
return true;
}
}
return false;
}
// pushoverで通知する
function send_pushover(source, message, message_id) {
for (var i = 0; i < conf.target_device.length; i++) {
var msg = {
message: message,
title: "Ego search from @" + source,
sound: 'magic',
url: "twitter://status?id=" + message_id,
url_title: "View tweet",
device: conf.target_device[i],
priority: 0
};
push.send(msg, pushover_result);
}
}
function pushover_result(err, result) {
if (err) {
throw err;
}
var res = JSON.parse(result);
if (res.status !== 1) {
util.log("通知エラー: " + res.request);
}
}
main_process();
事前にPushoverのアカウント作成と通知クライアントアプリのダウンロードが必要
https://pushover.net/
Node.js用のライブラリをインストール
npm install config ntwitter pushover-notifications colors forever
設定ファイルの作成
mkdir config
vim config/default.json
実行
forever start egosa.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment