FePyを利用してIronPython環境でurllibを使う。

昨日(http://d.hatena.ne.jp/xanthus/20070419#p1)、IronPythonからurllibが使えなくて、なんとかならんのかと色々調べてみた。結果、IronPythonからは利用出来ない標準ライブラリが結構あるらしい。IronPythonPython標準ライブラリを提供することをマイクロソフトがあまり乗り気じゃないっぽい。
で、どうするかと言うと、FePyを使うと出来る模様。
FePyはIronPythonで標準ライブラリを提供しようと言うプロジェクトっぽい。こちらのサイト(http://d.hatena.ne.jp/perezvon/)に解説があった。以下引用。

FePyは、まさにその「Pythoon標準ライブラリ」をIronPythonにも提供しようというプロジェクトです。
・・・
IronPythonの関心が、Pythonで.NETの開発ということにあるのに対して、FePyの関心は、.NETでもPythonらしいプログラミングをしたいということにあるので、お互いあまり関心がないのかもしれません。

http://d.hatena.ne.jp/perezvon/20061122/1164222406


こちらのサイト(http://kazamachi.blogspot.com/2007/01/ipce-r5socket.html)を参考にして作ったFePyを利用してurllibを利用するコードは以下。site.pyを書き換える必要もない。
ただし、FePyは標準でIronPythonのソケットを使用するので、それをFePy独自実装のソケットに設定するfepy.override_builtin('socket')を呼び出す(socket.pyのmakefileを書き換える必要はなかった。)。

F:\File\IronPython\IPCE-r5>ipy
IronPython 1.1a1 (1.1) on .NET 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
>>> import fepy
>>> fepy.override_builtin('socket')
>>> import urllib
>>> opener = urllib.FancyURLopener()
>>> f = opener.open( 'http://192.168.101.130/XXX/index.html' )
>>> print f.info()
Date: Fri, 20 Apr 2007 01:38:03 GMT
Server: Apache/1.3.33 (Win32)
Last-Modified: Fri, 02 Mar 2007 03:46:56 GMT
ETag: "0-4585-45e79e30"
Accept-Ranges: bytes
Content-Length: 17797
Connection: close
Content-Type: text/html

>>> data = f.read()
>>> print data


FePy(http://fepy.sourceforge.net/)

FePy良いねぇ。