Навчимося роботі з API на мові програмування C #. У цьому уроці ми напишемо програму в Visual Studio на Windows Forms, яка буде перекладати текст з російської мови на англійську і назад за допомогою веб-запитів до API Яндекс Перекладача. Також можна завантажити исходник, розробленої програми.
Що таке API?
API (скорочення від англійського Application Programming Interface) - це інтерфейс програмування додатків. Інтернет-сервіси, бібліотеки, операційна система і ін. Надають розробникам інтерфейси для взаємодії зі своїми наборами готових класів, методів і даних. В результаті цього ми можемо в своїх додатках використовувати функції інших інтернет-сервісів.
Чому Яндекс, а не Google?
Яндекс Перекладач надає безкоштовне API, а в Google Translate - воно платне: 20 $ за кожен мільйон перекладаються символів.
Варто сказати, що є демо період. Так що якщо цікавитеся, то можливість спробувати є.
Отримання API-ключа
Насамперед нам необхідно отримати ключ. який дозволить працювати з API Яндекс Перекладача. В інших сервісах ключ може називатися токеном доступу.
Потім ключ буде успішно створений:
Скопіюйте його собі і збережіть, потім він нам знадобиться. Нікому не кажіть свій ключ. Буде погано, якщо хтось ним скористається. Якщо все-таки це сталося - є можливість його заблокувати, а потім отримати новий.
На безкоштовний ключ, який ми тільки що отримали, існують обмеження Яндекса (далі цитата з Правил користування) "на обсяг тексту, що перекладається - в розмірі до 1 000 000 символів на добу, але не більше 10 000 000 символів місяць". Якщо потрібно більше - то для цього існують платні тарифи на API.
Проектування інтерфейсу програми
На початку давайте домовимося про направлення перекладу: програма буде виконувати переклад з російської мови на англійську і назад.
Створіть в Visual Studio новий проект Windows Forms на мові програмування C #.
Як і в класичному інтерфейсі перекладача, знайомого кожному з нас, нам знадобиться: два текстових поля (TextBox) і кнопка (Button) "Перевести". Крім того, помістимо на форму елемент управління GroupBox і в нього додамо два перемикача RadioButton - тим самим ми забезпечимо їх узгоджену роботу (обраним завжди залишається тільки один). Ось, що повинне вийти:
Розмір шрифту ми встановили рівним 11 пунктів. В контролі TextBox параметр Multiline зробили рівним true - це дозволить виконувати в текстом поле перенесення рядка.
Створення інтерфейсу програми для роботи через API завершено.
написання коду
Створимо клас, який буде виконувати роботу з Яндекс API Перекладача за допомогою web-запитів. Назвемо клас YandexTranslator.
Клас містить єдиний метод public string Translate (string s, string lang). Метод приймає в качетве аргементов: рядок s - вихідний текст для перекладу, рядок lang - напрямок перекладу (наприклад, ru-en - російсько-англійський). Повертає метод рядок з переведеним текстом.
Код класу YandexTranslator:
Написання програми для роботи з API Яндекс Перекладача на Windows Forms і мовою C # завершено!
Завантажити исходник програми або перейти до головного сховища на GitHub:
Структура web-запиту до API
Запит до API перекладача містить ряд обов'язкових параметрів - це: key =
Запит до Яндекс API повертає відповідь у вигляді структури JSON.
Повна інформація про запити до API Яндекс Перекладача, їх параметрах і відповідях сервера є в офіційній документації.
десеріалізацію JSON
JSON можна десеріалізовать (розпарсити), наприклад, за допомогою класів з бібліотеки Newtonsoft.Json на C # (в прикладі програми з даної статті так і зроблено). Бібліотеку ви можете завантажити і підключити до проекту за допомогою системи управління пакетами NuGet в Visual Studio. Для цього на вирішенні натисніть правою кнопкою миші і виберіть "Управління пакетами NuGet для вирішення ...":
Потім в рядку пошуку введіть ім'я бібліотеки "Newtonsoft.Json" і з результатів пошуку встановіть компонент Json.NET.
Також в коді потрібно за допомогою директиви using підключити відповідний простір імен.
Привіт, можливо ви допоможете або підкажіть в який бік рити. У випадках, коли перекладаю в російської на англійську приходить помилка 400 від сервера Яндекса.
Як можна виправити?
На Java застосовуємо URLEncoder.encode (text, "UTF-8"), а ось на C #?
Можливо текст містить неприпустимі символи. Або на Java все нормально, проблеми з C #? Текст великого розміру переводите?
Я намагаюся перевести "Привіт", справа в тому що в Вашому коді немає приведення кодування, коли Ви переводите російські символи, вони не підтримуються.
Тому треба додати Uncoder.
Це ж саме мені відповіли на підтримку Яндекса
Щоб поміняти кодування спробуйте використовувати вираз:
Де s - це потрібний рядок.
Замість Unicode можна також вибирати: ASCII, UTF32, UTF7, UTF8 та Default.
а чому при скопійованому тексті будь-якої довжини і переведення його відбувається помилка 400 (An unhandled exception of type 'System.Net.WebException' occurred in System.dll
Additional information: Віддалений сервер повернув помилку: (400) Неприпустимий запит.)
Швидше за все це відбувається через те, що перекладається текст містить неприпустимі символи.
Спасибі за відмінний приклад.
По всій видимості, це єдине повністю робочий рішення з обробкою JSON на C #, яке можна взяти за основу для вивчення.