Last active
May 4, 2016 07:52
-
-
Save Magistol/3040c89d342fb787b0fd to your computer and use it in GitHub Desktop.
Twitterのライムラインからエゴサします
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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": [ | |
"" | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
事前に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