12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

あなたのアマゾンアカウントをbot化するAmazonBotify

Last updated at Posted at 2017-09-18

はじめに

アマゾンで頻繁に注文するものを毎回サイトにアクセスして注文するのがめんどくさいということはよくあることかと思います。
そこで今回はタイトルの通りボットとしてamazonを使えるsinatraアプリを作成しました。
(余談ですが先日AmazonがSlackを買収するかもしれないというニュースが話題になりましたが、それが実現すればこんなものをamazon自体が提供しそうですね笑)

システム構成

system.png

システム構成は上記のようになっています。

メッセンジャーから注文コマンドを送ると

  1. slackからoutgoing web hook で出したリクエストをローカルのmacに立てたsinatraがngrok経由で受け取る。
  2. sinatraはseleniumを使って注文操作を実行する。
  3. 完了したらスクショを撮る
  4. スクショと共に注文が完了した通知をslackに返す

の流れで注文を処理します。

作っている時に起きた問題は以下の2つで

  • EC2 + Headlessブラウザを使っていたらrecaptchaで弾かれた → ローカルPCで対応(なのでこれを使うためにはサーバー用のPCを1台用意しないといけません...)
  • ローカルのPCをサーバーとしてどうやって安全かつ簡単に外部公開できるかわからない → ngrokが使えた

の形でそれぞれ対応しました。

あとはslackのoutgoing web hookと注文のエンドポイントを繋いで、実際注文するとうまく注文できました!!
order.png

完成形

その他いくつかコマンドを足して、完成形がこちらです。

  • 使い方
az_hiwto.png
  • 商品登録
az_add.png
  • 商品登録解除
az_delete.png
  • 登録商品一覧
az_list.png
  • 商品注文
az_order.png
  • 注文履歴参照
az_his.png

結構いい感じに出来ましたね!!

またslack以外のメッセンジャーを使いたい場合はBotBaseを継承したクラスに#send_messageメソッドを実装すれば簡単にカスタムのbotクライアントを追加できます。

module Bot
  class CustomBot < BotBase
    # required
    def send_message(message)
      some_messanger_client.send_message(message)
    end
  end
end

もし自分でも使ってみたいという方がいればソースとセットアップの方法はこちらのGitのレポジトリにあるので使ってみてください :thumbsup: (プルリクもお待ちしていますmm)

さて、ここまで読んでこれ別にamazonで注文するのがめんどくさいのがslackに投げるのめんどくさいに変わっただけじゃないか?と思った方が多いかと思います。
そうです。あくまでもこれは副産物で本当に今回作りたかったのはこちらです!!

12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?