Как стать автором
Поиск
Написать публикацию
Обновить

Консольный Google переводчик на PHP

Привет Хабра-скриптер.

В поисках по-настоящему удобного переводчика, решение написать свой, думаю, никого не удивит.

Для начала, определим функции, которые нам понадобятся.

1. get_with_curl — с этой все понятно: мы ей $url, а она нам $response от сервера:

function get_with_curl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        return curl_error($ch);
    } else {
        curl_close($ch);
        return $response;
    }
}


2. cleanup_response — кто бы мог подумать, что Google будет отдавать невалидный json. Сплошь и рядом какие-то левые запятые. Эту неприятную неожиданность приходится исправлять регулярками. Пока хватает вот таких вот:

function cleanup_response($response)
{
    $response = preg_replace('/,+/', ',', $response);
    $response = preg_replace('/\[,/', '[', $response);
    return $response;
}


3. print_line — вот с ней пришлось повозиться. Не знаю как в *nix, а вот чтоб сделать echo из PHP скрипта в консоль windows, нужно гуглить и подбирать кодировки часа два. (Не забудьте установить в качестве консольного шрифта какой-нибудь TrueType, например Lucida Console):

function print_line($line)
{
    echo iconv("utf-8", "cp866", $line) . PHP_EOL;
}
 


4. Параметры, передаваемые в API. Вот здесь есть где разогнаться для расширения скрипта. Меня же конкретно интересует перевод с английского на русский. Ну и еще синонимы (для общего развития):

$params = [
    "client" => "t",
    "sl" => "en", // исходный язык
    "tl" => "ru", // язык, на который нужно перевести
    "hl" => "ru", // язык сообщений от API
    "dt" => "bd", // получать синонимы
    "q" => $term,
];


Ссылка на весь скрипт

Еще важно задать alias для запуска скрипта в консоли (чтоб каждый раз не вводить весь путь к скрипту)
cd ~
echo "alias pt='php /<путь к скрипту>/translate.php'" >> .bashrc


Небольшая демонстрация работы скрипта:



Конечно же, можно сделать этот скрипт еще лучше. Вот только я старался сделать его максимально простым.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.