Потребовался мне для одного интересного проекта 1С:Переводчик. Все бы хорошо, конфигурация сложная, функционал достойный.
Но вот незадача: никак не удавалось использовать Яндекс.Переводчик в конфигурации.
На яндекс.Облаке зарегистрировала платежный аккаунт, получила пробный доступ к Переводчику, создала сервисный профиль, создала в консоли API-ключ.
Пытаюсь вставить API-ключ в поле формы и проверить соединение. Но мне выдает: не удается соединиться.
Полезла в конфигуратор: обработчик кнопки и далее по стеку вызовов. И вот незадача, код написан на ... английском языке. Но кого это остановит ))
Короче, после 10 минут дебага строка, где валится логика, найдена. И понимаю, что код для интеграции с яндекс переводчиком - устарел. Надо немного переписать.
Во-первых, строка обращения к REST API - переводчика устаревшая. Нахожу новую. Ну и соответственно, формат обращения к сервису, изменился. Нужно ключ авторизации указывать в header (в заголовках), а тело - JSON.
В postman немного поколдовала с параметрами, чтобы точно понимать, формат обмена и получить заветный код ответа 200. Вот доработки с сохраненным старым кодом. Извините, вставки на русском.
Function TranslateYandex(TextToTranslate, SourceLanguageCode, TargetLanguageCode, APIKey) Export
//ServiceURL = "https://translate.yandex.net/api/v1.5/tr.json/translate";
ServiceURL = "https://translate.api.cloud.yandex.net/translate/v2/translate";
URLStructure = GetFilesFromInternetClientServer.SplitURL(ServiceURL);
//Content = "?key=" + EncodeString(APIKey, StringEncodingMethod.URLEncoding, "UTF-8") +
// "&text=" + EncodeString(TextToTranslate, StringEncodingMethod.URLEncoding, "UTF-8");
//HTTPRequest = New HTTPRequest(URLStructure.PathToFileAtServer + "&lang="
// + EncodeString(SourceLanguageCode, StringEncodingMethod.URLEncoding, "UTF-8") + "-"
// + EncodeString(TargetLanguageCode, StringEncodingMethod.URLEncoding, "UTF-8"), Headers);
//HTTPRequest.SetBodyFromString(Content, "UTF-8");
Headers = New Map;
//Headers.Insert("Content-Type", "application/x-www-form-urlencoded");
Headers.Insert("Content-Type", "application/json");
Headers.Insert("Authorization", ("Api-Key " + APIKey));
Данные = Новый Структура();
Данные.Вставить("sourceLanguageCode", SourceLanguageCode);
Данные.Вставить("targetLanguageCode", TargetLanguageCode);
Данные.Вставить("format", "PLAIN_TEXT");
Строки = Новый Массив;
Строки.Add(TextToTranslate);
Данные.Вставить("texts", Строки);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
ТелоЗапроса = ЗаписьJSON.Закрыть();
Headers.Insert("Content-Length", StrLen(ТелоЗапроса));
HTTPRequest = New HTTPRequest(URLStructure.PathToFileAtServer, Headers);
HTTPRequest.SetBodyFromString(ТелоЗапроса, "UTF-8");
SSL = New OpenSSLSecureConnection();//New WindowsClientCertificate(), New WindowsCertificationAuthorityCertificates);
Connection = New HTTPConnection(URLStructure.ServerName, , , , , 180, SSL);
HTTPResponse = Connection.Post(HTTPRequest);
Result = "";
Try
ResultJSON = HTTPResponse.GetBodyAsString("UTF-8");
JSONReader = New JSONReader;
JSONReader.SetString(ResultJSON);
AuthTokenStructure = ReadJSON(JSONReader);
JSONReader.Close();
Для Каждого Эл Из AuthTokenStructure.translations Цикл
Result = Result + Эл.text + Символы.ПС;
КонецЦикла;
Except
WriteLogEvent(NStr("en = 'Translation service'; ru = 'Сервис переводов'", Metadata.DefaultLanguage.LanguageCode), EventLogLevel.Error,,,
StringFunctionsClientServer.SubstituteParametersInString(NStr("en = 'Translation resonse:
|%1'; ru = 'Ответ на перевод:
|%1'", Metadata.DefaultLanguage.LanguageCode), ResultJSON));
EndTry;
Return Result;
EndFunction
Лицензия
Продукт "1С:Переводчик" является бесплатной конфигурацией, предназначенной для автоматизации перевода и поставляется "как есть".