blog.sorah.jp

RubyでURL短縮展開のコードがきもいです...

Schwarze SQ: 短縮URLを展開するRubyスクリプトを作ってみた

HTTPを直打ちしてLocationヘッダの内容を取得してるだけなので、ものすごく単純な上にウィルス感染の心配も無し

いやいやいや、それはないわ。

Net::HTTP#head つかいなさいよ。GETメソッドなんてつかうんじゃない。なにをいってるんだおまえは。

ruby -rnet/http -ruri -e"uri = URI.parse(ARGV.shift);Net::HTTP.start(uri.host,uri.port){|io| r=io.head(uri.path); p r['Location'] || uri.to_s}" http://j.mp/dankogai

ちゃんとかくとこうなります

require 'net/http'
require 'uri'

def expand_url(url)
  uri = url.kind_of?(URI) ? url : URI.parse(url)
  Net::HTTP.start(uri.host, uri.port) { |io|
    r = io.head(uri.path)
    r['Location'] || uri.to_s
  end
end

p expand_url("http://j.mp/dankogai") #=> "http://blog.livedoor.jp/dankogai/"

それにしても, Perlはすごいなー。

404 Blog Not Found:perl - 短縮URLを一行で展開する

perl -MLWP::UserAgent -lE 'say LWP::UserAgent->new->head(shift)->request->uri' http://j.mp/dankogai

追記:

ゴルフしたらこうなった

ruby -rnet/http -ruri -e"u=URI.parse(ARGV[0]);p Net::HTTP.start(u.host,u.port).head(u.path)['Location']||u.to_s" http://j.mp/dankogai

GETメソッドになるけどopen-uriつかえばもうちょっと短くなると思う。

Backfilled at , Published at