Обновление yandex translate api в скрипте

OliverGreen

Постоялец
Регистрация
19 Сен 2008
Сообщения
124
Реакции
19
Здравствуйте!
Нужен скрипт для перевода текста путем передачи ему параметра, который он вернет в переведенном виде.
Примитив типа
PHP:
<?php

$flag = 'en-ru';
$key = 'my.api.code';

if(isset($_POST["data"]) && isset($_POST["data"])){
    $xml = simplexml_load_file('https://translate.yandex.net/api/v1.5/tr/translate?key='.$key.'&lang='.$flag.'&text='.$_POST["data"]);
//    $xml = simplexml_load_file('https://translate.yandex.net/api/v1.5/tr/translate?key='.$key.'&lang='.$flag.'&text='.iconv("cp1251", "utf-8", $_POST["data"]));
    $code = $xml["code"];
    if($code==200){
        echo $xml->text;
    }else if($code==401){
        echo 'Ключ API невалиден.';
    }else if($code==402){
        echo 'Ключ API заблокирован.';
    }else if($code==403){
        echo 'Превышено суточное ограничение на количество запросов.';
    }else if($code==404){
        echo 'Превышено суточное ограничение на объем переведенного текста.';
    }else if($code==413){
        echo 'Превышен максимальный размер текста.';
    }else if($code==422){
        echo 'Текст не может быть переведен.';
    }else if($code==501){
        echo 'Заданное направление перевода не поддерживается.';
    }else{
        echo 'Неизвестная ошибка.';
    }
}else{
    echo 'Недостаточно параметров!';
}

?>
возвращает исковерканный кодировками текст (хотя если данные отправлять через форму то всё нормально), да и на корню режет все теги форматирования, а они нужны. А на что-то совершеннее знаний не хватает.
Нашел вроде нормальный скрипт/-ы, но для старого АПИ 1.0. Опять таки знаний какие строки заменить для работоспособности с новым АПИ не хватает.

Просьба знающих подсказать как корректно обновить скрипт для работы с новым АПИ и заставить его работать.
 
Последнее редактирование:
у меня так вполне себе получилось:
PHP:
$lang = 'en-ru';
$key = 'my_valid_key';

$_POST["data"] = 'some text';

$query_string = array(
    'key' => $key,
    'lang' => $lang,
    'text' => $_POST["data"]
);

$xml = simplexml_load_file('https://translate.yandex.net/api/v1.5/tr/translate?' . http_build_query( $query_string ) );

switch( (string)$xml->attributes()->code ){

    case 200:
        echo (string)$xml->text;
        break;

    case 401:
        echo 'Ключ API невалиден.';
        break;

    case 402:
        echo 'Ключ API заблокирован.';
        break;

    case 403:
        echo 'Превышено суточное ограничение на количество запросов (с учетом вызовов метода detect).';
        break;

    case 404:
        echo 'Превышено суточное ограничение на объем переведенного текста (с учетом вызовов метода detect).';
        break;

    case 413:
        echo 'Превышен максимальный размер текста.';
        break;

    case 422:
        echo 'Текст не может быть переведен.';
        break;

    case 501:
        echo 'Заданное направление перевода не поддерживается.';
        break;

    default:
        echo 'Kernel panic!.. О_o';
        break;
}

зы.. если используется cp1251, то, соответственно, post и (string)$xml->text перекодировать надо..
 
Назад
Сверху