FileMaker ProでWebページ上のデータテーブルをスクレイピング

世の中ではREST APIを提供するWebサービスが増えてきましたが、オンライン上のあらゆる情報がJSON形式で取得できるようになるのはもう少し先でしょう。
REST APIを持たないWebページから構造化されたデータを抽出するときに役に立つのがスクレイピングという手法です。いろんな言語でスクレイピング用のライブラリが提供されていますが、FileMakerもスクレイピング用ツールとしてはかなり便利だと思います。
今回はHomeBase SoftwareのDouglas Alderさんによるスクレイピングに関する入門記事を紹介します。


Scraping Tables – Pulling Data Tables from Web Pages into FileMaker Pro

(元記事はこちら)

Douglas Alder
2019/1/25

私の友人は何年もの間、古いバージョンのFileMakerを使って地元のスキー場のウェブサイトからゲレンデ整備状況のレポートを取得していました。そのスキー場は、以前は整備状況レポートを複数のPDFファイルとして公開していたので、彼女はそれらのファイルをダウンロードしてから、中身のテキストをコピー&ペーストしてFileMakerに取り込んでいました。テキストをデータベースに入れると、スクリプトが起動し、整備状況の情報を解析してレコードおよびフィールドに分割します。処理の最後に、彼女のスマホ(およびスマートウォッチ)での閲覧用に直近の整備日の要約のテキストファイルを生成します。この最近7日間の整備状況のデータは、スキー場に出たときにとても便利です。整備したばかりで縦縞が綺麗に残っているコースや、降雪後まだ誰も入っていないパウダースノーのコースを見つけるのに役に立ちます。

スキー場は、データをWebページにも公開しています。理想的には、このデータが自由に利用可能なJSONファイル形式でも公開されていれば、FileMakerで簡単に解析してレコードとして取り込めます。しかし残念ながら、データを簡単に共有するという点については、多くの組織はまだそこまで進んでいません。このような場合に、構文解析ルーチンが役に立ちます。

私の友人が最近FileMakerを17にアップグレードしたので、私は彼女に古い「コピー&ペースト」のルーチンをより現代的な方法に更新することを勧めました。その結果、ワンボタンでデータを取得できるようになり、しかもiPhone上のFileMaker Goから実行できるようになりました。基本的なスクリプト構造が他の多くの状況でも役に立つことを信じて、彼女の許可を得た上で、このルーチンを共有することにしました。

デモファイルをダウンロード

“Get Data”スクリプトを実行する
このスクリプトは、「URLから挿入」を使用してWebページ全体を取り込み、Webページ内のテーブルからデータを解析・抽出するため、実行に少し時間がかかります。データを最新の状態に保つために”Delete All”ボタンも画面に表示されています。場合によっては、ユーザーの誤操作を防ぐために、この機能はつけないほうがいいかもしれません。

注: このスクリプトを1日の終わり頃[訳注: 現地時間で]に実行すると、スキー場のゲレンデ全体が整備されて、すべてのコースは”Open”と表示されます。午前6時から午後4時の間にアクセスすると、Groomed(整備済)タグがいくつか表示されるはずです。

[OK]をクリックしてデータを取得
データの取得元のWebページを表示することもできます。

Webページ
このデモで扱うのは、スキー場の整備状況レポートです。基本的なルーチンはWeb上のあらゆる種類のデータテーブルに適応できます。データフォーマットにパターンがある限り、FileMakerの組み込み関数またはカスタム関数を使用して解析する方法を見つけることができます。

スクリプト”Get Data from URL”
このスクリプトの基本構成は以下のとおりです。

  • URLから挿入 – HTMLソース全体を取得する
  • テーブルデータを特定する – 対象を絞り込むことでそのあとの作業を単純化する
  • 変数$NumberOfInstancesを設定する – テーブルでパターンを探し、作成するレコード数を取得する
  • ループを開始
  • 新規レコードを作成
  • 1行を分解する – 処理対象のテキストの量を減らせば、解析がより簡単になります。
  • データを分解して、フィールド設定 – このルーチンを自身のソリューションに追加する場合は、ここを自分のユースケースに合わせてカスタマイズして、フィールドを編集します。
  • 変数$Countを1増やす
  • $Countが$NumberOfInstancesを超えたらループを終了

“ParseData”カスタム関数
FileMakerのテキスト機能も優秀ですが、テキストを解析するためにカスタム機能を使用する方が簡単な場合があります。今回は、ParseDataというカスタム関数を使用しています。

このカスタム関数を自分のソリューションにコピーする
FileMaker Pro Advanced 17以降を使用している場合は、Commandキー + C (Mac)またはControlキー + C (Windows)を使用してこのカスタム関数を自分のソリューションにコピーできます。

“ParseData”カスタム関数
重要なコンポーネントは以下のとおりです。

  • theText
  • theStartTag
  • theEndTag
  • theOccurance

Get Info
このデモファイルを見つけた元の場所を忘れてドキュメントに戻りたい場合に、右上の”i”ボタンをクリックしてください。このデモがあなた自身のWebテーブルパーサを構築するのに役立つことを願っています。Happy scraping!

Leave a Reply