GAS で公開中/予定の映画情報をスクレイピングして Slack へ定期的にポストする
プライベート用スマホにしている Android のパフォーマンスがどんどん劣化しており、結果 Line があまり使いこなせず、家庭内(=個人向け) Slack を導入したいと思いはじめいろいろ調べている。
そうするうちに Twitter Bot の Cron Job としてのみ使っていた(放置していた) Google App Script 環境との相性が良さそうとだなとわかり、何か自分向けサービスめいたものを画策している。
服でも道具でもなんでも、カスタムできるという点が愛着につながると思う。
まずは簡単な定期実行ものを作ってみた。
参考たち
主にこちらを活用させていただいた。
スプレッドシートで管理しているKPIをSlackに自動投稿するGoogle Apps Scriptを作ってみた
市井に根付く Slack
家族間の連絡手段をLINEからSlackにしてみた話(追記あり)
パンチの効いた…
Slackがカップル専用アプリだった件
尊敬
割と本気で家庭用Slack Botを作ってみた
成果物イメージ
Slack 内のあるチャネルに対して、時間を決めて映画タイトル+詳細URLを流し込むことができた。
*コンマは消せなかった・・・orz
以下やったことを羅列していきます。
GAS サンプル
1 | var slack = { |
GAS 作成の前提条件
元となる Google Spreadsheet を作成し、次に解説している「スプレッドシートサンプル」のような情報を記載しておく。
次に、ツール > スクリプトエディタ
から GAS 作成画面へ。
スプレッドシートの解説
使った関数はIMPORTXML
とCONCATENATE
の2つ。
タイトル
=IMPORTXML(https://filmarks.com/movies/showing/now, "//*[@class='c-movie-item']/h3/a")
注意
・実際にはキャプチャの通り URL および XPATH は別セルに入れておいて、関数の中身は (B2, D2)
といったシンプル設計
・セミコロンとコロンが重複しないよう注意
映画詳細リンク
=CONCATENATE("https://filmarks.com", IMPORTXML(https://filmarks.com/movies/showing/now, "//*[@class='c-movie-item']/h3/a/@href")
)`
__注意 __
・「タイトル」同様関数の中身は直打ちしていない。
・一旦 F 列に相対リンク (/movies/62215)などを生成し、その後CONCATENATE
関数で合体させている
Slack Token 情報取得
事前に Your app を作成しておく必要あり。
https://api.slack.com/apps
新し目の記事でないと、Slack 側の GUI が変わっており戸惑った。
Slack APIのTokenの取得・場所
Features > OAuth & Permissions
というタブで何を許可したら最小限か正直わからなかったが、Post するという目的からしてOTHER > Post to specific channels in Slack. > incoming-webhook
かなと思ってそれ以外は追加していない。
Features Incoming Webhooks
でも Activate してある。
Redirect URL
も空欄のままでよかった。
Slack チャネル情報取得
プライベートのチャネル
https://api.slack.com/methods/groups.list/test
パブリックのチャネル
https://api.slack.com/methods/channels.list/test
"id": "HOGEHOGE",
という情報だけが必要。
仕上げ
トリガーの設定(GAS における Cron 的なもの)を作成。
N時間おきだったり、ある週のある時間だったり(ただし1時間おきに設定しても2~30分のずれは当たり前)。