FileMakerProを使って、Web掲示板やWordPress のように常に一定のフォーマットで表示されるWebページのソースを自動で取り込むためのスクリプトを書いている途中でトラブルに遭遇しています。
FileMakerPro の場合、バージョン 8.5 以降、Webビューアー機能が組み込まれ、FileMakerの中で、Webページを表示でき、さらにそのHTMLソースをしていしたフィールドにコピーできるようになりました。
つまり、
- 一つのフィールドで表示させたいURLを指定し
- WebビューアーでHTMLページを表示させ
- そのHTMLソースをテキストデータとしてフィールドに取り込むことが出来る
ということです。スクリプトを使って上記3の後に1に戻るようにすれば、自動でWebページの巡回を行うことができます。以前、この機能を利用して、Webサイトが更新されたら、電子メールで通知するツールを作りましたが、今回は本文検索機能が付いていない無料のMixi日記やコミュニティー・トピックの本文を検索できるようにしたいと考えているところです。この手のWebページクローラーを過去にも何回か書きました。
(Mixiの日記をWordPressに転送できるようにするツールに関してはこちらのページをご覧ください。)
プログラムロジックは簡単で、Mixi日記ページを開き、日記本文とリンク情報を取り込みます。取り込んだ後、HTMLに含まれている次の日記のリンクをたどって行き、データベースに取り込むことを繰り返すだけです。日記1ページ分を処理する演算を書けば、あとはFileMakerProにループさせるだけで終わるはずでした!
約半日掛けて1ページ分を処理するスクリプトを書き、何ページあるのかわからない自分のMixi日記を取り込み始めたところ、30ページ分取り込んだところで、スクリプトが動かなくなってしまいます。フリーズしているわけではなく、操作は可能なのですが、処理終了と判断すべきところをなぜかデータを取り込んでいないと判断するようで無限ループに陥ります。最初は通信エラーを疑い、FileMakerProを再起動して続きから走らせてみたものの、やはり32件目あたりで停止してしまうようです。
- OSは、WindowsXP
- FileMakerProは FileMakerPro Advanced の8.5
(本番は12を使う予定ですが、データベース設計時は8.5で書く方が操作が軽いため早く作れます。)
ファイルをMacに転送して、同じスクリプトを実行させたところ、今度は20件くらいで動かなくなりました。FileMakerPro Advancedのバージョンを代えて試してみても、件数に差があるものの10件~30件くらいで全て動かなくなってしまいます。
WindowsXPのタスクマネージャでメモリー利用量を観察してみたところ、スクリプトが動き始めてから急激に占有メモリーが増加して行き、30件くらいを取り込んだところで、+1GBくらいになり停止します。どうも、スクリプトを処理するためのメモリーを食い尽くすようです。取り込みに成功したデータをみてみると、Webビューアーのデータをそのまま保持しているようでこれが原因かもしれません。
試しに、Webビューアーのサイズを1000×800くらいで使っていたところを640×240くらいに縮めてみたところ、若干止まるまでのページ数が増加したようですが、結局無限ループに陥り止まってしまいます。
昔作ったページは全然問題なかったのだけどな~ と考えましたけど、ループのさせ方は書き方を変えているので、そのせいかも、、、、と一応Web検索をしてみたところ、やはり同じ症状を経験した人がいるようで、処理後Webビューアーをクリアーしておくとよさそうだとわかりました。
- 日記用URLを指定
- loop
- HTMLを取り込む
- ウェイト(HTMLファイルを本当に取り込めているか確認)
- 取り込めていたら exit loop
- endloop
- 次ページのURL情報をHTMLから取り出す
- ブランクページ(about:blank)を表示
実際のスクリプトとは異なりますが、次のページのフェッチを行う前にブランクページをWebビューアーで表示させることにしました。これでメモリー消費が減ってくれればいいと思いながら試したところ、400ページくらいは無事に連続ループしました。それ以上はページがなかったので試せませんでしたが、WindowsXP上ではこれでなんとかなるようです。
残念ながらMacではこの方法ではうまくいきませんでしたので、更に修正が必要なようです。