Перевод текста через гугл, как это делается?

Тема в разделе "Как сделать...", создана пользователем MaxLord, 7 дек 2007.

Статус темы:
Закрыта.
  1. MaxLord

    MaxLord

    Регистр.:
    17 фев 2007
    Сообщения:
    325
    Симпатии:
    49
    Как делают перевод текста яерез языковые инструменты гугл. Несколько вопросов -
    1. Вообще сам механизм, а то всё чаще и чаще вижу всякие моды - перевод контента типо на 11 языков... (Желательно сразу пример в коде).
    2. Существуют ли какие либо ограничения, и как их можно обойти?
    3. Бедет ли отдача трафом если весь контент переводить?
    :) Спасибо, очень жду ответов...
    Извините - вторая тема за 10 минут, но уж очень интересует.
     
  2. Zeratul

    Zeratul Создатель

    Регистр.:
    17 мар 2006
    Сообщения:
    1.322
    Симпатии:
    3.855
    Такс.. сам механизм.. ;)
    Сделал массив с возможными языками, чтобы потом можно было просто добавить интерфейс.
    PHP:
    $trans = array (
            
    'ar|en'            =>    'Arabic to English',
            
    'zh|en'            =>    'Chinese to English',
            
    'zh-CN|zh-TW'    =>    'Chinese (Simplified to Traditional)',
            
    'zh-TW|zh-CN'    =>    'Chinese (Traditional to Simplified)',
            
    'nl|en'            =>    'Dutch to English',
            
    'en|ar'            =>    'English to Arabic',
            
    'en|zh-CN'        =>    'English to Chinese (Simplified)',
            
    'en|zh-TW'        =>    'English to Chinese (Traditional)',
            
    'en|nl'            =>    'English to Dutch',
            
    'en|fr'            =>    'English to French',
            
    'en|de'            =>    'English to German',
            
    'en|el'            =>    'English to Greek',
            
    'en|it'            =>    'English to Italian',
            
    'en|ja'            =>    'English to Japanese',
            
    'en|ko'            =>    'English to Korean',
            
    'en|pt'            =>    'English to Portuguese',
            
    'en|ru'            =>    'English to Russian',
            
    'en|es'            =>    'English to Spanish',
            
    'fr|en'            =>    'French to English',
            
    'fr|de'            =>    'French to German',
            
    'de|en'            =>    'German to English',
            
    'de|fr'            =>    'German to French',
            
    'el|en'            =>    'Greek to English',
            
    'it|en'            =>    'Italian to English',
            
    'ja|en'            =>    'Japanese to English',
            
    'ko|en'            =>    'Korean to English',
            
    'pt|en'            =>    'Portuguese to English',
            
    'ru|en'            =>    'Russian to English',
            
    'es|en'            =>    'Spanish to English'
        
    );

    Идея думаю должна стать понятна:
    1. Берем текст..
    2. Выбираем верное направление перевода..
    3. Отправляем запрос на переводчик гугла ;)
    4. Регуляркой выдираем переведённый текст.

    PHP:
    <?php
        $url 
    'http://translate.google.com/translate_t';
        
        
    $data = array (
            
    'hl'        =>    'en',
            
    'ie'        =>    'UTF8',
            
    'text'        =>    'Hello World',
            
    'langpair'    =>    'en|ru'
        
    );
        
        
    $content curl($urlfalse$data);
        
        
    preg_match('/id=suggestion>(.*)<\/te/isU'$content$matches);
            
        print 
    $matches[1];
        
        
        
    /* cURL */
        
    function curl ($url$proxy$data)
        {
            
    $tmp curl_init();
            
    $useragent UserAgent ();
            
            
    $headers = array();
            
    $headers['Accept'] = 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
            
    $headers['Accept-Language'] = 'en-us;q=0.5,en;q=0.3';
            
    $headers['Accept-Encoding'] = 'gzip,deflate';
            
    $headers['Accept-Charset'] = 'utf-8;q=0.7,*;q=0.7';
            
            if (
    $proxy != false# Юзаем прокси?
            
    {
                
    curl_setopt($tmpCURLOPT_PROXY$proxy);
            }
            
            if (isset(
    $data)&&sizeof($data)>0
            {
                
    $postdata = array(); 
                
                foreach (
    $data as $key    =>    $value
                { 
                    
    $postdata[]=$key.'='.urlencode($value);
                }
                
    $postdata implode('&',$postdata); 
                
                
    curl_setopt($tmpCURLOPT_POSTtrue); # POST?
                
    curl_setopt($tmpCURLOPT_POSTFIELDS$postdata);
            }
            
            
    curl_setopt($tmpCURLOPT_REFERER'http://translate.google.com/translate_t');
            
    curl_setopt($tmpCURLOPT_USERAGENT$useragent);
            
    curl_setopt($tmpCURLOPT_URLstr_replace('&amp;','&',$url));
            
    curl_setopt($tmpCURLOPT_HEADER0);
            
    curl_setopt($tmpCURLOPT_HTTPHEADER$headers);
            
    curl_setopt($tmpCURLOPT_FOLLOWLOCATION,1);
            
    curl_setopt($tmpCURLOPT_RETURNTRANSFER1);
            
    curl_setopt($tmpCURLOPT_TIMEOUT30);
            
    curl_setopt($tmpCURLOPT_SSL_VERIFYPEERfalse);
            
    curl_setopt($tmpCURLOPT_SSL_VERIFYHOST,  2);
                        
            
    $result = @curl_exec($tmp);
            
            if (!
    $result)
            {
                
    curl_close($tmp);
                return 
    false;
            }
            
            
    $result preg_replace('/\n/m'''$result); # Все в одну строку.
            
            
    curl_close($tmp);

            return 
    $result;
        }

        function 
    UserAgent ()
        {
            
    $browsers = array (
                
    'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Avant Browser; .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.10',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MRA 4.8 (build 01709); Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.54',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MAXTHON 2.0)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 1.1.4322; MAXTHON 2.0)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.7 (build 01670); .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.7 (build 01670); InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709))',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); Maxthon; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; MRA 4.8 (build 01709); .NET CLR 1.1.4322; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.1.4322)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; Avant Browser; InfoPath.2)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; MyIE2; .NET CLR 1.0.3705; .NET CLR 2.0.50727; InfoPath.2)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.6 (build 01425); InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.8 (build 01709))',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.8 (build 01709); .NET CLR 1.1.4322; InfoPath.1)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.8 (build 01709); Avant Browser)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.9 (build 01863); .NET CLR 2.0.50727)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.1.4322; MEGAUPLOAD 1.0)',
                
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 1.1.4322)',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; bg; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4',
                
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7',
                
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060313 Fedora/1.5.0.1-9 Firefox/1.5.0.1 pango-text',
                
    'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.8) Gecko/20060112 ASPLinux/1.5-1.2am Firefox/1.5',
                
    'Opera/8.54 (Windows NT 5.1; U; en)',
                
    'Opera/9.00 (Windows NT 5.1; U; ru)',
                
    'Opera/9.01 (Windows NT 5.1; U; ru)',
                
    'Opera/9.02 (Windows NT 5.0; U; ru)',
                
    'Opera/9.02 (Windows NT 5.1; U; ru)',
                
    'Opera/9.02 (Windows NT 5.2; U; en)',
                
    'Opera/9.10 (Windows NT 5.1; U; ru)',
                
    'Opera/9.20 (Windows NT 5.1; U; en)',
                
    'Opera/9.20 (Windows NT 5.1; U; ru)',
                
    'Opera/9.21 (Windows NT 5.1; U; ru)',
            );
            
            return 
    $browsers[array_rand($browsers)];
        }
    ?>
    2 - Про ограничения незнаю. То что набровал сейчас.
    Но если они есть, обход - прокси. ;)

    3 - Смотря для чего нужен такой контент, и какой нужен траф. ;)
     
  3. MaxLord

    MaxLord

    Регистр.:
    17 фев 2007
    Сообщения:
    325
    Симпатии:
    49
    вау! Супер - работает Ы))) Это сразу можно в готовые решения класть.... хм.... и ещё вопрос - насколько php медленнее десктопных приложений? Ну хотябы просто при сохранении большого кол-ва текстовых файлов...
     
  4. Zeratul

    Zeratul Создатель

    Регистр.:
    17 мар 2006
    Сообщения:
    1.322
    Симпатии:
    3.855
    Все зависит от того что ты подразумеваешь под десктопным приложением. :-]

    Вообще - php не заточен под работу с большими объемами данных. И если размер данных считается не в килобайтах, а мегабайтах, то php в разы медленнее компиллируемых языков(и некоторых интерпретируемых(перл)..
     
  5. MaxLord

    MaxLord

    Регистр.:
    17 фев 2007
    Сообщения:
    325
    Симпатии:
    49
    Хм... ладно... хочу такую штуку хочу попробовать - сгенерить 1 000 000 страниц... гдето по 2-6 кб каждая... чисто через переводчик - переводить текст во всех возможных направлениях на все языки и со всех языков... а потом посмотреть что получится... это гдето 2-6 гб страничек...
     
  6. MaxLord

    MaxLord

    Регистр.:
    17 фев 2007
    Сообщения:
    325
    Симпатии:
    49
    ну.... как я и говорил - сразу заблочили... там даже 20 запросов не стояло... хех... а где можно набрать хороших проксей? для начала желательно нахаляву - ну просто попробовать....
     
  7. Zeratul

    Zeratul Создатель

    Регистр.:
    17 мар 2006
    Сообщения:
    1.322
    Симпатии:
    3.855
    Эт уже выходит за рамки данного раздела. Прокси - уже к программингу не относится.. тема закрыта.
     
Статус темы:
Закрыта.