-1
テキスト変換APIを使用して言語名を取得できません。私はこの方法で使用可能な言語を取得:GetLanguageNamesでテキスト変換APIを使用して言語名を取得する方法
public async Task<List<string>> GetLanguagesForTranslateAsync()
{
string requestUri = "https://api.microsofttranslator.com/v2/http.svc/GetLanguagesForTranslate";
string accessToken = await this.auth.GetTokenAsync();
string response = await this.GetAsync(requestUri, accessToken);
XDocument xml = XDocument.Parse(response);
List<string> languages = new List<string>();
foreach (XElement element in xml.Root.Descendants())
{
languages.Add(element.Value);
}
return languages;
}
private async Task<string> GetAsync(string url, string bearerToken)
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
HttpResponseMessage response = await httpClient.GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
}
I私は "EN"、 "ES"、 "FR" または "ZH-CHT" のような言語コードとXMLを取得するが、私は取得したいこの場合、 "英語"、 "スペイン語"、 "フランス語"または "中国語(伝統的)"のいずれかです。
public async Task<List<string>> GetLanguageNamesAsync(string locale, List<string> languageCodes)
{
string requestUri = "https://api.microsofttranslator.com/v2/http.svc/GetLanguageNames";
string content = $"locale=en&languageCodes=en,es,fr,zh-CHT";
string accessToken = await this.auth.GetTokenAsync();
string response = await this.PostAsync(requestUri, accessToken, content);
XDocument xml = XDocument.Parse(response);
List<string> languages = new List<string>();
foreach (XElement element in xml.Root.Descendants())
{
languages.Add(element.Value);
}
return languages;
}
private async Task<string> PostAsync(string url, string bearerToken, string content)
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
HttpResponseMessage response = await httpClient.PostAsync(url, new StringContent(content));
return await response.Content.ReadAsStringAsync();
}
}
私はこの要求を取得応答:
リクエストエラー
エラーステータスコード: 'InternalServerError'
詳細:the documentationを見て、私はこの方法を試してみましたサーバーで要求の処理中にエラーが発生しました。詳細については、サーバーのログを参照してください。
実際のXML応答:
<html version="-//W3C//DTD XHTML 2.0//EN"
xml:lang="en"
xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<HEAD>
<TITLE>Request Error</TITLE>
</HEAD>
<BODY>
<DIV id="content">
<P class="heading1"><B>Error Status Code:</B> 'InternalServerError'</P>
<P><B>Details: </B>The server encountered an error processing the request. Please see the server logs for more details.</P>
<!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
</DIV>
</BODY>
</html>
あなたは何が起こっているか知っていますか?要求をするために必要なことは他にありますか?
私は迷っていますが、私はC#を使ってやろうとしていますが、あなたの答えはコンソールコマンドのようですが、わかりません。おそらく、これらのコマンドの使い方についてもっと詳しく教えてください。私はGetLanguagesForTranslateとC#を使用して翻訳に問題はありませんが、GetLanguageNamesを使用しています。 – Jon
APIの適切な呼び出しを確認するために 'curl'を使う方法を学んでください。あなたの問題はC#とは無関係です。 'curl'を使用してC#を削除して問題を簡素化した場合は、分単位で解決策が見つかるはずです。問題は 'GetLanguageNames'がv2 API呼び出しではないことです。それはv1だけです。エンドポイントが間違っています。 – BSalita
'curl'はこのような問題を見つけるのに最適です。 Microsoftやその他のAPIプロバイダは、それぞれのAPIに対して 'curl'コマンドを表示する必要があります。それは多くの時間を節約します。残念なことにMicrosoft Cognitiveはcurlコマンドを表示しないことがよくありますが、そうしたときに間違っています。ドキュメントに 'curl'コマンドが表示されない場合は、APIが文書化されているように機能しないことはすぐに疑わしいです。 – BSalita