子育て情報アプリを作れるように vol10 ~yamlを使ってみる~

今回はYamlファイルを使って
クローラーの検索キーワードを読み込めるようにします。
多分、ヤムルと呼びます。
Yamlについては
http://magazine.rubyist.net/?0009-YAML#l2
に詳しく書かれています。

今回の目標

  1. Yamlを理解する
  2. Yamlファイルを読み込む

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()メソッドの中だけです。

今回はこの辺で。