带有Python请求的Microsoft Speech API?

时间:2017-05-01 18:20:32

标签: http-post python-requests postman microsoft-speech-api

我尝试使用Python中的requests程序包来调用Microsoft Bing Speech Transcription API。我可以在使用Postman时使调用工作,但这需要手动选择要上传的文件(Postman提供GUI来选择文件),但我不确定此文件选择如何映射到实际的HTTP请求(以及扩展名为Python requests的请求)。邮差可以将其内部查询转换为代码,根据邮递员的说法,它要求的http请求是:

POST /recognize?scenarios=smd&appid=[REDACTED]&locale=en-US&device.os=wp7&version=3.0&format=json&form=BCSSTT&instanceid=[REDACTED]&requestid=[REDACTED] HTTP/1.1
Host: speech.platform.bing.com
Authorization: [REDACTED]
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: [REDACTED]

undefined

如果通过Python requests库进行的等效请求将是:

import requests

url = "https://speech.platform.bing.com/recognize"

querystring = {"scenarios":"smd","appid":[REDACTED],"locale":"en-US","device.os":"wp7","version":"3.0","format":"json","form":"BCSSTT","instanceid":[REDACTED],"requestid":[REDACTED]}

headers = {
'authorization': [REDACTED],
'content-type': "application/x-www-form-urlencoded",
'cache-control': "no-cache",
'postman-token': [REDACTED]
}

response = requests.request("POST", url, headers=headers, params=querystring)

print(response.text)

但请注意,在任何一种情况下,生成的代码都不会实际传入要转录的音频文件(显然Postman不知道如何显示原始音频数据),因此我不确定如何添加这个要求的关键信息。我假设在HTTP请求代码的情况下,音频流进入显示为"未定义"的地点。在Python requests命令中,通过阅读documentationresponse = requests.request(...)行应该被替换为:

response = requests.request("POST", url, headers=headers, params=querystring, files={'file': open('PATH/TO/AUDIO/FILE', 'rb')})

但是当我运行此查询时,我得到"请求超时(> 14000 ms)"。我是如何通过Python成功调用Microsoft Speech API的?非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

将此行设为您的帖子请求:

r = requests.post(url, headers=headers, params=querystring, data=open('PATH/TO/WAV/FILE', 'rb').read())

这应该可以解决问题。

Microsoft Documentation中,音频文件二进制数据是POST请求的主体,必须使用请求库的data参数发送。