はじめに
iOSエンジニアの@Nao_RandDです
この記事ではとあるサイトのレビューをSlackに通知することを実現するために、色々と回り道して実装した内容を紹介しようと思います🙋♀️
エンジニアでない方も雰囲気がわかるように作成したため、具体的なGCPの設定やPythonコードは記事にはありません 🙇♀️
関連
- Zapier
- Google Cloud Platform(GCP)
- Cloud Functions
- Cloud Scheduler
- Python
- BeautifulSoup4
- Selenium
GCPの設定やPythonのスクレイピング実装でも色々書きたいことがありましたが、本記事では詳細な内容にはふれずにどういったことを試したかに集中して書いていきます
きっかけ
ある休日に大学からの友人(小規模なホステルを経営している)と一緒にご飯食べていて
友人
「従業員にレビュー評価を意識してもらいたくて、
新規レビューがあったらスクショしてSlackに投稿してるー」
私
(小規模なホステルでは、ホテル予約サイトの評価はとても大切なんだなー。。)
友人
「お試しでやってることだけど割と面倒なのよねー」
私
「そのくらいなら自動化できるよー、サクッとー、多分...」
(Zapierだけでいけそう、、)
よし!やっていこうっ!
要件
つまり、次のような要件を満たすように、赤枠の部分を実装することになります
実現までの旅路
色々と回り道した軌跡をここから書いていきます
案①: Zapierだけでやる(コードなし)
話を聞きながら想定していた方法から試していきます
Zapierを用いてノーコードで実現することを目指します
先ほどの図に当てはめると次のようになります
Zapierでデータの整形・複数のステップは無料ではできません
https://zapier.com/pricing
友人に交渉していきます
私
「Zapierの有料会員なってもらっていい?
今後どこかの自動化とかにも使えるよ、多分...」
友人
「そのくらい全然いいよ!、ありがとう〜」
しかし、この案は失敗に終わります
図に想定していた、Zapierのトリガー想定のGmail通知ができなかったのです
案②: Zapier + スクレイピングでやる
友人にZapierの有料アカウントに切り替えてもらい、料金が発生している以上後には引けません!
次はコードも少し書いてやります。
コードはPythonのBeautifulSoap4とSeleniumを用いてスクレイピングします
https://pypi.org/project/beautifulsoup4/
スクレイピングしていいか確認(ざっくり)
スクレイピングをするので一様対象サイトが問題ないかを確認しておきます
問題になる場合
- サーバーに負荷をかけてしまった場合
- (刑法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に通知してもらいます
Slack Appを通知したいワークスペースに追加👏
無事にSlackにレビューを通知することができました🎉
まとめ
💪 Motto
- 下調べが甘くZapierひと月分の料金が完全に無駄な出費に
- それぞれのレビューサイトでGmail通知ができない
- ZapierはPythonの標準ライブラリしか実行できない
- 初めの発想からZapierに囚われたこと
👍 Good
- GCPのトライアルが3ヶ月あったため成果物のランニングコストは無料(ただの幸運)
- 友人が美味しいご飯をご馳走してくれた
- 今回のネタになった
Zennの記事でも紹介させていただきましたが、Qiitaにも投稿させて頂きました。