четвер, 12 лютого 2009 р.

Mechanize + Google Translate

Google Translate
require 'rubygems'                                                                                           
require 'mechanize'                                                                                          
$KCODE = 'utf-8'                                                                                             

langs = {'auto' => 0,'sq' => 1,'ar' => 2,'bg' => 3,'ca' => 4,'zh-CN' => 5,'hr' => 6,'cs' => 7,
'da' => 8,'nl' => 9,'en' => 10,'et' => 11,'tl' => 12,'fi' => 13,'fr' =>14,'gl' => 15,
'de' => 16,'el' => 17,'iw' => 18,'hi' => 19,'hu' => 20,'id' => 21,'it' => 22,'ja' => 23,
'ko' => 24,'lv' => 25,'lt' => 26,'mt' => 27,'no' => 28,'pl' => 29,'pt' => 30,'ro' => 31,
'ru' => 32,'sr' => 33,'sk' => 34,'sl' => 35,'es' => 36,'sv' => 37,'th' => 38,'tr' => 39,
'uk' => 40,'vi' => 41}                                                                  

to = langs['en']
from = langs['uk']
text = ARGV[0] || "Привіт!"
# Зверніть увагу, якщо замість тексту ввести посилання до веб-сторінки (наприклад http://example.com)
# перекладач буде намагатися перекласти саму стоорінку, а не текст.                                  

a = WWW::Mechanize.new {|agent|
agent.user_agent_alias = 'Linux Konqueror'
#agent.follow_meta_refresh = true
}

a.get('http://translate.google.com/translate_t') do |home_page|
translated_page = home_page.form_with(:name => 'text_form') do |form|
to_lang = form.field_with(:name => 'tl')
# lang - список доступних мов формувався приблизно за таким принципом
# to_lang.options.each_with_index{|o, i| print "#{o} => #{i}, "}
source_lang = form.field_with(:name => 'sl')
text_f = form.field_with(:name => 'text')
source_lang.options[from].tick
to_lang.options[to].tick
text_f.value = text
end.submit
tr_text = translated_page.form_with(:action => "/translate_suggestion").field_with(:name => 'gtrans').value
puts tr_text
end


$ ruby transtale_t.rb "З'їж іще цих м'яких французьких булочок"
Eat more of these soft French rolls

2 коментарі:

Волошин Руслан сказав...

Интересный примерчик, думаю если собрать полный список фич которые реализованы на механизе получится интересный каталог скриптов, возможно даже на заказ писать их, по задачи людей.

Паштет сказав...

Я тоже реализовал переводчик на Mechanize, только использовал 3 сервера для перевода:
translate.meta.ua
translate.google.com
pereklad.online.ua

Пост на Хабре