FePyを利用してIronPython環境でurllibを使う。
昨日(http://d.hatena.ne.jp/xanthus/20070419#p1)、IronPythonからurllibが使えなくて、なんとかならんのかと色々調べてみた。結果、IronPythonからは利用出来ない標準ライブラリが結構あるらしい。IronPythonにPython標準ライブラリを提供することをマイクロソフトがあまり乗り気じゃないっぽい。
で、どうするかと言うと、FePyを使うと出来る模様。
FePyはIronPythonで標準ライブラリを提供しようと言うプロジェクトっぽい。こちらのサイト(http://d.hatena.ne.jp/perezvon/)に解説があった。以下引用。
FePyは、まさにその「Pythoon標準ライブラリ」をIronPythonにも提供しようというプロジェクトです。
http://d.hatena.ne.jp/perezvon/20061122/1164222406
・・・
IronPythonの関心が、Pythonで.NETの開発ということにあるのに対して、FePyの関心は、.NETでもPythonらしいプログラミングをしたいということにあるので、お互いあまり関心がないのかもしれません。
こちらのサイト(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良いねぇ。