2016-09-13 31 views
2

我有這段代碼來閱讀python 2中的Mashape.com API。我如何在python 3中閱讀它?使用urllib閱讀mashabe API

代碼

import urllib, urllib2, json 
from pprint import pprint 

URL = "https://getsentiment.p.mashape.com/" 
text = "The food was great, but the service was slow." 
params = {'text': text, 'domain': 'retail', 'terms': 1, 'categories': 1,'sentiment': 1, 'annotate': 1} 
headers = {'X-Mashape-Key': YOUR_MASHAPE_KEY} 

opener = urllib2.build_opener(urllib2.HTTPHandler) 
request = urllib2.Request(URL, urllib.urlencode(params), headers=headers) 
response = opener.open(request) 
opener.close() 

data = json.loads(response.read()) 
pprint(data) 

我想這代碼,但它有以下錯誤:

import urllib.parse 
import urllib.request 

URL = "https://getsentiment.p.mashape.com/" 
text = "The food was great, but the service was slow." 
params = {'text': text, 'domain': 'retail', 'terms': 1, 'categories': 1, 'sentiment': 1, 'annotate': 1} 
headers = {'X-Mashape-Key': YOUR_MASHAPE_KEY} 

opener = urllib.request.build_opener(urllib.request.HTTPHandler) 
request = urllib.request.Request(URL, urllib.parse.urlencode(params), headers) 
response = opener.open(request) 
opener.close() 

data = json.loads(response.read()) 
print(data) 

錯誤:

TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str. 
+0

發表你與蟒蛇具有3,爲什麼你不能「閱讀」 –

+0

我不知道如何讀它的問題,我從什麼地方複製這些代碼,我沒有找到這樣的事情python 3 – Scott

+0

是的,但是當你用python 3運行這個代碼會發生什麼? –

回答

1

在這一行:

request = urllib.request.Request(URL, urllib.parse.urlencode(params), headers) 

嘗試更換到

data = urllib.parse.urlencode(params).encode('utf-8') 
request = urllib.request.Request(URL, data, headers) 
+0

'urllib.error.HTTPError:HTTP Error 402:Payment Required' haha​​ha – Scott

+0

是的,但這不是代碼錯誤,是關於您的帳戶的。該請求是成功的,但服務器響應了402狀態。請參閱:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes –

+0

我知道我的朋友:)謝謝 – Scott