Qiita의 새로운 트렌드를 놓치고 싶지 않으므로 Slack에 기록했습니다.
그렇다고 보는 것을 소홀히해서는 안됩니다.
이용한 기술, 툴 등
기본 흐름
슬랙
GAS로부터 메시지를 받기 위해 새로 설정을 추가 웹 훅스에 추가하십시오.
Incoming Webhooks를 아직 Slack에 도입하지 않은 분은 여기에서
게시 시점이면 "Incoming"에서 맨 위에 표시됩니다.
추가하면 ↓과 같이 표시되므로 "설정 추가"에서 실제로 설정을합니다.
「설정 추가」를 누르면, 투고처의 채널을 설정하는 화면이 나오므로, 적당한 채널명을 설정해 인테그레이션을 추가합니다
이 때 Webhook URL이 생성되지만 GAS에서 사용하므로 어딘가에 복사하십시오.
슬랙 설정은 이상입니다.
GAS
GAS 파일을 만들고 다음 소스를 복사합니다.
function doPost() {
// Qiitaのトップページから取得
var url = 'https://qiita.com/';
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
// getTextでSlackに表示する文章を作成
postSlack(getText(html));
}
// SlackのTextに設定する文字列を作成
function getText(html) {
var text = '現在の新着トレンド記事\n';
// 新着タグが付くときの条件
var searchHtml = 'isNewArrival":true';
var firstIndex = html.indexOf(searchHtml);
var secondIndex = html.indexOf(searchHtml, firstIndex + 1)
while(firstIndex != html.length) {
// 新着タグから次の新着タグまでをごっそり抽出
var str = html.substring(firstIndex, secondIndex);
var itemUrl = getItemUrl(str);
var itemName = getItemName(str);
// Slackのtext部分を加工
// <url|表示名>で,表示名にリンクを付与することができます
text = text + '・<' + itemUrl + '|' + itemName + '>\n';
// 新着タグのインデックスを更新
var firstIndex = secondIndex;
var secondIndex = html.indexOf(searchHtml, firstIndex + 1);
// 一番最後の新着タグでマイナス(検索できなかった)は困るので,htmlの長さまでとする
if (secondIndex == -1) {
secondIndex = html.length;
}
}
return text;
}
// ここから下のgetメソッド群は,"でセパレートして,該当のインデックスを取得してます
function getUserId(str) {
var searchHtml = '"';
var strs = str.split(searchHtml);
return strs[28];
}
function getItemId(str) {
var searchHtml = '"';
var strs = str.split(searchHtml);
return strs[18];
}
function getItemName(str) {
var searchHtml = '"';
var strs = str.split(searchHtml);
return strs[14];
}
function getItemUrl(str) {
return 'https://qiita.com/' + getUserId(str) + '/items/' + getItemId(str);
}
function postSlack(text) {
var url = 'インテグレーションを追加したときに生成されたWebhook URL';
var username = 'Slackに投稿するときのユーザー名';
var jsonData = {
"username": username,
"text": text
};
var payload = JSON.stringify(jsonData);
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(url, options);
}
doPost
메서드를 이동하면 Slack의 Incoming Webhooks에서 설정한 채널에 게시됩니다.
GAS 정기 실행
이대로는 doPost
는 의도적으로 움직이지 않으면 Slack에 게시되지 않으므로 정기 실행하도록 설정합니다.
Qiita의 갱신 시각은 대략 5:00과 17:00이므로, 여유를 보고 6:00과 18:00에 투고하도록 설정합니다
GAS 편집 화면에 ↓와 같은 시계 아이콘이 있지만 여기에서 정기 실행 설정을 할 수 있습니다.
클릭하여 열면 "트리거 만들기"라는 버튼이 있으므로 거기에서 트리거를 추가합니다.
설정하는 부분은 ↓의 노란색 선을 그린 곳입니다.
↓와 같이 설정을 변경합니다.
GAS 파일을 만들고 다음 소스를 복사합니다.
function doPost() {
// Qiitaのトップページから取得
var url = 'https://qiita.com/';
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
// getTextでSlackに表示する文章を作成
postSlack(getText(html));
}
// SlackのTextに設定する文字列を作成
function getText(html) {
var text = '現在の新着トレンド記事\n';
// 新着タグが付くときの条件
var searchHtml = 'isNewArrival":true';
var firstIndex = html.indexOf(searchHtml);
var secondIndex = html.indexOf(searchHtml, firstIndex + 1)
while(firstIndex != html.length) {
// 新着タグから次の新着タグまでをごっそり抽出
var str = html.substring(firstIndex, secondIndex);
var itemUrl = getItemUrl(str);
var itemName = getItemName(str);
// Slackのtext部分を加工
// <url|表示名>で,表示名にリンクを付与することができます
text = text + '・<' + itemUrl + '|' + itemName + '>\n';
// 新着タグのインデックスを更新
var firstIndex = secondIndex;
var secondIndex = html.indexOf(searchHtml, firstIndex + 1);
// 一番最後の新着タグでマイナス(検索できなかった)は困るので,htmlの長さまでとする
if (secondIndex == -1) {
secondIndex = html.length;
}
}
return text;
}
// ここから下のgetメソッド群は,"でセパレートして,該当のインデックスを取得してます
function getUserId(str) {
var searchHtml = '"';
var strs = str.split(searchHtml);
return strs[28];
}
function getItemId(str) {
var searchHtml = '"';
var strs = str.split(searchHtml);
return strs[18];
}
function getItemName(str) {
var searchHtml = '"';
var strs = str.split(searchHtml);
return strs[14];
}
function getItemUrl(str) {
return 'https://qiita.com/' + getUserId(str) + '/items/' + getItemId(str);
}
function postSlack(text) {
var url = 'インテグレーションを追加したときに生成されたWebhook URL';
var username = 'Slackに投稿するときのユーザー名';
var jsonData = {
"username": username,
"text": text
};
var payload = JSON.stringify(jsonData);
var options = {
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(url, options);
}
doPost
메서드를 이동하면 Slack의 Incoming Webhooks에서 설정한 채널에 게시됩니다.GAS 정기 실행
이대로는 doPost
는 의도적으로 움직이지 않으면 Slack에 게시되지 않으므로 정기 실행하도록 설정합니다.
Qiita의 갱신 시각은 대략 5:00과 17:00이므로, 여유를 보고 6:00과 18:00에 투고하도록 설정합니다
GAS 편집 화면에 ↓와 같은 시계 아이콘이 있지만 여기에서 정기 실행 설정을 할 수 있습니다.
클릭하여 열면 "트리거 만들기"라는 버튼이 있으므로 거기에서 트리거를 추가합니다.
설정하는 부분은 ↓의 노란색 선을 그린 곳입니다.
↓와 같이 설정을 변경합니다.
doPost
메서드 이름을 변경 한 경우) 실행할 함수를 선택하고 변경 한 후 메서드 이름으로 변경 투고 일시로는, 아직 이 동작 확인은 하고 있지 않습니다만, 어쩌면 움직입니다(움직이고 문제 없으면, 여기는 바꿔 둡니다)
끝에
그렇다고 보는 것을 소홀히해서는 안됩니다.
참고 사이트
Formatting messages | Slack
Reference
이 문제에 관하여(Qiita의 새로운 트렌드를 놓치고 싶지 않으므로 Slack에 기록했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/LunaChevalier/items/80a0050b798efc4ae40b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Qiita의 새로운 트렌드를 놓치고 싶지 않으므로 Slack에 기록했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/LunaChevalier/items/80a0050b798efc4ae40b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)