Контакты RSS 2.0

Разделы Сайта:

Кубтеле - о компании
Инструменты SEO
FreeBSD
Администрирование
Centos администрирование
Windows администрирование
Программирование для web

Аккаунт

Популярное:

Материалы по web программированию › Перевод текста, используя Google Translate API и PHP, JSON и cURL
Google Translate – это сервис от Google, который Вы можете использовать для перевода текста или HTML с одного языка на другой. Одной из основных фичей этого сервиса является то, что они предлагаются API, что даёт Вам возможность программно переводить текст. В этом уроке я покажу как работать с Google Translate API.

Изначально Google Translate API был доступен только через javascript. Сейчас ситуация изменилась, вторая версия предлагает REST интерфейс, который возвращает переводы в формате JSON.

Чтобы воспользоваться этим API, у Вас должен быть Google API key. Больше информации об этом доступно на Google Translate V2 Developer Guide.

Сейчас в API есть три доступные операции:

- получить список доступных языковых пар (languages)

- перевести текст (translate)

- определить язык, на котором написан текст (detect)

В этой статье я покажу Вам как использовать операцию translate.

Все вызовы API делаются к https://www.googleapis.com/language/translate/v2.

Входные параметры.

Чтобы перевести текст используются следующие параметры:

- key (Ваш Google API key)

- source (язык текста, который переводится, например, en для английского)

- target (язык, на который Вы хотите перевести текст, например, es для испанского)

- q (текст для перевода. Это может быть HTML код, если Вам нужно перевести HTML документ)

Если Вы пропустите параметр source, то API попытается определить входной язык автоматически. Если же Вы знаете, какой язык используется для перевода, укажите его, чтобы не было ошибок (особенно когда переводятся короткие фразы).

Ограничения запросов.

Так как этот API спроектирован так, быть использованным с помощью GET запросов, объёмные документы не могут быть переведены (т.к. для этого типа запроса существует ограничение по количеству символов).

Хорошие новости заключаются в том, что Google позволяет обойти это ограничение, подделав GET запрос на POST запрос. Это достигается, отправляя HTTP заголовок X-HTTP-Method-Override: GET. Я покажу, как это делается в участке кода ниже.

Получение результатов.

Данные возвращаются от API в формате JSON. Вы можете легко декодировать эти данные, используя PHP функцию json_decode(). Как только Вы переконвертируете эти данные в PHP массив, Вы можете обратиться к $arr[‘data’][‘translations’] для чтения переведённого текста.

Замечание: этот элемент является массивом, т.к. есть возможность переводить сразу несколько текстов в одном обращении к API (это можно сделать, добавив параметр q несколько раз). Этот массив будет содержать по одному элементу для каждого переводимого текста.

Перевод, используя LangageTranslator класс.

Следующий код – простой класс, который я создал, чтобы показать, как прост API в использовании. Конечно же, его можно усовершенствовать, как замечено в конце статьи, но и этого определённо достаточно для старта.

Я добавил множество комментариев в код, чтобы объяснить что и как.
class LanguageTranslator
{
    // это адрес API, к которому делаются все запросы
    const ENDPOINT = 'https://www.googleapis.com/language/translate/v2';
 
    // холдер для Вашего API key
    protected $_apiKey;
 
    // конструктор, принимает Google API key единственным параметром
    public function __construct($apiKey)
    {
        $this->_apiKey = $apiKey;
    }
 
    // переводимый текст/HTML хранится в $data. Целевой язык перевода
    // в $target. Также Вы можете указать исходный язык в $source.
    public function translate($data, $target, $source = '')
    {
        // это данные для запроса
        $values = array(
            'key'    => $this->_apiKey,
            'target' => $target,
            'q'      => $data
        );
 
        // добавим $source, если он был указан
        if (strlen($source) > 0) {
            $values['source'] = $source;
        }
 
        // преобразуем массив в строку, 
        // чтобы их можно было использовать с cURL
        $formData = http_build_query($values);
 
        // создадим соединение с API
        $ch = curl_init(self::ENDPOINT);
 
        // просим cURL возвращать ответ, а не выводить его
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
        // запишем данные в тело запроса POST
        curl_setopt($ch, CURLOPT_POSTFIELDS, $formData);
 
        // обмануть Google, использовать POST запрос как GET
        curl_setopt($ch, CURLOPT_HTTPHEADER, 
	                      array('X-HTTP-Method-Override: GET'));
 
        // выполнить HTTP запрос
        $json = curl_exec($ch);
        curl_close($ch);
 
        // декодировать ответ
        $data = json_decode($json, true);
 
        // убедимся в том, что данные корректны
        if (!is_array($data) || !array_key_exists('data', $data)) {
            throw new Exception('Unable to find data key');
        }
 
        // ещё раз убедимся
        if (!array_key_exists('translations', $data['data'])) {
            throw new Exception('Unable to find translations key');
        }

        // и ещё раз
        if (!is_array($data['data']['translations'])) {
            throw new Exception('Expected array for translations');
        }
 
        // пройдёмся в цикле по данным и вернём первый перевод
        // если Вы переводите несколько текстов,
        // код ниже нужно поправить
        foreach ($data['data']['translations'] as $translation) {
            return $translation['translatedText'];
        }
     }
}


Использование класса LanguageTranslator.

Следующий код показывает, как использовать класс. Используйте Ваш API key и текст для перевода. Это пример, который будет читать английский текст из файла, переводить его на немецкий язык, а затем записывать его в файл.
require_once('LanguageTranslator.php');
 
$yourApiKey = '';
 
$sourceData = file_get_contents('/file/to/path.txt');
$source = 'en';
$target = 'de';
 
$translator = new LanguageTranslator($yourApiKey);
 
$targetData = $translator->translate($sourceData, $source, $target);
file_put_contents($targetData, 'file.txt-' . $target);


Дальнейшие действия.

Есть несколько способов улучшить этот код. Посмотрите, можете ли Вы сделать эти улучшения:

- Модифицируйте код так, чтобы можно было переводить несколько текстов в одном вызове API. Ну и конечно возвращайте все переводы, а не только первый как сейчас.

- Измените код так, чтобы он автоматически определял исходный язык текста, если пользователь не указал язык.

- Проверяйте введённые пользователем данные на корректность (делайте валидацию).
скачать dle 10.3фильмы бесплатно
Добавил: admin › 31-12-2014, 11:02
› 0 комментария › печатькатегория
Другие новости по теме
  • Функции обратного вызова в PHP
  • Сокращение URL c Google URL Shortener API
  • Функции в PHP
  • Класс singleton в PHP
  • Как добавить страницу в Инструменты СЕО?

  • Кубтеле 350000, Россия, Краснодарский край, , город Краснодар,улица Айвазовского, д. 94, корп. А
    Продвижение сайтов,Регистрация доменов,Компьютерная системная интеграция
    8(861) 299-02-62, +7(903) 449-666-8