Rubyを触ってみた : HTTP GET
ずっと気になっていたけど、触れられずにいたRubyを使ってみました。
意外と簡単に書けるものですね。普段はJava使いなのですが、コード量が圧倒的に短くかけそうです。
今回はopen-urlというライブラリを使ってみたのですが、多少引っかかったので、それも含めてまとめます。
コードは下記の通り。Windows 7環境で実行します。(コード自体はどの環境でも同じです。)
# コマンドラインから # ruby open-uri.rb http://www.oreilly.co.jp # のように実行 require 'open-uri' # URLを実行時引数から入力 url = ARGV[0] # URLに該当するWEBページのHTMLをダウンロードして表示 open(url){|connection| connection.each_line do |line| print line end }
実行コマンドはソースコードの通り。
実行時引数で指定したURLに該当するHTMLファイルがダウンロードされてコンソールに表示されます。
まず、実行時引数ですが、Rubyの場合、ARGVという定数に入ってくるようです。
Cなどの言語では、引数はint main(char **argv)のように指定しますが、Rubyではそもそもmain関数などないので、予約された定数として入ってくるのですね。
Cとの違いで気をつけるべきは、配列のインデックスです。0番目からURLの引数がはいってきます。
もうひとつは、なぜか出て来る実行時エラーで、下のようなもの。
おそらく、Rubyの実行環境に入っているzlib.dllが古いのでしょう。
http://haraita9283.blog98.fc2.com/blog-entry-64.html で言及されていました。
そこで、zlibのサイト でzlib.dllをダウンロードしてきます。
一見、ソースコードしかないようですが、落ち着いて下の方までスクロールしていくと、
zlib for Windows 9x/NT/2000/XP/2003 (DLL version, plus related utilities)
のようなリンクがあると思います。この先からZIPファイルをダウンロードしてきて展開しましょう。
私の環境では、Windowsの32bitなので、dll32というフォルダ内のzlibwapi.dllを持ってきました。このままでは反応しないので、zlibwapi.dll => zlib.dllのように改名して、実行するディレクトリに持っていきます。
これでうごくかな?
いやー、それにしてもコードが短い。
openのあたりの構文も面白いですね。