【GAS修行⑧】Qiita新着トレンド報告BOTをChatWorkでも作成


・GAS熟練者への道。
・先人達のコードの「写経&コピー」の駆使の成果物のまとめ。
・第八弾
第一弾第二弾第三弾第四弾第五弾第六弾第七弾はこちら。

経緯

・「八回目。」
・「LINEとSlackを主にやってきたが、この際今まで触ったことないツールと連携したいな。」
・「よし。新規作成ではなく、過去作使いまわしという、記事量産方式をとろう。」
→そういうわけで、今回は第五弾をベースに作っていく。
→取り組み開始。

概要

  • 一日二回、Qiitaの新着トレンド記事をChatWorkに通知してくれる。
    →LINE,Slack,ChatWorkともなれば、どこに行ってもトレンドの波に遭う。

結果

・実際の画面はこちらです。

作成環境

  1. Google App Script
  2. ChatWork API

手順

※Google Apps Scriptの設定は第五弾と一緒

Google Apps Scriptの設定

  • Googleドライブからスクリプトエディタを起動。
    ※Googleアカウントを持っていない人は、作成する。
    • Googleドライブを起動
    • 「新規」→ 「その他」→「アプリを追加」の順にクリック。
    • アプリ検索欄に「script」と入力して検索。
    • 検索結果に「Google Apps Script」が表示されるので、そこの「接続」ボタンをクリック
    • 改めて「新規」→ 「その他」の順にクリックしていくと、「Google Apps Script」が表示されているので、クリック。
  • 起動したプロジェクトに名前をつける
    ※プロジェクト名が反映されるわけではないが、自分がわかる名前をつける。
    →保存されたら一旦置いておく。

ChatWork APIの設定

※ChatWork未登録の人は、一人用を開設しよう。(何かと便利。)

  • ChatWork APIのトークンを発行。
    • チャットページ右上のプロフィールアイコンをクリック後、表示される「API設定」をクリック。
    • API Token設定ページで、「パスワード入力」欄に登録した時の、パスワード入力。
    • 表示されるAPI TOKENをメモしておく。

ライブラリ設定

  • スクリプトエディタに戻り、上部メニューの「リソース」から「ライブラリ」をクリック。
  • 「ライブラリを追加」欄に下記2つを追加する。
    • M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV・・・・「Parser」という解析ライブラリ
    • M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT・・・・「ChatWorkClient」というChatWork純正ライブラリ。
  • 追加後、「バージョン」を最新にして、「デベロッパーモード」をONにして、保存する。


コード

  • スクリプトエディタ内のコードに、下記を記述する。
chatwork-qiita-new.gs
// QiitaのURL
var QIITA_BASE_URL = 'https://qiita.com'
var QIITA_TRENDS_URL = 'https://qiita.com/trend'
var CHATWORK_API = 'ChatWork APIを書く。'
// 例:rid123456
// var ROOM_ID = '123456'
var ROOM_ID = '通知したいチャンネルIDを書く。'

// トレンド通知(新着記事のみ)
function qiitaNew() {
  var today = new Date();
  var todayShaping = Utilities.formatDate(today,"JST","yyyy/MM/dd") + "のQiita新着トレンド"
  var message = []
  var html = UrlFetchApp.fetch(QIITA_TRENDS_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&quot;:(.+?),/)[1]
    // 新着記事のみ対象
    if (isNewArrival == 'false') {
      continue
    }
    var name = "\n" + items[i].match(/title&quot;:&quot;(.+?)&quot;,/)[1] + "\n"
    var uuid = items[i].match(/uuid&quot;:&quot;(.+?)&quot;,/)[1]
    var urlName = items[i].match(/urlName&quot;:&quot;(.+?)&quot;/)[1]
    var link = QIITA_BASE_URL + '/' + urlName + '/items/' + uuid + "\n"
    /* メッセージ */
    message.push(name,link)
  }
  // メッセージ整形(カンマ削除のため。)
  var chatWorkMessage = message.join("");
  sendChatWork(todayShaping,chatWorkMessage);
}
function sendChatWork(todayShaping,chatWorkMessage) {
  var client = ChatWorkClient.factory({token: CHATWORK_API});
  client.sendMessage({room_id: ROOM_ID, body: "[info][title]" + todayShaping + "[/title]" +chatWorkMessage + "[/info]"});
}

※以下の項目を自分のものに変えるのを忘れない。
   ・ChatWork APIのアクセストークン(先程メモしたもの。)

   ・通知したいチャンネルID(チャンネルURLのrid123456の数字部分)

  • 自分のコードに書き換えて保存後、「qiitaNew」関数を実行して、通知確認。
    • スクリプトエディタ内の上部メニューの「関数名」の部分を「qiitaNew」に変更して、二つ左の「▶」ボタンで実行。
  • 通知確認後、指定の時間にコードを実行してもらうために、トリガーを設定。
    ※記事更新のタイミングは、5時/17時の二回

    • スクリプトエディタのタブメニューの「編集」→ 「現在のプロジェクトのトリガー」をクリック。
    • トリガーを作成して、下記の画像のように設定。
    • 保存。
  • 完了。

まとめ

・やはり、一度参考(マルコピ)で作ったものは、幅広く応用できると実感。
・3つに連携してしまうと、どこにいってもトレンドの波に逃げられなくなるが興奮するという超常現象。
・これを見てくださるエンジニアの皆様、「俺の連携術を聞いても、まだ記事が書けますか。」「このツールおすすめだから使ってみて。」という意見等あれば、是非教えていただけると幸いです。

参考