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

Статус
В этой теме нельзя размещать новые ответы.

MaxLord

Профессор
Регистрация
17 Фев 2007
Сообщения
325
Реакции
49
Как делают перевод текста яерез языковые инструменты гугл. Несколько вопросов -
1. Вообще сам механизм, а то всё чаще и чаще вижу всякие моды - перевод контента типо на 11 языков... (Желательно сразу пример в коде).
2. Существуют ли какие либо ограничения, и как их можно обойти?
3. Бедет ли отдача трафом если весь контент переводить?
:) Спасибо, очень жду ответов...
Извините - вторая тема за 10 минут, но уж очень интересует.
 
Такс.. сам механизм.. ;)
Сделал массив с возможными языками, чтобы потом можно было просто добавить интерфейс.
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($url, false, $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($tmp, CURLOPT_PROXY, $proxy);
		}
		
		if (isset($data)&&sizeof($data)>0) 
		{
			$postdata = array(); 
			
			foreach ($data as $key	=>	$value) 
			{ 
				$postdata[]=$key.'='.urlencode($value);
			}
			$postdata = implode('&',$postdata); 
			
			curl_setopt($tmp, CURLOPT_POST, true); # POST?
			curl_setopt($tmp, CURLOPT_POSTFIELDS, $postdata);
		}
		
		curl_setopt($tmp, CURLOPT_REFERER, 'http://translate.google.com/translate_t');
		curl_setopt($tmp, CURLOPT_USERAGENT, $useragent);
		curl_setopt($tmp, CURLOPT_URL, str_replace('&amp;','&',$url));
		curl_setopt($tmp, CURLOPT_HEADER, 0);
		curl_setopt($tmp, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($tmp, CURLOPT_FOLLOWLOCATION,1);
		curl_setopt($tmp, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($tmp, CURLOPT_TIMEOUT, 30);
		curl_setopt($tmp, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($tmp, CURLOPT_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 - Смотря для чего нужен такой контент, и какой нужен траф. ;)
 
вау! Супер - работает Ы))) Это сразу можно в готовые решения класть.... хм.... и ещё вопрос - насколько php медленнее десктопных приложений? Ну хотябы просто при сохранении большого кол-ва текстовых файлов...
 
Все зависит от того что ты подразумеваешь под десктопным приложением. :-]

Вообще - php не заточен под работу с большими объемами данных. И если размер данных считается не в килобайтах, а мегабайтах, то php в разы медленнее компиллируемых языков(и некоторых интерпретируемых(перл)..
 
Хм... ладно... хочу такую штуку хочу попробовать - сгенерить 1 000 000 страниц... гдето по 2-6 кб каждая... чисто через переводчик - переводить текст во всех возможных направлениях на все языки и со всех языков... а потом посмотреть что получится... это гдето 2-6 гб страничек...
 
ну.... как я и говорил - сразу заблочили... там даже 20 запросов не стояло... хех... а где можно набрать хороших проксей? для начала желательно нахаляву - ну просто попробовать....
 
ну.... как я и говорил - сразу заблочили... там даже 20 запросов не стояло... хех... а где можно набрать хороших проксей? для начала желательно нахаляву - ну просто попробовать....
Эт уже выходит за рамки данного раздела. Прокси - уже к программингу не относится.. тема закрыта.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху