Skip to content

Instantly share code, notes, and snippets.

@Pittan
Created December 23, 2016 12:45
Show Gist options
  • Save Pittan/7be6ba04250aadb8e058becbfeaa93ad to your computer and use it in GitHub Desktop.
Save Pittan/7be6ba04250aadb8e058becbfeaa93ad to your computer and use it in GitHub Desktop.
Send notification to PerfumeHub
/**
* 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!");
});
}
@Pittan
Copy link
Author

Pittan commented Dec 23, 2016

実際にはキーがないと動かないのでアレです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment