- Регистрация
- 11.05.2015
- Сообщения
- 3 788
- Благодарностей
- 1 952
- Баллы
- 113
Всем привет, у меня две новости плохая и хорошая.
Возможно, вы уже знаете, что Яндекс приостановил выдачу бесплатных ключей для использования в его сервисе перевода текстов, старые ключи, полученные ранее, будут заблокированы.
с 15 августа 2020 года старая схема использования API Яндекс переводчика не работает, и теперь для работы с переводчиком и другими сервисами Яндекса нужно использовать API Яндекс Облака.
Хорошая новость в том, что в этой статье я расскажу, как можно использовать Яндекс Облако для работы с переводчиком Яндекса. На тестирование сервиса предоставляется грант, средства из которого можно частично использовать для работы с переводчиком. После придется переходить на платный тариф для дальнейшего использования сервисами Яндекса через его АПИ.
Теперь обо всем по порядку
Переходим в Яндекс Облако по ссылке https://cloud.yandex.ru/docs/translate/ и нажимаем кнопку Подключиться
Для входа в аккаунт используйте свою Яндекс почту
Подтверждаете свое согласие с условиями использования, и нажимаете Войти.
Попадаете в консоль управления облаком. В дальнейшем перейти в консоль, вы сможете перейти через одноименную кнопку.
Нажимаете на кнопку Активировать пробный период
Открывается страница с созданием платежного аккаунта.
Заполняете все поля формы своими данными.
Добавляете свою карту
При ошибке добавления карты попробуйте другую. У меня, например карта Альфа-Банка не захотела привязываться, а карта Сбербанка привязалась без проблем.
После добавления карты нажимаете желтую кнопку Активировать, без добавления карты, эта кнопка будет серой и нажатие не сработает.
При успешном создании платежного аккаунта, пробный период будет успешно активирован, информацию о нем и сроках действия грантов и расходах вы всегда сможете по смотреть в разделе Обзор.
Если вы удалите привязанную карту из аккаунта, то аккаунт облака будет заблокирован, а платежный аккаунт приостановлен.
После активации платежного аккаунта возвращаемся на страницу https://cloud.yandex.ru/docs/translate/
И выбираем там раздел Начало работы
Выбираем 2 пункт для получения IAM токена
Откроется страница, на которой будет 2 варианта получения токена, через командную строку или через API. Нам нужен 2 вариант, если хотите, то можете выбрать 1 вариант, но тогда надо будет установить интерфейс для работы по указанной в сообщении ссылке? но зачем что то устанавливать, если можно обойтись без установки.
Переключаемся на 2 вариант (вкладка API) и нажимаем там ссылку для получения OAuth токена
Нажимаем желтую кнопку разрешить
Копируем полученный токен
Возвращаемся на вкладку с информацией о получении IAM токена и выполняем пункт для получения и обмена OAuth токена на IAM токен.
Для удобства получения кода через PowerShell используйте кубик С# из прикрепленного шаблона.
Возвращаемся на страницу Начало работы
Выбираем 3 пункт для получения id папки в нашем облаке. (Рекомендуется для работы использовать Сервисный аккаунт. О том как его настроить, вы можете посмотреть самостоятельно)
Посмотреть идентификатор каталога по умолчанию или создать новый каталог, можно на главной странице консоли управления облаком.
Теперь используем полученные данные для перевода текста.
Не буду нагружать техническими подробностями. Для удобства я подготовил шаблон, в котором нужно будет подставлять токены и текст для перевода, поэтому дальше будет описание этого шаблона, куда вставлять полученные токены и получать перевод текста.
Оба кубика используют методы из общего кода.
Вот и все. Можно вставлять свои данные и использовать переводчик в своих проектах.
Возможно, вы уже знаете, что Яндекс приостановил выдачу бесплатных ключей для использования в его сервисе перевода текстов, старые ключи, полученные ранее, будут заблокированы.
с 15 августа 2020 года старая схема использования API Яндекс переводчика не работает, и теперь для работы с переводчиком и другими сервисами Яндекса нужно использовать API Яндекс Облака.
Хорошая новость в том, что в этой статье я расскажу, как можно использовать Яндекс Облако для работы с переводчиком Яндекса. На тестирование сервиса предоставляется грант, средства из которого можно частично использовать для работы с переводчиком. После придется переходить на платный тариф для дальнейшего использования сервисами Яндекса через его АПИ.
Теперь обо всем по порядку
Переходим в Яндекс Облако по ссылке https://cloud.yandex.ru/docs/translate/ и нажимаем кнопку Подключиться
Для входа в аккаунт используйте свою Яндекс почту
Подтверждаете свое согласие с условиями использования, и нажимаете Войти.
Попадаете в консоль управления облаком. В дальнейшем перейти в консоль, вы сможете перейти через одноименную кнопку.
Нажимаете на кнопку Активировать пробный период
Открывается страница с созданием платежного аккаунта.
Заполняете все поля формы своими данными.
Добавляете свою карту
При ошибке добавления карты попробуйте другую. У меня, например карта Альфа-Банка не захотела привязываться, а карта Сбербанка привязалась без проблем.
После добавления карты нажимаете желтую кнопку Активировать, без добавления карты, эта кнопка будет серой и нажатие не сработает.
При успешном создании платежного аккаунта, пробный период будет успешно активирован, информацию о нем и сроках действия грантов и расходах вы всегда сможете по смотреть в разделе Обзор.
Если вы удалите привязанную карту из аккаунта, то аккаунт облака будет заблокирован, а платежный аккаунт приостановлен.
После активации платежного аккаунта возвращаемся на страницу https://cloud.yandex.ru/docs/translate/
И выбираем там раздел Начало работы
Выбираем 2 пункт для получения IAM токена
Откроется страница, на которой будет 2 варианта получения токена, через командную строку или через API. Нам нужен 2 вариант, если хотите, то можете выбрать 1 вариант, но тогда надо будет установить интерфейс для работы по указанной в сообщении ссылке? но зачем что то устанавливать, если можно обойтись без установки.
Переключаемся на 2 вариант (вкладка API) и нажимаем там ссылку для получения OAuth токена
Нажимаем желтую кнопку разрешить
Копируем полученный токен
Возвращаемся на вкладку с информацией о получении IAM токена и выполняем пункт для получения и обмена OAuth токена на IAM токен.
Для удобства получения кода через PowerShell используйте кубик С# из прикрепленного шаблона.
Я использую стандартный PowerShell из Windows так как для использования этих команд через консоль командной строки CMD нужно, чтобы был установлен curl.
Открываем PowerShell (найти можно через кнопку поиска)
Берем первую строку команды из сообщения и подставляем свой OAuth токен, вставляем полученную команду в PowerShell и нажимаем энтер.
Повторяем копирование и вставку всех строк по одной.
В итоге получаем IAM токен который нужно скопировать.
Этот скопированный токен нам будет нужен при работе с API
Открываем PowerShell (найти можно через кнопку поиска)
Берем первую строку команды из сообщения и подставляем свой OAuth токен, вставляем полученную команду в PowerShell и нажимаем энтер.
Повторяем копирование и вставку всех строк по одной.
В итоге получаем IAM токен который нужно скопировать.
Этот скопированный токен нам будет нужен при работе с API
Возвращаемся на страницу Начало работы
Выбираем 3 пункт для получения id папки в нашем облаке. (Рекомендуется для работы использовать Сервисный аккаунт. О том как его настроить, вы можете посмотреть самостоятельно)
Посмотреть идентификатор каталога по умолчанию или создать новый каталог, можно на главной странице консоли управления облаком.
Название каталога можете изменить на более удобное
Теперь используем полученные данные для перевода текста.
Не буду нагружать техническими подробностями. Для удобства я подготовил шаблон, в котором нужно будет подставлять токены и текст для перевода, поэтому дальше будет описание этого шаблона, куда вставлять полученные токены и получать перевод текста.
Кубик Получение IAM токена:
string OAuth_TOKEN = "Ваш OAuth_TOKEN";
/// <summary>
/// Яндекс OAuth_TOKEN
/// </summary>
ZennoLab.OwnCode.CommonCode.OAuth_TOKEN = OAuth_TOKEN;
// получаем IAM токен
string iam_token = ZennoLab.OwnCode.CommonCode.GetIAM_Token(OAuth_TOKEN);
Кубик С# для перевода текста:
/// <summary>
/// Яндекс IAM_TOKEN
/// </summary>
ZennoLab.OwnCode.CommonCode.IAM_TOKEN = "Ваш IAM Token";
/// <summary>
/// Значение folder_id
/// </summary>
ZennoLab.OwnCode.CommonCode.FolderID = "Ваш id каталога на облаке";
// Язык с которого переводим определяется автоматически
/// <summary>
/// Язык на который переводим
/// </summary>
string langTo = "ru";
// Текст для перевода
string textToTranslate = "Ваш текст для перевода Learning Translate";
project.SendInfoToLog("Переводим текст: " + textToTranslate, true);
try{
// Обращаемся к методу в общем коде, для перевода текста.
string textResult = ZennoLab.OwnCode.CommonCode.GetTranslate(textToTranslate, langTo);
project.SendInfoToLog("Результат перевода: " + textResult, true);
}
catch (Exception ex)
{// Если будет ошибка, выводим ее в лог.
project.SendErrorToLog(ex.Message, true);
}
Содержимое блока Общий код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft.Json;
using System.Net;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace ZennoLab.OwnCode
{
/// <summary>
/// A simple class of the common code
/// </summary>
public class CommonCode
{
/// <summary>
/// Lock this object to mark part of code for single thread execution
/// </summary>
public static object SyncObject = new object();
/// <summary>
/// URL для API
/// </summary>
public static string urlApi = @"https://translate.api.cloud.yandex.net/translate/v2/translate";
/// <summary>
/// Яндекс IAM_TOKEN
/// </summary>
public static string IAM_TOKEN {get; set;}
/// <summary>
/// Яндекс OAuth_TOKEN
/// </summary>
public static string OAuth_TOKEN {get; set;}
/// <summary>
/// Значение folder_id
/// </summary>
public static string FolderID {get; set;}
/// <summary>
/// Переводим текст
/// </summary>
/// <param name="TextIn"></param>
/// <param name="langTo"></param>
/// <param name="langFrom"></param>
/// <returns></returns>
public static string GetTranslate(string textToTranslate, string langTo)
{
if (textToTranslate.Length > 1)
{
textToTranslate = System.Web.HttpUtility.UrlEncode(textToTranslate);
// Формируем json параметры запроса
string json = "{" +
string.Format(@"""folder_id"": ""{0}"",
""texts"": [""{1}""],
""targetLanguageCode"": ""{2}""
", FolderID, textToTranslate, langTo).Trim()
+ "}";
/*
Передайте файл на перевод с помощью метода translate:
$ export IAM_TOKEN=CggaATEVAgA...
$ curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${IAM_TOKEN}" \
-d '@body.json' \
"https://translate.api.cloud.yandex.net/translate/v2/translate"
*/
//var request1 = WebRequest.Create(urlApi);
var request = (HttpWebRequest)WebRequest.Create(urlApi);
request.ContentType = "application/json";
request.Headers["Authorization"] = "Bearer " + IAM_TOKEN;
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(json);
}
// Делаем запрос и получаем ответ сервера
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8-);
Console.WriteLine(reader.ReadToEnd());
string line;
if ((line = reader.ReadLine()) != null)
{
/*
//------- Вариант json ответа-----------------
{
"translations": [
{
"text": "Здравствуй, Мир",
"detectedLanguageCode": "en"
}
]
}
//------- Еще вариант json ответа-----------------
{
"translations": [
{
"text": "Привет",
"detectedLanguageCode": "en"
},
{
"text": "Мир",
"detectedLanguageCode": "en"
}
]
}
*/
// Разбираем ответ JSON
Translation translation = JsonConvert.DeserializeObject<Translation>(line);
//textToTranslate = "";
foreach (string str in translation.text)
{// Формируем результат из всех значений text
textToTranslate += str;
}
}
}
}
return textToTranslate;
}
/// <summary>
/// JSON ответ из примера или из конвертера https://json2csharp.com
/// </summary>
private class Translation
{
public string code { get; set; }
public string lang { get; set; }
public string[] text { get; set; }
}
/// <summary>
/// Получение IAM_Token из OAuth_TOKEN
/// </summary>
/// <param name="OAuth_TOKEN"></param>
/// <returns></returns>
public static string GetIAM_Token(string OAuth_TOKEN)
{
string IAM_Token = string.Empty;
/*
Нужно выполнить команды через PowerShell
$yandexPassportOauthToken = "<OAuth-Token>"
$Body = @{ yandexPassportOauthToken = "$yandexPassportOauthToken" } | ConvertTo-Json -Compress
Invoke-RestMethod -Method 'POST' -Uri 'https://iam.api.cloud.yandex.net/iam/v1/tokens' -Body $Body -ContentType 'Application/json' | Select-Object -ExpandProperty iamToken
*/
string[] arrCommands =
{
string.Format("$yandexPassportOauthToken = \"{0}\"", OAuth_TOKEN),
"$Body = @{ yandexPassportOauthToken = \"$yandexPassportOauthToken\" } | ConvertTo-Json -Compress",
"Invoke-RestMethod -Method 'POST' -Uri 'https://iam.api.cloud.yandex.net/iam/v1/tokens' -Body $Body -ContentType 'Application/json' | Select-Object -ExpandProperty iamToken"
};
Runspace runspace = RunspaceFactory.CreateRunspace();//Формируем пространство повершел для выполнения команд
runspace.Open(); // открытие процесса
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(arrCommands[0]); //добавление 1 строки с командой
pipeline.Commands.AddScript(arrCommands[1]); //добавление 2 строки с командой
pipeline.Commands.AddScript(arrCommands[2]); //добавление 3 строки с командой
pipeline.Commands.Add("Out-String"); // эта команда форматирует вывод. Без нее возвращаются реальные объекты.
Collection<PSObject> results = pipeline.Invoke();// Выполняем все команды
runspace.Close(); // закрытие процесса
// Проверка статуса ответа. Преобразование в строку.
IAM_Token = results[0].BaseObject.ToString().Trim();
return IAM_Token;
}
}
}
Вот и все. Можно вставлять свои данные и использовать переводчик в своих проектах.
- Тема статьи
- Другое
- Номер конкурса статей
- Четырнадцатый конкурс статей
Вложения
-
30,8 КБ Просмотры: 418
-
247,6 КБ Просмотры: 315
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: