子育て情報アプリを作れるように vol10 ~yamlを使ってみる~
今回はYamlファイルを使って
クローラーの検索キーワードを読み込めるようにします。
多分、ヤムルと呼びます。
Yamlについては
http://magazine.rubyist.net/?0009-YAML#l2
に詳しく書かれています。
今回の目標
1. Yamlを理解する
外部ファイルを読み込むのって大変そうに思ってたんですが、
すごく簡単です。
まずは
require 'yaml'
と書いて
config = YAML.load_file('ファイル名')
で読み込めます。
あとは、変数configから値を取り出すだけです。
次に、Yamlファイルを作っていきたいと思います。
Yamlでは
- 配列
- ハッシュ
- スカラー
というデータを扱えます。
配列
行頭に-
を付けることで表現できます。
- hoge - piyo
これをRubyで(先程上で書いたソースコード)読み込むと
["hoge", "piyo"]
となります。
ハッシュ
キー:値
の形式で表現します。
name: yamada age: 30
これをRubyで読み込むと
["name"=>"yamada", "age"=>30]
となります。
ここで注目なのは、
ageの値が"30"
ではなく30
となっている点です。
文字列じゃなくて、
ちゃんと数値として認識してくれています。
あとは、配列もハッシュもネスト(入れ子)にできるので、
- 配列の配列
- ハッシュのハッシュ
といった事もできます。
2. Yamlファイルを読み込む
では、実際に作っていきたいと思います。
今回はまず、 クローラーの検索キーワードをYamlファイルに書き込みます。
クローラーごとにハッシュと配列を組み合わせて
以下のように作成しました。
movie_crawler: search_word: - "子育て 1歳" - "離乳食" cook_crawler: search_word: - "離乳食" - "幼児食"
これをconfig
フォルダの中に
crawler-settings.yml
として保存します。
続いて、読み込む処理ですが、
以下の2行で検索キーワードを取得できます。
crawler_settings = YAML.load_file('./main/config/crawler-settings.yml') @keywords = crawler_settings["movie_crawler"]["search_word"]
これは、movie用のクローラーのプログラムですが、他のクローラー(cook_crawler)も同じです。
あとは、@keywordsを初期化していたロジックを
削除すれば終わりです。簡単!
movie_crawlerのソースコードはこんな感じになりました。
修正したのはcrawl_base()
メソッドの中だけです。
今回はこの辺で。