image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« google.co.jp で "prolog アプリケーション" で検索したものからの抜粋 | トップページ | ピックアップ:1週間に500アイデアを発想する, ゲームセンターが次々と閉鎖する裏にWiiの躍進, etc... »

2008-02-09

scrubyt で http://del.icio.us/ にアクセス

scrubyt で http://del.icio.us/ にアクセスしてみた。

require 'rubygems'
require 'scrubyt'

$KCODE="utf-8"

url = 'http://del.icio.us/youichikato'
bookmarks = Scrubyt::Extractor.define do
  fetch(url)

  entry '/html/body/div/ol/li' do
    title '/h4/a'
    url '/h4/a/@href'
  end
end

bookmarks.to_xml.write($stdout, 1)

(データ場所を指定する xpath は firebug で調べた)
スッキリと書ける。素晴らしい! 

走らせた結果:
$ ruby delisiou0.rb
/opt/local/lib/ruby/gems/1.8/gems/scrubyt-0.3.4/lib/scrubyt/core/scraping/filters/text_filter.rb:25: warning: don't put space before argument parentheses
http://del.icio.us/youichikato
  <root>
    <entry>
      <title>Reference - Scrubyt</title>
      <url>http://wiki.scrubyt.org/index.php?title=Reference#XPath_Example</url>
    </entry>
... 省略 ...
    <entry>
      <title>どう見ても写真並みにリアルなクオリティのベクターアートいろいろ - GIGAZINE</title>
      <url>http://gigazine.net/index.php?/news/comments/20080206_not_photos/</url>
    </entry>
  </root>

これで問題はないけど、namespace, prefix が記されたものを生成したかったので、次のようにしてみた。
# xfy/xvcd で扱うには namespace, prefix が付いていた方が良いので

require 'rubygems'
require 'scrubyt'
require 'builder'
require 'pp'
... 省略 ...

# namespace や prefix が不要なら、これで十分
# bookmarks.to_xml.write($stdout, 1)

# namespace や prefix などが記られたものを得る。
# ただし、日本語は エンティティ 形式 (%#xxxxx;) になってしまう。
prefix ="p"
namespace ="http://sample.com"
roottag = "bookmarks"
entrytag = "entry"
buffer = ""
hash = bookmarks.to_hash

xml = Builder::XmlMarkup.new( :target => buffer, :indent => 2 )
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
xml.method_missing( prefix + ":" + roottag, "xmlns:" + prefix => namespace) {
  hash.each { |ent|
   xml.method_missing(prefix + ":" + entrytag) {
      ent.each { |k, v|
        xml.method_missing(prefix + ":" + k.to_s, v.to_s)       
      }
    }
  }
}

puts buffer 

走らせた結果:
$ ruby delisiou.rb
/opt/local/lib/ruby/gems/1.8/gems/scrubyt-0.3.4/lib/scrubyt/core/scraping/filters/text_filter.rb:25: warning: don't put space before argument parentheses
http://del.icio.us/youichikato
<?xml version="1.0" encoding="UTF-8"?>
<p:bookmarks xmlns:p="http://sample.com">
  <p:entry>
    <p:url>http://wiki.scrubyt.org/index.php?title=Reference#XPath_Example</p:url>
    <p:title>Reference - Scrubyt</p:title>
  </p:entry>
... 省略 ...
  <p:title>&#12393;&#12358;&#35211;&#12390;&#12418;&#20889;&#30495;&#20006;&#12415;&#12395;&#12522;&#12450;&#12523;&#12394;&#12463;&#12458;&#12522;&#12486;&#12451;&#12398;&#12505;&#12463;&#12479;&#12540;&#12450;&#12540;&#12488;&#12356;&#12429;&#12356;&#12429; - GIGAZINE</p:title>
  </p:entry>
</p:bookmarks>

マッシュアップなページを作る時、web サービスや http はページのデータをすべてつかうわけではない。
scrubyt のようなものを使って、必要な部分だけを単純な構造でまとめてから、ビジネルロジックで処理し、結果をレンダリングするという使い方が重要だ。

« google.co.jp で "prolog アプリケーション" で検索したものからの抜粋 | トップページ | ピックアップ:1週間に500アイデアを発想する, ゲームセンターが次々と閉鎖する裏にWiiの躍進, etc... »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/184434/40058349

この記事へのトラックバック一覧です: scrubyt で http://del.icio.us/ にアクセス:

« google.co.jp で "prolog アプリケーション" で検索したものからの抜粋 | トップページ | ピックアップ:1週間に500アイデアを発想する, ゲームセンターが次々と閉鎖する裏にWiiの躍進, etc... »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク