2011-12-04 22 views
1

と私はそうのように、このreadability APIにいくつかのテキストを渡すためにしようとしています:Pythonの:KeyError例外/例外IOError urllib.urlopen

text = 'this reminds me of the Dutch 2001a caravan full of smoky people Auld Lang Syne' 
# construct Readability Metrics API url 
request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=%s' % text 
request_url = urllib.quote_plus(request_url.encode('utf-8')) 
# make request 
j = json.load(urllib.urlopen(request_url)) 

私も最後の行に、このエラーが発生します。

[errnoに2]そのようなファイルやディレクトリはありません: 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json &テキスト= this +思い出させる+私+ +オランダ+ 2001a +キャラバン+完全+ +スモーキー+人+ Auld + Lang + Syne '

ただし、エラーのURLは有効で、訪問時に応答を返します。 urlopenを使用できるようにURLをどのようにエンコードするのですか?どうもありがとう。

答えて

3

あなたはhttp://を含む完全なURLを引用しています。あなたがrequest_urlの実際の値を印刷しようとした場合、あなたが望むものではありません

>>> print request_url 
http%3A%2F%2Fipeirotis.appspot.com%2Freadability%2FGetReadabilityScores%3Fformat 
%3Djson%26text%3Dthis+reminds+me+of+the+Dutch+2001a+caravan+full+of+smoky+people 
+Auld+Lang+Syne 

を取得します。あなたは、あなたがウェブサイトへの単一の議論になりたい部分だけを引用したいだけです。私が試した次、動作するように見えた:

text = 'this reminds me of the Dutch 2001a caravan full of smoky people Auld Lang Syne' 
# construct Readability Metrics API url 
request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=%s' % urllib.quote_plus(text.encode('utf-8')) 
# make request 
j = json.load(urllib.urlopen(request_url)) 
+0

私にそれを打つ:) –

+0

ありがとう、それははるかに理にかなっています! – soulprovidr

1

使用urllib.urlencodeがそうのように、唯一のクエリ文字列をエンコードする:

request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?%s' % urllib.urlencode({'format': 'json', 'text': text}) 

をスラッシュとコロンをコードするURL全体をエンコードし、それらをエンコードしないままにして、URLとして正しく解析されるようにします(ローカルファイルと誤解されません)。

+0

お返事ありがとうございます、私はこのサイトが大好きです! – soulprovidr