概要
毎日5:00と17:00の2回、Qiitaのトレンド(新着のみ)をSlackに投稿するbotを作成します。
はじめに
私は毎日Qiitaのトレンドをチェックし、興味のある記事があったら読んでいます。
ただ、人気のある記事はしばらくトレンドに残り続けるので、毎日チェックしていると読んだことのある記事ばかりになります。
更新時間と更新頻度、新着マーク(つい最近までなかった気がします)がご丁寧に記載されているので、これは Qiitaが新着トレンド投稿botを作りやすくしてくれている と直感しました
以上の理由より、トレンドの新着のみをSlackに投稿するbotを作成したので、その手順を紹介します。
本記事で説明しないこと
以下について説明すると長くなるため、本記事では説明しません。
- GAS(Google Apps Script)
- Slack Incoming Webhooks
実装
前回と同様にGASで実装します。
Qiita固有の処理
https://qiita.com/trend
のソースを見ながら、前回実装したコードを参考に実装します。
例によってゴリゴリにスクレイピングしています。
QIITA_INCOMING_URL
には自分のSlack Incoming Webhooksを代入してください。
// ----------------------------------------------------------------------------
// Post Qiita New Trends
//
// QiitaのトレンドをSlackに通知する(新着のみ)
// 参考:https://qiita.com/trend
// ----------------------------------------------------------------------------
var QIITA_INCOMING_URL = 'https://hooks.slack.com/services/…'
var QIITA_BASE_URL = 'https://qiita.com'
var QIITA_TRENDS_URL = 'https://qiita.com/trend'
var QIITA_COLOR = '#5ac300'
function postQiitaNewTrends() {
var attachments = makeQiitaAttachments(QIITA_TRENDS_URL, true)
var text = 'Qiitaのトレンドです。\nnew:' + attachments.length + '件'
postSlack(QIITA_INCOMING_URL, 'qiita', 'Qiitaトレンド新着通知bot', ':qiita:', text, attachments)
}
function makeQiitaAttachments(url, isOnlyNewArrival) {
var attachments = []
var html = UrlFetchApp.fetch(url).getContentText()
var items = Parser.data(html).from('{"followingLikers').to('}}}').iterate()
for (var i = 0; i < items.length; i++) {
var isNewArrival = items[i].match(/isNewArrival":(.+?),/)[1]
if (isOnlyNewArrival && isNewArrival == 'false') {
continue
}
var createdAt = items[i].match(/createdAt":"(.+?)",/)[1]
var likesCount = items[i].match(/likesCount":(.+?),/)[1]
var title = items[i].match(/title":"(.+?)",/)[1]
var uuid = items[i].match(/uuid":"(.+?)",/)[1]
var profileImageUrl = items[i].match(/profileImageUrl":"(.+?)",/)[1]
var urlName = items[i].match(/urlName":"(.+?)"/)[1]
var link = QIITA_BASE_URL + '/' + urlName + '/items/' + uuid
attachments.push(makeQiitaAttachment(isNewArrival, createdAt, likesCount, title, profileImageUrl, urlName, link, i))
}
return attachments
}
function makeQiitaAttachment(isNewArrival, createdAt, likesCount, title, profileImageUrl, urlName, link, i) {
return makeAttachment(QIITA_COLOR,
'No.' + (i + 1),
title,
link,
profileImageUrl,
makeQiitaFields(isNewArrival, createdAt, likesCount, urlName))
}
function makeQiitaFields(isNewArrival, createdAt, likesCount, urlName) {
return [makeField('投稿者', urlName, true),
makeField('投稿日', createdAt, true),
makeField('いいね', likesCount, true),
makeField('new', isNewArrival, true)]
}
postQiitaNewTrends()
メソッドを実行することでQiitaのトレンドがSlackに投稿されます。
makeQiitaAttachments()
メソッドの第2引数を false
にすることで、新着以外のトレンドも全て投稿されるようにできます。
Slack通知処理
Slackへの投稿処理は前回実装したコードをそのまま流用したので省略します。
やはりメソッドを細かく分割すると便利です。
トリガーの設定
「毎日5/17時に更新」と記載されているので、その時間にスクリプトが実行されるようにトリガーを設定します。
おわりに
これで新着を見逃さずにQiitaから技術動向を把握することができます
いつか私が投稿した記事もこのbotで通知される日が来るといいなぁ…