子育て情報アプリを作れるように vol9 ~同じデータを何度も保存しない~
前回、クローラーで収集したデータを
データベースへ保存する所まで実装しました。
しかしながら、前回のプログラムだと
クローラーを実行する度に同じデータをデータベースに保存してしまいます。
そこで、今回は同じデータを保存しないように
重複チェックを行いたいと思います。
また、重複した場合はデータベースに保存されたデータを
書き換えます。
今回の目標
- 重複をチェックする
1. 重複をチェックする
重複チェックに何のデータを使うか
収集した全てのデータにURLを持っているので
URLにしようと思います。
もしURLが途中で変わる事があったら
その時は諦めます笑
もしかしたら動画のタイトルでチェックする方がいいのかな・・・?
いつチェックするか
重複のチェックはデータベースに保存されているURLと比較を行うので、
データベースの更新処理が実装されている直前に行います。
なので、
movie-crawler
cook-crawler
qa-crawler
のsave_dataメソッドの中に書いていきます。
実際に作る
やる事は単純。
- データベースに同じURLがあったらUPDATE
- データベースに同じURLがなかったらINSERT文
それぞれ別のSQL文として実行します。それだけです。
修正箇所は
- movie-crawler.rb
- cook-crawler.rb
- qa-crawler.rb
の3つで、
それぞれのsave_data_baseメソッド内の処理を修正します。
内容が同じなのでmovie-crawler.rbだけ掲載します。
修正前
修正後
ソースコード内にあるresult.cmdtuples
は
更新したレコード数がセットされていますのでログとして件数を出力しています。
特に難しいところはなかったですが、
最初は、UPDATE文とINSERT文を一回で実行しようとしていました。
しかし、複数のSQL文(複文というらしい?)を一気に実行することは
できないっぽい事がネットに書かれていたのでやめました。
(実際にエラーが発生しました。)
まぁ特に分けても現状問題ないのでこれでいきます。
今回は短めですが、
少し改良されたので良しとします。
では、今回はこの辺で。