絶対URLを相対URLに変換


Pythonで相対URLを絶対URLに変換



・・・というのは見つかったのですが、

逆に、絶対URLを相対URLに変換は見つからないので書いてみました。



相対パスで書くとメンドクサイことが起こるとか、そういうのがあるのかもしれませんが、それはそれとして。

#encoding:shift-jis
from __future__ import with_statement, division, print_function

def relurl(target, base):
    from urlparse import urlparse, urlunparse
    import posixpath
    otarget = urlparse(target)
    obase = urlparse(base)
    
    if obase[:2] == otarget[:2]:
        path = posixpath.relpath(otarget[2], obase[2])
        return urlunparse(("", "", path) + otarget[3:])
    else:
        return target
    
def main():
    print(relurl("http://hc8.seikyou.ne.jp/home/doloop/mugen/tool/index.html",
                 "http://hc8.seikyou.ne.jp/home/doloop/software/ie6"))
    # => "../../mugen/tool/index.html"
    
    print(relurl("http://doloop.bbs.fc2.com/",
                 "http://hc8.seikyou.ne.jp/home/doloop/software/ie6"))
    # => "http://doloop.bbs.fc2.com/"
    
    print(relurl("http://hc8.seikyou.ne.jp/home/doloop/mugen/tool/index.html",
                 "http://hc8.seikyou.ne.jp/home/doloop/software/ie6/index.html"))
    # => "../../../mugen/tool/index.html"
    # orz
    
if __name__ == "__main__":
    main()


注:relurlのbase引数には、ディレクトリ名?を与えないとダメです。
HTMLのパスだと期待した結果が出ません。