Ich habe die Microsoft Translator-Text-API in Java ausprobiert. p>
Ich konnte die Java-Beispielquelle nicht unerwartet finden, daher werde ich sie als Referenz veröffentlichen.
Sie können es sofort verwenden, wenn Sie den Schlüssel, tokenUrl und transUrl entsprechend Ihrer Umgebung ändern.
Übrigens müssen Sie Ihren eigenen Schlüssel verwenden, der wie folgt lautet.
tokenUrl (Token-API für Authentifizierungs-URL)
https://api.cognitive.microsoft.com/sts/v1.0/issueToken
transUrl (API für Übersetzungs-URL)
https://api.microsofttranslator.com/V2/http.svc/TranslateArray
@Component
public class TranslatorAPI {
@Value("${translation.subscriptionKey}")
private String key;
@Value("${translation.tokenApi.url}")
private String tokenUrl;
@Value("${translation.transApi.url}")
private String transUrl;
/**
*Übersetzen Sie die Zielzeichenfolge ins Englische.
* @Parameterwörter Zielzeichen
* @Übersetzungsergebnis zurückgeben
*/
public String[] translator(String... words) {
return translatorPOSTToEN(words);
}
/**
*Holen Sie sich einen Token.
*/
private String tokenPOST() {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost postMethod = new HttpPost(tokenUrl);
// Header
postMethod.setHeader("Content-Type", "application/json");
postMethod.setHeader("Accept", "application/jwt");
postMethod.setHeader("Ocp-Apim-Subscription-Key", key);
try (CloseableHttpResponse response = httpClient.execute(postMethod)) {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, StandardCharsets.UTF_8);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
*Post an die Übersetzungs-API.
*/
private String[] translatorPOSTToEN(String... words) {
List<String> rtnWords = new ArrayList<String>();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost postMethod = new HttpPost(transUrl);
// header
//Holen Sie sich das Authentifizierungstoken
String token = tokenPOST();
String authKey = "Bearer " + token;
postMethod.setHeader("Content-Type", "application/xml");
postMethod.setHeader("Authorization", authKey);
//Übersetztes Wort
StringBuilder transWords = new StringBuilder();
for (String word : words) {
transWords.append("<string xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>");
transWords.append(word);
transWords.append("</string>");
}
StringBuilder requestSB = new StringBuilder();
requestSB.append("<TranslateArrayRequest>");
requestSB.append("<AppId />");
requestSB.append("<Texts>");
requestSB.append(transWords.toString());
requestSB.append("</Texts>");
//Geben Sie die zu übersetzende Sprache an
requestSB.append("<To>en</To>");
requestSB.append("</TranslateArrayRequest>");
postMethod.setEntity(new StringEntity(requestSB.toString(),
StandardCharsets.UTF_8));
try (CloseableHttpResponse response = httpClient.execute(postMethod)) {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
String res = EntityUtils.toString(entity, StandardCharsets.UTF_8);
InputSource inputSource = new InputSource(new StringReader(res));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(inputSource);
//Sortieren Sie den zu übersetzenden Zeichenkettensatz
Element root = document.getDocumentElement();
NodeList rootChildren = root.getChildNodes();
for (int i = 0; i < rootChildren.getLength(); i++) {
Node node = rootChildren.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String val = element.getElementsByTagName("TranslatedText").item(0).getFirstChild().getNodeValue();
rtnWords.add(val);
}
}
}
}
} catch (ParserConfigurationException | SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return rtnWords.toArray(new String[rtnWords.size()]);
}
}
//Stichprobe
String[] words = tranApi.translator("dies ist ein Stift", "Äpfel sind köstlich");
for (String word : words) {
System.out.println(word);
}
This is a pen.
Apple delicious
Recommended Posts