Rubyによるクローラー開発技法 vol2 ~基本的な書き方を学ぶ~

chapter1の続きを読み進めます。

chapter1では最終的に、
あるサイトのトピックス情報を取得し、
RSS配信するところまでやります。
 
完成するとこんな感じ
f:id:tumiki_jp:20150709014511p:plain

本通りに書き写しただけと言われればそこまでなんですが、
自分の手で書いたものが動くとちょっと感動。
しかも親切な事に、
本に書かれていたサイト以外に、
自分が情報を取得したいサイトがあれば、
簡単に実装できるようなプログラムになっていて、
解説もされている。
なので、簡単に自分専用のRSSがつくれます。

今回学んだ事
CGI.unescapeHTML

HTML等の文字列内の文字コードになった部分を文字列に変換する。

p CGI.unescapeHTML("a > b")
=> "a > b"

当然、逆もあります。 CGI.escapeHTMLです。

p CGI.escapeHTML("a > b")
=> "a > b"

このメソッドを呼び出すときは、
ファイルの先頭にrequire 'cgi'を書く必要があります。
 

open-uri

http/ftpに簡単にアクセスするためのモジュール。
open-uriを使って、openメソッドの引数にURLを指定すれば、
それだけで取得してくれます。

source = open("http://www.example.com/")

これを利用するには、
ファイルの先頭にrequire 'open-uri'を書く必要があります。

String#toutf8

文字コードUTF-8に変換するメソッド
表記の仕方が悪いですが、
このメソッドはStringクラスに用意されている訳ではありません。
このメソッドを使うには、kconvライブラリをロードしないといけません。
いつも通り、require 'kconv'を先頭に書きます。

source = open("http://www.example.com/").toutf8

 

||=

変数の初期化時に1回だけ値をセットしたいと言ったときに使える書き方。

a ||= b

と書くと

a || (a = b)

という意味になります。
なので、
aに既に値がセットされている場合は何もせず、
値がセットされていない場合は、bの値がセットします。
つまり、変数の初期化をしたい時に使えるという事です。

__send__

レシーバが持っているメソッドを呼び出すためのメソッド

def Hello(name)
  p "hello #{name}."
end
__send__(:Hello, "太郎")

=> "hello 太郎."


class Greeting
  def Hello(name)
    p "hello #{name}."
  end
end
greeting = Greeting.new
greeting.__send__(:Hello, "太郎")

=> "hello 太郎."

sendメソッドの別名。なので同じ動きです。
唯一sendメソッドと違うのは、
sendメソッドを別の処理で上書きした場合に、 sendメソッドを呼べば、メソッド呼び出しが行えるという所です。
確かにsendっていう名前は
他でも使いたくなりそうですもんね。

klass

最初は、誤字(classの書き間違い)だと思いましたが、
違うようです。
どうやら、クラス自体を変数として扱う時に
classという名前を付けたいが、classというキーワードは予約語なので、
klassやclazzと付けるみたいです。
(間違ってたらごめんなさい。)

class Car
  ...
end

car_klass = Car

少し自身がないですが、こんな使い方だと思われます。

 
 
 
一応chapter1は読み終わりました。
次回からchapter2を読み進めていきます。

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例