2015年2月19日木曜日

Webサイトから情報を取得して、一部(価格など)をFileMaker Pro(ファイルメーカー)に取り込む(価格.com)

価格.comからある商品の最安価格を取得


ネットショップなどを運営されていたり、そうではなくてもただ、ネットショップの最安価格を頻繁に知りたいときってありますよね。

FileMaker Proを使って価格比較サイト「価格.com」から最安価格の情報を取得して、フィールドに表示してみる方法です。

最低限必要なフィールド

・価格を格納する
・URLを格納する
・HTMLソースを格納する

この3つのフィールドが必要となるでしょうか。

流れ

URLから挿入スクリプトステップで「ソース」フィールドにソースを挿入
ソースから最安価格の入っている部分の文字位置を取得(Position関数)
価格部分を抜き出す(Middle関数)


※基本的な手順はFileMaker Proでメールを受信してみるで扱ったのとあまり変わりありません。

どこに最安価格が書いてるか?


上の画像が商品のページで、このページから情報を取得します。人間が見ればすぐに最安価格が目に入ってきますが、ソース上でどれがそれにあたるかを見なければなりません。

トラブル?

URLから挿入で、ソースを取得すると日本語が文字化け・・・文字コードの関係なのでしょうか。

文字化けがなければ、ヘッダ部分に情報があるのでそれを取得できたのですが・・・

先頭文字位置

最安価格はソースのいろいろなところにありましたが、「kakakuItemviewPrice」という部分が分かりやすいので、この部分から取得できます。これの文字位置を取得し、さらにkakakuItemviewPriceの文字数分を足すと、純粋な数字で価格の先頭文字位置になります。

※実際には「kakakuItemviewPrice = '」が検索文字になります。

文字数を取得

文字数(価格の桁数)を調べるには先ほど調べた先頭文字位置をスタートとして次に「'」が出てくるところまでになります。
これは 「Position ( ソース ; "'" ; 先ほどの先頭文字位置 ; 1 )」で分かります。

計算式

Let([
 $start = Position ( ソース ; "var kakakuItemviewPrice = '" ; 1 ; 1 ) + 27;
 $end = Position ( ソース ; "'" ; $start ; 1 )
];

Middle ( ソース ; $start ; $end - $start )
)

これを価格のフィールドに設定すると最安価格を取得することができます。