🤖

とあるレビューのSlack通知機能を周り道してやった話

2023/12/17に公開

はじめに

ヤプリ Advent Calendar 2023の17日目の記事を担当します!iOSエンジニアの@Nao_RandDです

https://adventar.org/calendars/8946

この記事ではとあるサイトのレビューをSlackに通知することを実現するために、色々と回り道して実装した内容を紹介しようと思います🙋‍♀️

関連

  • Zapier
  • Google Cloud Platform(GCP)
    • Cloud Functions
    • Cloud Scheduler
  • Python
    • BeautifulSoup4
    • Selenium

きっかけ

ある休日に大学からの友人(小規模なホステルを経営している)と一緒にご飯食べていて

友人
「従業員にレビュー評価を意識してもらいたくて、
新規レビューがあったらスクショしてSlackに投稿してるー」


(小規模なホステルでは、ホテル予約サイトの評価はとても大切なんだなー。。)

友人
「お試しでやってることだけど割と面倒なのよねー」


「そのくらいなら自動化できるよー、サクッとー、多分...」
(Zapierだけでいけそう、、)

よし!やっていこうっ!

要件

つまり、次のような要件を満たすように、赤枠の部分を実装することになります


実装部の整理

実現までの旅路

色々と回り道した軌跡をここから書いていきます

案①: Zapierだけでやる(コードなし)

話を聞きながら想定していた方法から試していきます

Zapierを用いてノーコードで実現することを目指します
先ほどの図に当てはめると次のようになります


Zapier導入時の整理

Zapierでデータの整形・複数のステップは無料ではできません
https://zapier.com/pricing


Zapierのプランについて

友人に交渉していきます


「Zapierの有料会員なってもらっていい?
 今後どこかの自動化とかにも使えるよ、多分...」

友人
「そのくらい全然いいよ!、ありがとう〜」

しかし、この案は失敗に終わります


悲劇! トリガーができない

図に想定していた、Zapierのトリガー想定のGmail通知ができなかったのです

案②: Zapier + スクレイピングでやる

友人にZapierの有料アカウントに切り替えてもらい、料金が発生している以上後には引けません!

次はコードも少し書いてやります。

コードはPythonのBeautifulSoap4Seleniumを用いてスクレイピングします
https://pypi.org/project/beautifulsoup4/

https://www.selenium.dev/about/

スクレイピングしていいか確認(ざっくり)

スクレイピングをするので一様対象サイトが問題ないかを確認しておきます

問題になる場合

  • サーバーに負荷をかけてしまった場合
    • (刑法233条偽計業務妨害罪、同234条電子計算機損壊等業務妨害罪)
  • 個人情報を同意なく取得、公開、売買してしまった場合
    • (個人情報保護法違反)
  • WebスクレイピングするWebサイトの利用規約に違反する場合
  • 著作権を無視した利用、複製等を行ってしまった場合
    • (著作権法21条など)

「**WebスクレイピングするWebサイトの利用規約に違反する場合」**が怪しかったですが、スクレイピングするページは利用規約などの同意なく(ログインも不要で)閲覧できるページだから大丈夫そうです🤔

参考:https://pig-data.jp/blog_news/blog/scraping-crawling/scrapinglaw/

実装

その場合には以下の構成で進めることを目指します。

ローカルで動作確認して問題なさそうだったので、ZapierのCode by Zapierにコードをのせていきます
https://help.zapier.com/hc/en-us/articles/8496326417549-Use-Python-code-in-Zaps#h_01H9FNT4XP4YQFSFCYDMZXG73T
Zapier + スクレイピング時の整理

しかし、この案も失敗に終わります

Zapierで実行すると次のエラーが出ました

Error:
Traceback (most recent call last): File "", line 10, in the_function ModuleNotFoundError: No module named 'bs4'

Please suggest me a solution for this. Thanks in advance.

BeautifulSoap4がimportできていないということですね

では、入れればいいよねとおもっていたのですが、ZapierのPython実行環境では標準ライブラリしか使用できないようでした🫠
https://community.zapier.com/code-webhooks-52/can-t-import-urllib-request-and-bs4-beautifulsoup-into-zapier-8646

案③: Zapirゼロでやる

「もうZapierいいかな、、、」、になってきたので、結局次の構成でゴリっとやりました、、、

GCP Cloud Schedulerで毎朝9時にトリガーし、GCP Cloud FunctionsでPub/Subを設定してからSlack AppからSlackに通知してもらいます


Zapierなし+GCPでの実現時の整理

Slack Appを通知したいワークスペースに追加👏

無事にSlackにレビューを通知することができました🎉

まとめ

💪 Motto

  • 下調べが甘くZapierひと月分の料金が完全に無駄な出費に
    • それぞれのレビューサイトでGmail通知ができない
    • ZapierはPythonの標準ライブラリしか実行できない
  • 初めの発想からZapierに囚われたこと

👍 Good

  • GCPのトライアルが3ヶ月あったため成果物のランニングコストは無料(ただの幸運)
  • 友人が美味しいご飯をご馳走してくれた
  • 今回のネタになった

Discussion