LoginSignup
0
0

More than 3 years have passed since last update.

Microsoft Flowを使ってAmazonの商品価格をプッシュ通知する

Posted at

はじめに

毎日、Amazonにアクセスして狙っている商品の価格をチェックするのが面倒になってきたので、Microsoft Flowを使って希望価格より下になったらプッシュ通知するようにフローを組んでみた
(価格.comに掲載されている商品はそっちのアプリで通知を受ける方が楽)

概要

6時間ごとに予め指定した商品情報ページを取得し、価格が指定した数値未満のときプッシュ通知をする

処理の流れ

HTTP GETをJSON形式で受ける仕様で文字列分割を駆使し価格の文字列を取得しているため美しいフローではないが、初めて使ったし、まあ仕方ない。
flow.png

  • Recurrence
    フロー実行のインターバルを指定できる。これを指定せずにフローを組み立てるとデフォルトでは15分単位に実行され、トラフィック的によろしくないので6時間単位とした。

  • URLを変数にする
    ここは商品ページのURLを変数として初期化しているだけ。無くても問題ない。

  • HTTP
    HTTPリクエスト(GET/PUT/POSTなど)とURIを指定する。
    今回は商品ページのHTMLがほしいのでリクエストはGETを指定。
    すると、JSON形式でStarusCode,Header,Bodyが返ってくる。

  • 価格の近くで分割(split)
    こんな感じで大量の文字列(wcで180万文字位だった)が返ってくるのでbodyに含まれている文字列をぶった切って価格を抽出する。

{"statusCode":200,
"headers":{"Strict-Transport-Security":"max-age=47474747; includeSubDomains; preload","Vary":"Accept-Encoding,User-Agent,X-Amzn-CDN-Cache,X-Amzn-AX-Treatment","X-UA-Compatible":"IE=edge","X-XSS-Protection":"1;","X-Content-Type-Options":"nosniff","X-Frame-Options":"SAMEORIGIN","x-amz-rid":"ZSG244H5XDVQ8BR1F0DP","Transfer-Encoding":"chunked","Connection":"keep-alive,Transfer-Encoding","Cache-Control":"no-transform, no-cache","Date":"Sat, 09 Nov 2019 15:08:52 GMT","P3P":"policyref=\"https://www.amazon.com/w3c/p3p.xml\",CP=\"CAO DSP LAW CUR ADM IVAo IVDo CONo OTPo OUR DELi PUBi OTRi BUS PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA HEA PRE LOC GOV OTC \"","Set-Cookie":"session-id=134-2513056-3719950; Domain=.amazon.com; Expires=Tue, 01-Jan-2036 08:00:01 GMT; Path=/,session-id-time=2082787201l; Domain=.amazon.com; Expires=Tue, 01-Jan-2036 08:00:01 GMT; Path=/,i18n-prefs=USD; Domain=.amazon.com; Expires=Tue, 01-Jan-2036 08:00:01 GMT; Path=/,sp-cdn=\"L5Z9:JP\"; Version=1; Domain=.amazon.com; Max-Age=509475069; Expires=Tue, 01-Jan-2036 08:00:01 GMT; Path=/; Secure; HttpOnly","Server":"Server","Content-Type":"text/html; charset=UTF-8","Content-Length":"1733807"},
"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n\n\n\n\n\n\n\n    \n\n    \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n\n\n\n\n\n    <!doctype html><html class=\"a-no-js\" data-19ax5a9jf=\"dingo\">\n    <head>\n<script type=\"text/javascript\">"}
  • 価格の入った要素を取得(first)
    分割したアレイから価格情報が含まれる要素を取得して次ステップへのinputとする。下図の例では0番目の要素に価格(599.99)が入っているので、こいつをチョイス。
    array.png

  • 価格の後ろの文字を分割
    半角スペースでまたsplit

  • 価格の入った要素を取得2
    また0番目の要素に価格が入るので、これをチョイス。

  • ダブルクォーテーションを除去(replace)
    後続で数値変換するのにダブルクォーテーションが邪魔なので消す。

  • 価格を浮動小数点に変換(float)
    後続で大小比較をするために変換。

  • 条件
    取得した価格が設定値未満のとき、Flowのスマホアプリにプッシュ通知する設定とした。他にもE-Mailで通知したりもできる。
    if.png

もっとスマートなやり方があれば、教えて下さい。

0
0
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
0
0