Pull to refresh

Консольный 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


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



Конечно же, можно сделать этот скрипт еще лучше. Вот только я старался сделать его максимально простым.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.