7行プログラミング(2)
調子に乗ってもう1つ作ってみた。次は簡易辞書スクリプト。検索サイトを勝手にWebサービスみたいに利用してしまうもの。
#!/usr/bin/ruby require "socket";require "kconv";s=TCPSocket.open("dictionary.goo.ne.jp",80) s.print"GET /search.php/?MT=#{ARGV[0]}&kind=ej&mode=0&base=1&row=0 HTTP/1.0?r"? "?n?r?n";g="";while l=s.gets;g << l;end;g=Kconv.toutf8(g);m=g.split("?n");b=0 print"#{ARGV[0]}?n";m.each do|l|;if 1==b;t=l.gsub(/<br>/,"?n");t.gsub!(/<.+?>/? ,"");t.gsub!(/&?w+?;/,"");if/<?/div>/=~l;break;end;print"#{t}";next;end;if? /<div style=?"line?-height:1?.4em;margin:14px;?">/=~l;b=1;end;end
TCPSocketを使ってgoo辞書サーバの80番ポートを直接叩き,HTMLを取得。さらに取得したHTMLをパースして訳語の部分だけを抽出する。最後にMacOSXのTerminalに合わせてUTF8に文字コードを変換して出力する。外部モジュールをrequireしているので半分インチキだが,まあ標準モジュールなのでその辺は…(ごにょごにょ)
使い方は単語を引数にして起動するだけ。例えば以下の通り。
[yoda]~/tmp> ./7goo.rb nerd nerd ━━ n. 〔米俗〕 無能な[気のきかない]人, 変り者.
7行プログラミング,結構イケる。