2chのBBS MenuをYAMLに

30分プログラム、その256。2chのBBS MenuをYAMLに変換してみる。
BBS一覧はBBS Menuから取得すればいい。ただ、日本語をto_yamlに出力するとバイナリと見なされてしまう。解決法はあるらしいけれど面倒なので、直接putsでYAMLを出力するようにした。

使い方

$ ruby bbsmenu.rb
- name: "2ch総合案内"
  url: "http://info.2ch.net/guide/"
  category: ""
- name: "地震headline"
  url: "http://headline.2ch.net/bbynamazu/"
  category: "地震"
- name: "地震速報"
  url: "http://news24.2ch.net/namazuplus/"
  category: "地震"

ソースコード

#! /opt/local/bin/ruby -w
# -*- mode:ruby; coding:utf-8 -*-
#
# bbsmenu.rb -
#
# Copyright(C) 2008 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2008/03/02 20:36:13
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
require 'open-uri'
require 'kconv'
require 'yaml'

BBS_MENU='http://menu.2ch.net/bbsmenu.html'

hash = []
open(BBS_MENU) do|io|
  category = nil
  io.each do|line|
    case line
    when %r!\A<BR><BR><B>([^<]+)</B>!
      category=$1.toutf8
    when %r!\A<A HREF=([^\s]*)>(.*)</A>!
      puts <<-END
- name: "#{$2.toutf8}"
  url: "#{$1.toutf8}"
  category: "#{category}"
      END
    end
  end
end