2017-01-22 48 views
3

我最近一直在尝试创建一些软件来记录某些语音,将语音更改为文本并将该文本翻译为另一种语言。到目前为止,我已经完成了前两个目标,但我一直在努力翻译。Python中的Microsoft Translate API的响应

我一直在尝试使用Microsoft Translator API,并按照所有说明来设置我的环境。我设置了一个微软的Azure Marketplace帐户,建立一个项目,使API,我已经能够用简单的bash命令,让我的访问令牌:

curl --data "" 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken?Subscription-Key=mySubscriptionKey' 

我一直在使用写了一个小python脚本发送请求的请求和argparse库:

request = { 
    'appid': ('Bearer ' + token), 
    'text' : txt, 
    'from' : 'en', 
    'to' : 'fr' 
} 

response = requests.get('https://api.microsofttranslator.com/v2/http.svc', params = request) 

似乎一切都顺利,我也得到一个200响应(这是我收集意味着成功),但是当我尝试看看文中的响应,数百行不明确的html被打印出来。在查看了几百行(大部分是列出数十种语言,我选择不将其翻译为我的文本)后,我找不到任何实际翻译的文本。微软在their github上的所有例子都使用过时的DataMarket网站,微软正在停止授权链接。而且,我找不到实际使用的API的任何示例 - 它们都只是授权示例。使用带有“Try it Out”示例的标记为我提供了正确的结果(尽管它是一个xml文件?),所以这绝对是一个python问题。

那么,有没有人使用过这个服务,并且介绍了如何解释或解开这个响应的一些想法?

谢谢!

回答

3

我试图重现您的问题,但失败了,我的示例代码工作正常,这是通过遵循文档 Authentication Token API for Microsoft Cognitive Services Translator API & Text Translation API /Translate写。

作为参考,这里是我在Python中的示例代码,以及它下面的输出。

import requests 

# Getting the key from tab Keys on Azure portal 
key = "xxxxxxxxxxxxxxxxxxxxxxx" 

# For gettting access token 
# url4authentication = 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken?Subscription-Key=%s' % key 
# resp4authentication = requests.post(url4authentication) 

url4authentication = 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken' 
headers4authentication = {'Ocp-Apim-Subscription-Key': key} 
resp4authentication = requests.post(url4authentication, headers=headers4authentication) 
token = resp4authentication.text 

# For calling Translate API 
#text = "happy time" 
text = """ 
Everything seems to go smoothly, and I get a 200 response (which I gather means success), yet when I try to look at the text in the response, hundreds of lines of obscure html are printed out. After looking through a few hundred of the lines (which were, for the most part, listing the dozens of languages I chose NOT to translate my text into) I couldn't find any actually translated text. All of the examples that Microsoft has on their github use the outdated DataMarket website that Microsoft is in the process of discontinuing as the authorization link. Moreover, I couldn't find any examples of the API actually being used - they were all just authorization examples. Using the token with their 'Try it Out' example gives me the correct result (though as an xml file?), so this is definitely a python problem. 

So, has anyone used this service before and mind shedding some light on how to interpret or unwrap this response? 

Thank you! 
""" 
come = "en" 
to = "fr" 
# url4translate = 'https://api.microsofttranslator.com/v2/http.svc/Translate?appid=Bearer %s&text=%s&from=%s&to=%s' % (token, text, come, to) 
# headers4translate = {'Accept': 'application/xml'} 
# resp4translate = requests.get(url4translate, headers=headers4translate) 
url4translate = 'https://api.microsofttranslator.com/v2/http.svc/Translate' 
params = {'appid': 'Bearer '+token, 'text': text, 'from': come, 'to': to} 
headers4translate = {'Accept': 'application/xml'} 
resp4translate = requests.get(url4translate, params=params, headers=headers4translate) 
print(resp4translate.text) 

输出:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"> 
Tout semble aller en douceur, et je reçois une réponse 200 (qui je suppose signifie succès), mais lorsque j’essaie de regarder le texte dans la réponse, des centaines de lignes html obscur sont imprimés. Après avoir regardé à travers quelques centaines des lignes (qui étaient, pour la plupart, répertoriant des dizaines de langues, en que j’ai choisi de ne pas traduire mon texte) je ne pouvais pas trouver n’importe quel texte en fait traduit. Tous les exemples que Microsoft a sur leur github utilisent le site DataMarket dépassé que Microsoft est en train d’interrompre le lien d’autorisation. En outre, je ne pouvais pas trouver des exemples de l’API effectivement utilisés - ils étaient tous exemples juste autorisation. En utilisant le jeton avec leur exemple « Essayer » me donne un résultat correct (même si, comme un fichier xml ?), donc c’est certainement un problème de python. 

Ainsi, quiconque a utilisé ce service avant et l’esprit certains éclairant sur la façon d’interpréter ou de dérouler cette réponse ? 

Merci ! 
</string> 

希望它能帮助。

+0

非常有帮助,谢谢!问题是我没有在请求中包含'headers'参数,但只包含'params'参数,所以我从Microsoft获得的输出是大量的html,而不是'application/xml'格式。再次感谢你! – Roman