Yandex Spellchecker API返回空数组

问题描述

我正在尝试使用俄语拼写检查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': ['синхрофазотрон','синхрофазатрон','синхрофазотрона']}]