问题描述
我正在尝试使用俄语拼写检查API Yandex.Speller。
该请求在我的浏览器中似乎正常运行。但是,当我使用python脚本时,响应为空。
我为自己做错了事感到困惑。
这是我的代码:
import urllib
from urllib.request import urlopen
import json
def main():
api(text_preproc())
def text_preproc():
""" Takes misspelled word/phrase,“t”,and prepares it for
API request
"""
t = "синхрафазатрон в дубне"
text = t.replace(" ","+")
return text
def diff_api(text):
my_url = "https://speller.yandex.net/services/spellservice.json/checkText?text="
my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
my_data = {
"text" : text,"lang" : "ru","format" : "plain"}
my_uedata = urllib.parse.urlencode(my_data)
my_edata = my_uedata.encode('ascii')
req = urllib.request.Request(url=my_url,data=my_edata,headers=my_headers)
response = urlopen(req)
data = json.load(response)
print(data)
对我可能做错的事情有任何见解吗?
解决方法
my_uedata
必须是您向其发送请求的URL的一部分。
另外,在:
def main():
api(text_preproc())
您调用api()
,但未定义函数。我用过diff_api()
。
尝试一下:
import json
import urllib
from urllib.request import urlopen
def main():
diff_api(text_preproc("синхрафазатрон в дубне"))
def text_preproc(phrase):
""" Takes misspelled word/phrase,“t”,and prepares it for
API request
"""
return phrase.replace(" ","+")
def diff_api(text):
my_url = "https://speller.yandex.net/services/spellservice.json/checkText?text="
my_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
my_data = {
"text": text,"lang": "ru","format": "plain"}
my_uedata = urllib.parse.urlencode(my_data)
req = urllib.request.Request(url=my_url+my_uedata,headers=my_headers)
data = json.load(urlopen(req))
print(data)
main()
输出:
[{'code': 1,'pos': 5,'row': 0,'col': 5,'len': 14,'word': 'синхрафазатрон','s': ['синхрофазотрон','синхрофазатрон','синхрофазотрона']}]