Autor
|
Tema: RAE Search, soft [PERL] (Leído 2,838 veces)
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Hola, aquí les dejo este pequeño programita que hice para buscar entradas en la Real Academia Española, le puse interfaz gráfica con Gtk2: Aquí está el código: #!/usr/bin/perl use warnings; use strict; use LWP::Simple; use Gtk2 '-init'; use constant TRUE => 1; use constant FALSE => 0; binmode STDOUT, ":encoding(UTF-8)"; sub raeSearch() { my $rae = get("http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$_[0]"); my $resultado; while ($rae =~ m/name="[\d_]+"> (.*?) <\/p/smgix) { my $desc = $1; # Quitar las marcas HTML $desc =~ s/<.*?>//gsm; # Quitar los espacios a los lados $desc =~ s/^\s+//sm; $desc =~ s/\s+$//sm; # Quitar espacios excesivos $desc =~ s/\s+/ /gsm; $resultado .= "$desc\n"; } } # Propiedades de ventana: my $window = Gtk2::Window->new(); $window->set_title("Rae Search"); $window->set_border_width(3); $window->signal_connect(destroy => sub{Gtk2->main_quit}); $window->set_auto_startup_notification(TRUE); $window->set_decorated(TRUE); $window->set_default_icon_from_file("camel.ico"); $window->move(0, 0); $window->resize(700, 100); $window->set_resizable(TRUE); # Frame: my $frame = Gtk2::Frame->new("Entrada"); # VBox: my $vbox = Gtk2::VBox->new(FALSE, 10); $vbox->pack_start($frame, TRUE, TRUE, 0); # HBox: my $hbox = Gtk2::HBox->new(FALSE, 6); # Entry: my $dir_entry = Gtk2::Entry->new_with_max_length(30); $dir_entry->set_text("encono"); $dir_entry->set_activates_default(FALSE); $dir_entry->set_position(100); # Button: my $button = Gtk2::Button->new("_Buscar"); $button->set_focus_on_click(TRUE); my $rae; # TextView : my $textview = Gtk2::TextView->new(); $textview->set_border_window_size('top', 1); my $buffer = $textview->get_buffer; $button->signal_connect(clicked => sub { $buffer->set_text(&raeSearch($dir_entry->get_text)); } ); # Scroll Window : my $scroll = Gtk2::ScrolledWindow->new(); $scroll->set_policy('automatic', 'automatic'); $scroll->set_shadow_type('out'); $scroll->add($textview); $vbox->pack_end($scroll, TRUE, TRUE, 0); $frame->add($hbox); $hbox->pack_start($dir_entry, FALSE, FALSE, 0); $hbox->pack_start($button, FALSE, FALSE, 0); $window->add($vbox); $window->show_all; Gtk2->main;
Agradezco a explorer de perlenespanol.com por la ayuda brindada. El programa es sencillo, pero me sirvió mucho, aprendí bastantes cosas con este proyectito. El código necesita este icono para funcionar: http://icone.goldenweb.it/download_file/d2/animals/c/jenanimals/file/camel/ext/.ico/default.htmlO sino quieren descargar el icono, solo quiten esta línea: $window->set_default_icon_from_file("camel.ico");
Saludos.
|
|
« Última modificación: 6 Abril 2010, 02:30 am por Leo Gutiérrez. »
|
En línea
|
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Gracias, lo he actualizado ya, quedó algo así: También le agregué un botón para copiar todo al portapapeles. Y por supuesto la licencia GPL: El código queda así: #!/usr/bin/perl use warnings; use strict; use LWP::Simple; use Gtk2 '-init'; use constant TRUE => 1; use constant FALSE => 0; use utf8; binmode STDOUT, ":encoding(UTF-8)"; sub raeSearch() { my $rae = get("http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$_[0]"); my $resultado; while ($rae =~ m/name="[\d_]+"> (.*?) <\/p/smgix) { my $desc = $1; # Quitar las marcas HTML $desc =~ s/<.*?>//gsm; # Quitar los espacios a los lados $desc =~ s/^\s+//sm; $desc =~ s/\s+$//sm; # Quitar espacios excesivos $desc =~ s/\s+/ /gsm; $resultado .= "$desc\n"; } # Saber si $resultado está vacio: { return "La palabra \"$_[0]\" no se encuentra en el diccionario. RAE\n"; } else { } } sub hide_on_delete { my ($widget) = @_; $widget->hide; } # Propiedades de ventana: my $window = Gtk2::Window->new(); $window->set_title("RAE Search"); $window->set_border_width(3); $window->signal_connect(destroy => sub{Gtk2->main_quit}); $window->set_auto_startup_notification(TRUE); $window->set_decorated(TRUE); $window->set_default_icon_from_file("camel.ico"); $window->move(0, 0); $window->resize(700, 100); $window->set_resizable(TRUE); # Frame : my $frame = Gtk2::Frame->new("Entrada"); # VBox : my $vbox = Gtk2::VBox->new(FALSE, 10); $vbox->pack_start($frame, TRUE, TRUE, 0); # HBox : my $hbox = Gtk2::HBox->new(FALSE, 6); # Entry: my $dir_entry = Gtk2::Entry->new_with_max_length(30); $dir_entry->set_text("encono"); $dir_entry->set_activates_default(FALSE); $dir_entry->set_position(100); # Button : my $button = Gtk2::Button->new("_Buscar"); $button->set_alignment(2.6, 4.5); $button->set_focus_on_click(TRUE); # TextView : my $textview = Gtk2::TextView->new(); $textview->set_border_window_size('top', 1); my $buffer = $textview->get_buffer; # Button (button and clipboard widget) : my $button_clipboard = Gtk2::Button->new("_Clipboard"); $button_clipboard->set_focus_on_click(TRUE); my $clipboard = Gtk2::Clipboard->get(Gtk2::Gdk->SELECTION_CLIPBOARD); $button->signal_connect(clicked => sub { $buffer->set_text(&raeSearch($dir_entry->get_text)); } ); $button_clipboard->signal_connect(clicked => sub { $clipboard->set_text(&raeSearch($dir_entry->get_text)); } ); # Button (Quit) : my $button_quit = Gtk2::Button->new("_Salir"); $button_quit->set_alignment(3.5, 4.5); $button_quit->set_focus_on_click(TRUE); $button_quit->signal_connect(clicked => sub { Gtk2->main_quit; } ); # AboutDialog : my $about = Gtk2::AboutDialog->new; $about->set_comments("Un buscador de palabras en el diccionario de la Real Academia Española"); $about->set_website("leorocko13\@hotmail.com"); $about->set_authors("Leo Gutierrez Ramirez"); $about->set_copyright("(c) Leo Gutiérrez Ramírez"); $about->set_program_name("RAE Search"); $about->set_version("1.0"); $about->set_website_label("leorocko13\@hotmail.com"); open(my $file, q[<], "./licencia.txt") or die("No se pudo abrir el archivo \"licencia.txt\". _$!"); my $license; while(<$file>) { $license .= $_; } close($file) or warn("Error cerrando el archivo \"licencia.txt\""); $about->set_license($license); # Button (about) : my $button_about = Gtk2::Button->new("_About ..."); $button_about->set_focus_on_click(TRUE); $button_about->signal_connect(clicked => sub { $about->run; &hide_on_delete($about); } ); # Scroll Window : my $scroll = Gtk2::ScrolledWindow->new(); $scroll->set_policy('automatic', 'automatic'); $scroll->set_shadow_type('out'); $scroll->add($textview); $vbox->pack_start($scroll, TRUE, TRUE, 0); $vbox->pack_start($button_clipboard, TRUE, TRUE, 2); $frame->add($hbox); $hbox->pack_start($dir_entry, FALSE, FALSE, 0); $hbox->pack_start($button, FALSE, FALSE, 0); $hbox->pack_end($button_about, FALSE, FALSE, 0); $hbox->pack_end($button_quit, FALSE, FALSE, 0); $window->add($vbox); $window->show_all; Gtk2->main;
Con perl se pueden hacer muchísimas cosas, en cpan hay más de 8000 módulos que te permiten hacer lo que quieras, está gtk, gtk2, tk, Qt, etc, etc. Por cierto, he visto que en los repositorios hay un software llamada lemurae, hecho en python, parecido al que yo hice, ¿alguno sabe como poner un programita simple como este en los repositorios?
|
|
|
En línea
|
|
|
|
|
|