本を読む

読書やコンピュータなどに関するメモ

やじうまWatchをメールで読む

 先月やった作業。

 やじうまWatchをメールで読もうと思った。それPla。が、そのときPlagger::Plugin::CustomFeed::YajimaWatchのダウンロード先につながらなかったので、車輪を再発明する。CustomFeed::Script+Rubyスクリプトで。

 工夫したのはURLにMD5ハッシュを入れたところ。が、あとでCustomFeed::YajimaWatchを見たらまったく同じことをしていた。

 はまったのは、Rubyのyamlライブラリで日本語がまともに使えないところ。小細工している。

yajiumawatch.rb

#!/usr/bin/ruby -Ku
require 'kconv'
require 'open-uri'
require 'yaml'
require 'digest/md5'

class String                    # from [ruby-list:41779], for YAML bug
  def is_binary_data?
    return true if self.include?(0)
    check = self[0, 512]
    check.size < 10 * check.count("\x00-\x07\x0b\x0e-\x1a\x1c-\x1f")
  end
end

url = 'http://internet.watch.impress.co.jp/static/yajiuma/'

re = %r|<P>
<B>(.*?)</B>
<BR>
(.*?)
 *<BR><DIV align=right><FONT size=-1>(.*?)</FONT></DIV></P>|

feed = {
  'title' => 'やじうまWatch',
  'link'  => url,
  'entry' => [],
}

open(url) {|io|
  io.read.delete("\r").toutf8.split(/<HR noShade SIZE=1>/).each {|d|
    %r|<B><FONT color="darkblue" size="\+1">【?(\d+)/(\d+)/(\d+)】</FONT></B>| =~ d or next
    date = Time.mktime($1, $2, $3).strftime('%Y-%m-%dT00:00:00')
    d.scan(re){|title, body, author|
      feed['entry'].push({
        'title'  => title,
        'body'   => '<p>' + body + '</p>',
        'author' => author,
        'date'   => date,
        'link'  => url + '#' + Digest::MD5.hexdigest(title), # dummy URL
      })
    }
  }
}
print feed.to_yaml.gsub(/\\x([0-9A-F]{2})/){ [$1].pack('H*') } # for YAML bug

2007-01-27追記:
正規表現を2文字ほど変更

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/181-b7b6c589

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad