バリケンのRuby日記 RSSフィード

2007-01-25

[] scrAPIを使ってみる(3)  scrAPIを使ってみる(3) - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  scrAPIを使ってみる(3) - バリケンのRuby日記  scrAPIを使ってみる(3) - バリケンのRuby日記 のブックマークコメント

じゃあ、「GoogleニュースからRubyの記事を検索して、記事のタイトルリンク先を取得」をやってみるよ。

require 'open-uri'
require 'nkf'
require 'pp'

html = NKF.nkf('-w', open("http://news.google.co.jp/news?hl=ja&ned=jp&q=Ruby").read)
pp html.scrape("div table tbody tr td a:nth-child(1)"){|e| [e.text, e["href"]]}

毎回くどいようだけど、WindowsRubyを使っている人は、「'-w'」を「'-s'」にしてね。あと、Windowsの場合は「$KCODE='s'」も忘れずにね。

Windows版を完全なrubyコードとして書くとしたら、次のようになるよ。あ、もちろんscrAPIはインストールしておいてね。

$KCODE='s'

require 'scrapi'

class String
  # excerpt from http://wota.jp/ac/?date=20070115#p01
  def scrape(pattern, options = {}, &block)
    options = {:extract=>options} unless options.is_a?(Hash)
    options[:parser_options] = {:char_encoding=>'shiftjis'}.merge(options[:parser_options]||{})
    extract = options.delete(:extract) || block && :element || :text
    scraped = Scraper.define do
      process pattern, "matches[]"=>extract
      result :matches
    end.scrape(self, options) || []
    block ? scraped.map{|i| block.call(i)} : scraped
  end
end

class HTML::Tag
  # excerpt from http://wota.jp/ac/?date=20070115#p05
  def text() Scraper::Base.text(self) end
end

require 'open-uri'
require 'nkf'
require 'pp'

html = NKF.nkf('-s', open("http://news.google.co.jp/news?hl=ja&ned=jp&q=Ruby").read)
pp html.scrape("div table tbody tr td a:nth-child(1)"){|e| [e.text, e["href"]]}

これをテキストエディタか何かでrubynews.rbとして保存して、コマンドプロンプトで

> ruby rubynews.rb

とすれば実行できるよ。

実行結果だよ。

[["ニーズウェル、Web2.0アプリケーション「Ruby on RailsによるSNS開発」トレーニングを開始",
  "http://release.japan.cnet.com/abstract.html?release_id=15135"],
 ["mixiのようなSNS開発も夢じゃない?---ニーズウェルがRubyのトレーニング",
  "http://itpro.nikkeibp.co.jp/article/NEWS/20070124/259511/"],
 ["スターティアのDigit@link、Ruby on Rails に対応",
  "http://japan.zdnet.com/news/ir/story/0,2000056187,20341325,00.htm"],
 ["スターティア、独自CMSを「Ruby on Rails」に対応 開発を効率化",
  "http://opentechpress.jp/news/07/01/19/0946220.shtml"],
 ["スターティア、Rubyで構築したCMS(コンテンツマネジメント・システム)『Digit@link(デジタリンク)CMS』がRuby on Railsに対応",
  "http://www.value-press.com/pressrelease.php?article_id=11348&php_value_press_session=6b1277b41fd230bce02a4b02ea007f62"],
 ["\r\n@IT", "http://www.atmarkit.co.jp/news/200701/12/ror.html"],
 ["2006年「Ruby on Rails」が愛された理由",
  "http://www.atmarkit.co.jp/news/200701/12/ror.html"],
 ["Rails 1.2.1/1.2.0-REST志向の機能マルチバイトも、Leopard搭載も予定通り",
  "http://journal.mycom.co.jp/news/2007/01/22/342.html"],
 ["まつもとゆきひろ――第2回:Rubyを開発するということ",
  "http://www.itmedia.co.jp/enterprise/articles/0612/28/news025.html"],
 ["まつもとゆきひろ――第3回:僕の存在価値はそこにある",
  "http://www.itmedia.co.jp/enterprise/articles/0701/15/news024.html"],
 ["2007年はソフトウエア「再生」の年~ライターと編集者との会話から",
  "http://itpro.nikkeibp.co.jp/article/COLUMN/20061227/257845/"],
 ["2007年,Web2.0とEnterpriseの「融合」を読む(3)",
  "http://itpro.nikkeibp.co.jp/article/Watcher/20070111/258490/"]]

以前やった「Rubyでメールを送る」を組み合わせて、いろいろとscrAPIで切り取った情報携帯電話メール転送して読むと便利かも!

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070125