Created
December 23, 2016 12:45
-
-
Save Pittan/7be6ba04250aadb8e058becbfeaa93ad to your computer and use it in GitHub Desktop.
Send notification to PerfumeHub
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
/** | |
* PerfumeHub Notification Script | |
* 2016-11-19 Pittan | |
* | |
* 以下をpackage.jsonに書いてもらえれば動きます | |
* "azure": "^1.2.0-preview", | |
* "azure-sb": "^0.10.4", | |
* "twitter": "^1.3.0" | |
*/ | |
var twitter = require('twitter'); // twitter | |
var azure = require('azure'); // NotificationHubアクセス用 | |
var perfumeHubTransitionScript = { | |
blog : "PHBlogTransition", | |
staff : "PHStaffTransition", | |
news : "PHNewsTransition", | |
movie : "PHMovieTransition", | |
photo : "PHPhotoTransition", | |
special : "PHSpecialTransition" | |
}; | |
/** | |
* Microsoft Azure Notification Hub接続用のキー | |
*/ | |
var perfumeHub = { | |
name : '...', | |
connectionString : 'Endpoint=sb://....' | |
}; | |
/** | |
* Twitterタイムライン監視用のアプリケーションキー | |
* TwitterDevelopersでアプリケーションを作成する必要があります。 | |
*/ | |
var twitterKey = { | |
consumer_key: '****', | |
consumer_secret: '****', | |
access_token_key: '****', | |
access_token_secret: '****' | |
}; | |
// Azureに接続 | |
var notificationHub = azure.createNotificationHubService(perfumeHub.name,perfumeHub.connectionString); | |
// 以下のどれかをコメントアウトして実行してください | |
// WebView通知のサンプル | |
// sendNotification("WebView通知", null, null, "news", "http://google.com", "https://example.com/image.jpg"); | |
// P.T.A.通知のサンプル | |
// sendNotification("P.T.A.通知", perfumeHubTransitionScript.news, null, "pta", null, "https://example.com/image.jpg"); | |
// twitter監視のサンプル | |
// watchTwitterTimeline(); | |
function watchTwitterTimeline(){ | |
// アプリ登録時に取得したkeyを入れてOAuth認証し、初期化 | |
var client = new twitter(twitterKey); | |
// 監視する条件(twitterのAPIに準じます) | |
var params = {screen_name: 'perfume_pta'}; | |
// 監視 | |
// 参考 : http://qiita.com/yukisaibai/items/4c7e1b413edb8e3ae92a | |
client.get('statuses/user_timeline',params,function(error,tweets,response){ | |
//エラーが起きたらエラーログを吐いて終了 | |
if (error) { | |
console.log(error); | |
return; | |
} | |
var user_id=tweets[0].user.id_str; // 取得したtweet情報よりユーザ固有IDを文字列形式で取得 | |
var option={follow:user_id}; // 取得したユーザIDよりストリーミングで使用するオプションを定義 | |
// console.log("取得する対象のuid : " + user_id); | |
// ストリーミングで指定したユーザのタイムラインを監視 | |
client.stream('statuses/filter',option,function(stream){ | |
stream.on('data',function(data){ | |
// RTという文字を除外します。(文中にRTという文字があっても弾いちゃうので、ここは要工夫かも) | |
if (data.text.indexOf("RT") != -1) return; | |
parseTweet(data.text); | |
}); | |
}); | |
}); | |
} | |
/** | |
* ツイートの内容を見て通知を送信します | |
* @function parseTweet | |
* @param tweet {string} ツイートの文字列 | |
*/ | |
function parseTweet(tweet){ | |
var alert = ""; | |
var script = ""; | |
if (tweet.indexOf('STAFF更新') != -1) { | |
alert = "[P.T.A.] STAFF更新"; | |
script = perfumeHubTransitionScript.staff; | |
} else if (tweet.indexOf('かしゆか更新') != -1) { | |
alert = "[P.T.A.] かしゆか更新"; | |
script = perfumeHubTransitionScript.blog; | |
} else if (tweet.indexOf('あ〜ちゃん更新') != -1) { | |
alert = "[P.T.A.] あ〜ちゃん更新"; | |
script = perfumeHubTransitionScript.blog; | |
} else if (tweet.indexOf('のっち更新') != -1) { | |
alert = "[P.T.A.] のっち更新"; | |
script = perfumeHubTransitionScript.blog; | |
} else if (tweet.indexOf('MOVIE更新') != -1) { | |
alert = "[P.T.A.] MOVIE更新"; | |
script = perfumeHubTransitionScript.movie; | |
} else if (tweet.indexOf('PHOTO更新') != -1) { | |
alert = "[P.T.A.] PHOTO更新"; | |
script = perfumeHubTransitionScript.photo; | |
} else if (tweet.indexOf('FC NEWS更新') != -1) { | |
alert = "[P.T.A.] NEWS更新"; | |
script = perfumeHubTransitionScript.news; | |
}else{ | |
return; | |
} | |
sendNotification(alert, script, "pta", "pta", null, null); | |
}; | |
/** | |
* 通知を送信します | |
* @function sendNotification | |
* @param title {string} 通知のタイトル | |
* @param script {string} P.T.A.通知で実行するスクリプト(ptaモードのみ有効) | |
* @param channel {string} 通知チャンネル(nullで全員に送信) | |
* @param mode {string} アプリが通知を開くときの挙動 | |
* @param webUrl {string} WebViewを開く場合のURL(newsモードのみ有効) | |
* @param imageUrl {string} 通知に付ける画像のURL(iOS10以降対応) | |
*/ | |
function sendNotification(title, script, channel, mode, webUrl, imageUrl){ | |
// iOS用の通知送信ペイロード (基本形) | |
var payload = { | |
"aps" : { | |
"alert" : { | |
"body" : title | |
}, | |
"badge" : 1, | |
"sound" : "default", | |
"mutable-content" : 1 | |
}, | |
"title" : title, | |
"id" : 999999, //今のところIDを振る必要がないので適当 | |
"mode" : mode | |
}; | |
if (script) payload.pageScript = script; | |
if (webUrl) payload.url = webUrl; | |
if (imageUrl) payload.image_url = imageUrl; | |
//通知を送信します | |
notificationHub.apns.send(channel, payload, function(error){ | |
if (error) { | |
console.log(error); | |
return; | |
} | |
console.log("Notification has sent!"); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
実際にはキーがないと動かないのでアレです。