Rubyによるクローラー開発技法 vol2 ~基本的な書き方を学ぶ~
chapter1の続きを読み進めます。
chapter1では最終的に、
あるサイトのトピックス情報を取得し、
RSS配信するところまでやります。
完成するとこんな感じ
本通りに書き写しただけと言われればそこまでなんですが、
自分の手で書いたものが動くとちょっと感動。
しかも親切な事に、
本に書かれていたサイト以外に、
自分が情報を取得したいサイトがあれば、
簡単に実装できるようなプログラムになっていて、
解説もされている。
なので、簡単に自分専用の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の運用例
- 作者: るびきち,佐々木拓郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/25
- メディア: 大型本
- この商品を含むブログ (8件) を見る