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

Тема в разделе "PHP", создана пользователем OliverGreen, 28 авг 2013.

Модераторы: latteo
  1. OliverGreen

    OliverGreen Постоялец

    Регистр.:
    19 сен 2008
    Сообщения:
    106
    Симпатии:
    12
    Здравствуйте!
    Нужен скрипт для перевода текста путем передачи ему параметра, который он вернет в переведенном виде.
    Примитив типа
    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. Опять таки знаний какие строки заменить для работоспособности с новым АПИ не хватает.

    Просьба знающих подсказать как корректно обновить скрипт для работы с новым АПИ и заставить его работать.
     
    Последнее редактирование: 28 авг 2013
  2. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    у меня так вполне себе получилось:
    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 перекодировать надо..
     
    free-back и OliverGreen нравится это.