slack에게 TwitterDM이 왔음을 알리는 도구를 무료로 만들었습니다.
12069 단어 슬랙GoogleAppsScriptgmailgas
어떤 것을 만들었습니까?
slack에서 지정한 채널에 DM이 왔을 때 알림을 보내는 slack 앱을 만들었습니다.
작성한 경위
공식적으로 제공되는 것 그렇다면 타임 라인이나 트윗은 할 수있는 것 같지만 DM 조작까지는 할 수 없었습니다.
특정 채널에 이메일을 알릴 수 있는 앱은 유료 작업 공간 만 사용할 수 있었기 때문에
작성에 사용한 것
소스 코드
main.gsfunction fetchContactMail() {
/* Gmailから特定条件のスレッドを検索しメールを取り出す */
var strTerms = 'label:twitterdm';
var myThreads = GmailApp.search(strTerms, 0, 10); //条件にマッチしたスレッドを取得
var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納 var valMsgs = [];
var br = /[\r\n]+/g; //改行
var rep = ""; //置換文字列
/* 各メールから日時、送信元、件名、内容を取り出す*/
for(var j =0;j<myMsgs.length;j++){
for(var i =0;i<myMsgs[j].length;i++){
if(!myMsgs[j][i].isStarred()){
valMsgs[i] = myMsgs[j][i].getBody().replace(br,""); //html形式の取得と空白削除
var myRegexp = /<td class=\"preheader\" style=\"padding:0;margin:0;line-height:1px;font-size:1px;font-size:1px;color:#ffffff;\">([\s\S]*?)<d><\/d><\/td>/;
//↑tdタグで囲われた場所を抽出するための正規表現。gmailだとstyleで書かれるため大変汚い。
var text = valMsgs[i].match(myRegexp);// matchを用いると0に素のテキスト1に抽出したテキストが入る
var date = myMsgs[j][i].getDate();
var formatD = Utilities.formatDate(date, "Asia/Tokyo", "yyyy-MM-dd HH:mm"); //見やすいようにフォーマットをかける
myMsgs[j][i].star();// starをつけることで次回以降引っかからないように
notice_slack(text[1],formatD);
}
}
}
}
// slackへの通知
var postUrl = 'web hook URL';
var username = 'twitterDM'; // 通知時に表示されるユーザー名
var icon = ':bird:'; // 通知時に表示されるアイコン
var message = 'test'; // 投稿メッセージ
function notice_slack(text,date) {
var jsonData =
{
"username" : username,
"icon_emoji": icon,
"attachments":[
{
"fallback":"fallback Test",
"pretext":"DMが届きました\n"+date,
"color":"#4169e1",
"fields":[
{
"value":text
}
]
}
]
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
결론
무료로 동등한 것을 만들 수 있었다. GAS는 역시 강하다.
텍스트 형식에서도 제대로 볼 수 있는 메일 내용이라고 더욱 고맙다.
Reference
이 문제에 관하여(slack에게 TwitterDM이 왔음을 알리는 도구를 무료로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mozzz1100/items/62b8b0de25ba39a4d9c3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function fetchContactMail() {
/* Gmailから特定条件のスレッドを検索しメールを取り出す */
var strTerms = 'label:twitterdm';
var myThreads = GmailApp.search(strTerms, 0, 10); //条件にマッチしたスレッドを取得
var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納 var valMsgs = [];
var br = /[\r\n]+/g; //改行
var rep = ""; //置換文字列
/* 各メールから日時、送信元、件名、内容を取り出す*/
for(var j =0;j<myMsgs.length;j++){
for(var i =0;i<myMsgs[j].length;i++){
if(!myMsgs[j][i].isStarred()){
valMsgs[i] = myMsgs[j][i].getBody().replace(br,""); //html形式の取得と空白削除
var myRegexp = /<td class=\"preheader\" style=\"padding:0;margin:0;line-height:1px;font-size:1px;font-size:1px;color:#ffffff;\">([\s\S]*?)<d><\/d><\/td>/;
//↑tdタグで囲われた場所を抽出するための正規表現。gmailだとstyleで書かれるため大変汚い。
var text = valMsgs[i].match(myRegexp);// matchを用いると0に素のテキスト1に抽出したテキストが入る
var date = myMsgs[j][i].getDate();
var formatD = Utilities.formatDate(date, "Asia/Tokyo", "yyyy-MM-dd HH:mm"); //見やすいようにフォーマットをかける
myMsgs[j][i].star();// starをつけることで次回以降引っかからないように
notice_slack(text[1],formatD);
}
}
}
}
// slackへの通知
var postUrl = 'web hook URL';
var username = 'twitterDM'; // 通知時に表示されるユーザー名
var icon = ':bird:'; // 通知時に表示されるアイコン
var message = 'test'; // 投稿メッセージ
function notice_slack(text,date) {
var jsonData =
{
"username" : username,
"icon_emoji": icon,
"attachments":[
{
"fallback":"fallback Test",
"pretext":"DMが届きました\n"+date,
"color":"#4169e1",
"fields":[
{
"value":text
}
]
}
]
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
무료로 동등한 것을 만들 수 있었다. GAS는 역시 강하다.
텍스트 형식에서도 제대로 볼 수 있는 메일 내용이라고 더욱 고맙다.
Reference
이 문제에 관하여(slack에게 TwitterDM이 왔음을 알리는 도구를 무료로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mozzz1100/items/62b8b0de25ba39a4d9c3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)