16 class MicrosoftEngine(TranslationEngine): |
16 class MicrosoftEngine(TranslationEngine): |
17 """ |
17 """ |
18 Class implementing the translation engine for the Microsoft |
18 Class implementing the translation engine for the Microsoft |
19 translation service. |
19 translation service. |
20 """ |
20 """ |
21 AccessTokenUrl = \ |
21 AccessTokenUrl = ( |
22 "https://api.cognitive.microsoft.com/sts/v1.0/issueToken" |
22 "https://api.cognitive.microsoft.com/sts/v1.0/issueToken" |
|
23 ) |
23 TranslatorUrl = "https://api.microsofttranslator.com/V2/Http.svc/Translate" |
24 TranslatorUrl = "https://api.microsofttranslator.com/V2/Http.svc/Translate" |
24 TextToSpeechUrl = "https://api.microsofttranslator.com/V2/Http.svc/Speak" |
25 TextToSpeechUrl = "https://api.microsofttranslator.com/V2/Http.svc/Speak" |
25 |
26 |
26 def __init__(self, plugin, parent=None): |
27 def __init__(self, plugin, parent=None): |
27 """ |
28 """ |
100 |
101 |
101 @param requestObject reference to the request object |
102 @param requestObject reference to the request object |
102 (TranslatorRequest) |
103 (TranslatorRequest) |
103 @return access token (string) |
104 @return access token (string) |
104 """ |
105 """ |
105 if self.plugin.getPreferences("MsAuthTokenExpire") > \ |
106 if ( |
106 QDateTime.currentDateTime(): |
107 self.plugin.getPreferences("MsAuthTokenExpire") > |
|
108 QDateTime.currentDateTime() |
|
109 ): |
107 return self.plugin.getPreferences("MsAuthToken") |
110 return self.plugin.getPreferences("MsAuthToken") |
108 |
111 |
109 # Token expired, get a new one |
112 # Token expired, get a new one |
110 subscriptionKey, valid = self.__getClientDataAzure() |
113 subscriptionKey, valid = self.__getClientDataAzure() |
111 if not valid: |
114 if not valid: |
156 text) |
159 text) |
157 url = QUrl(self.TranslatorUrl + params) |
160 url = QUrl(self.TranslatorUrl + params) |
158 response, ok = requestObject.get(url, extraHeaders=[authHeader]) |
161 response, ok = requestObject.get(url, extraHeaders=[authHeader]) |
159 if ok: |
162 if ok: |
160 response = str(response, "utf-8", "replace").strip() |
163 response = str(response, "utf-8", "replace").strip() |
161 if response.startswith("<string") and \ |
164 if ( |
162 response.endswith("</string>"): |
165 response.startswith("<string") and |
|
166 response.endswith("</string>") |
|
167 ): |
163 result = response.split(">", 1)[1].rsplit("<", 1)[0] |
168 result = response.split(">", 1)[1].rsplit("<", 1)[0] |
164 else: |
169 else: |
165 result = self.tr("No translation available.") |
170 result = self.tr("No translation available.") |
166 ok = False |
171 ok = False |
167 return result, ok |
172 return result, ok |