Я пытаюсь использовать Microsoft Translator API в моем приложении Rails.К сожалению и в основном неожиданно, сервер всегда отвечает внутренней ошибкой сервера.Я также попробовал это вручную с Poster [1], и я получил те же результаты.
Более подробно, что я делаю?Я создаю строку XML, которая входит в тело запроса.Я использовал C # Пример документации API .Ну, а потом я просто вызываю RESTservice.Мой код выглядит так:
xmlns1 = "http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"
xmlns2 = "http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xml_builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.TranslateArrayRequest("xmlns:ms" => xmlns1, "xmlns:arr" => xmlns2) {
xml.AppId token #using temporary token instead of appId
xml.From source
xml.To target
xml.Options {
xml["ms"].ContentType {
xml.text "text/html"
}
}
xml.Texts {
translate.each do |key,val|
xml["arr"].string {
xml.text CGI::unescape(val)
}
end
}
}
end
headers = {
'Content-Type' => 'text/xml'
}
uri = URI.parse(@@msTranslatorBase + "/TranslateArray" + "?appId=" + token)
req = Net::HTTP::Post.new(uri.path, headers)
req.body = xml_builder.to_xml
response = Net::HTTP.start(uri.host, uri.port) { |http| http.request(req) }
# [...]
xml_builder
создает что-то вроде следующего XML.В отличие от примера со страницы API, я определяю два пространства имен вместо того, чтобы ссылаться на них в определенных тегах (в основном потому, что я хотел уменьшить накладные расходы) - но это не проблема, когда я это делаюкак и в примере с документом, я также получаю внутреннюю ошибку сервера.
<?xml version="1.0" encoding="UTF-8"?>
<TranslateArrayRequest xmlns:ms="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<AppId>TX83NVx0MmIxxCzHjPwo2_HgYN7lmWIBqyjruYm7YzCpwnkZL5wtS5oucxqlEFKw9</AppId>
<From>de</From>
<To>en</To>
<Options>
<ms:ContentType>text/html</ms:ContentType>
</Options>
<Texts>
<arr:string>Bitte übersetze diesen Text.</arr:string>
<arr:string>Das hier muss auch noch übersetzt werden.</arr:string>
</Texts>
</TranslateArrayRequest>
Каждый раз, когда я запрашиваю сервис, он отвечает с
#<Net::HTTPInternalServerError 500 The server encountered an error processing the request. Please see the server logs for more details.>
... за исключением того, что я делаю некоторые неопределенные вещи,как использование GET вместо POST, тогда он отвечает что-то вроде «метод не разрешен».
Я думал, что это может быть что-то не так с XML, потому что я могу запросить AppIdToken и вызвать TranslateМетод без проблем.Но для меня XML выглядит просто отлично.В документации говорится, что существует схема для ожидаемого XML:
Тело запроса представляет собой строку XML, сгенерированную в соответствии со схемой, указанной по адресу http: // api.microsofttranslator.com/v2/Http.svc / help
К сожалению, я ничего не могу найти по этому поводу.
Итак, теперь мой вопрос (-ы): я что-то не так делаю?Может быть, кто-то сталкивался с подобными ситуациями и может сообщить о решениях или обходных решениях?
[1] Плагин FF для постеров> addons.mozilla.org/en-US/firefox/addon/poster/