前提・実現したいこと
今年になってプログラミングを始めた初心者です。
よろしくお願いします。
実現したいことは、以下の通りです。
1)google apps scriptから、
2)twitterの検索apiを利用し
3)検索結果をjsonで取得し
4)取得したjsonの結果、特定の文字が含まれている場合のみ
5)slackに通知する
その際、可能ならtweetを引用する
google apps scriptに1日1回のトグルを設定し、
昨日から今日までの間に、
特定のアカウントから、
特定の文字を含むツイートがあった場合を検索して、
通知させたいです。
使用したライブラリは、以下の2つです。
moment.js :MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48 ver.9
slackApp :M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO ver.22
発生している問題・エラーメッセージ
以下コード内、function updateOrNot()を実行しています。
エラーメッセージは表示されません。
Logger.logを表示すると、twitterでの検索はできていますが、
改行コード"\n"が複数含まれています。
slackには通知されません。
該当のソースコード
1 var API_KEY = 'API_KEY'; 2 var API_SECRET = 'API_SECRET'; 3 4// 変数dateを宣言し、現在時刻を代入 5 var nowDate = Moment.moment(); 6 7// 検索文字列指定 8 var searchWord = "検索文字"; 9 var searchAccount = "ツイッターアカウント"; 10 var searchSince = nowDate.clone().subtract(1,"days").format("YYYY-MM-DD"); 11 var searchUntil = nowDate.clone().format("YYYY-MM-DD"); 12 var searchFullText = searchWord + " from:" + searchAccount + " since:" + searchSince + " until:" + searchUntil; 13 14 15// アクセストークンの取得 16function getAccessToken() { 17 var url = 'https://api.twitter.com/oauth2/token'; 18 var credential = Utilities.base64EncodeWebSafe(API_KEY + ':' + API_SECRET); 19 var options = { 20 headers : { 21 Authorization: 'Basic ' + credential, 22 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' 23 }, 24 method: 'post', 25 payload: 'grant_type=client_credentials' 26 }; 27 var response = UrlFetchApp.fetch(url, options); 28 var json = JSON.parse(response); 29 var accessToken = json.access_token; 30 31 return accessToken 32} 33 34 35// リクエスト 36function request2(text) { 37 var accessToken = getAccessToken(); 38 if(accessToken) { 39 var baseurl = "https://api.twitter.com/1.1/search/tweets.json"; 40 var q = encodeURIComponent(text); 41 var url = baseurl + "?q=" + q + "&lang=ja&result_type=recent"; 42 var options = { 43 headers : { 44 Authorization: 'Bearer ' + accessToken 45 }, 46 method: 'get', 47 escaping: false, 48 muteHttpExceptions: true 49 }; 50 var response = UrlFetchApp.fetch(url, options); 51 var result = JSON.parse(response.getContentText()); 52 Logger.log(JSON.stringify(result, null, 2)); 53 return result; 54 55 56// slackのチャンネルに投稿する 57 var slackAccessToken = 'xoxp-slackAccessToken'; 58 var slackApp = SlackApp.create(slackAccessToken); 59 var channelId = "#twitter"; // 対象チャンネル 60 61 62// slackに送る文字列 63 var bot_icon ="https://www.sample.com/sample.png"; //Botのアイコン 64 var bot_name = "botbot"; // Botの名前 65 var strBody = "更新されました"; 66 var message = strBody; // 投稿するメッセージ 67 68 slackApp.postMessage(channelId, message, { 69 icon_url: bot_icon, 70 username: bot_name 71 }); 72 73 74// イベントがある時のみpostする 75// 更新されたかどうか、条件分岐 76 if(result.indexOf(searchWord) != -1) { 77 slackApp.postMessage(channelId, message, { 78 icon_url: bot_icon, 79 username: bot_name 80 }); 81 }; 82 }; 83 } 84 85 86// 検索文字 87function updateOrNot() { 88 request2(searchFullText); 89 } 90
試したこと
jsonに改行コードが含まれていると、正常にjsonの取得が
うまく働かないという記事も見たため、
// リクエスト
内のjsonパース部分を以下の2行に置き換えてみました。
var newResponse = response.replace(/\n/g, "");
var result = JSON.parse(newResponse.getContentText());
しかし、以下のエラーメッセージが出てしまいました。
TypeError: Cannot find function replace in object
{"statuses":[{"created_at":"Sat Jul 21 08:59:01 +0000
初歩的なミスだとは思いますが、
ご指摘よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/25 04:09
2018/07/25 05:42