* Perlで遊ぼう [#ef040857]
ってことで、私がちょいと調べてみたPerlのサンプルスクリプトなどを載せてみます。~
最低限CPANの知識が必要です。その他Linuxの知識がいろいろと。~
構造生物学とは関係ないです。
** GtkMozEmbedを使ってWebページをキャプチャ [#u9c07b9d]
MozillaのAPIを使ってWebページをキャプチャしてみます。~
*** Gtk::MozEmbedのインストール [#z29a2e81]
CPANからGtk::MozEmbedを取得してインストールします。システムで必要だったのは以下のものです。
- glib-devel
- gtk2-devel
- cairo-devel
- mozilla-devel
ぐらいだったと思います。これだけ入れたらたぶんcpanシェルでもすんなり入ると思います(手動でインストールしましたが)。
*** スクリプトサンプル [#n0ff24c1]
こんな感じで作りました。Gtk2 APIを使うのが初めてだったので妥当なコードかどうかはわかりませんが・・・~
Gtk::MozEmbedのサンプルを使って作成しました。
''captest.pl''~
- ''captest.pl''
#!/usr/bin/perl
use strict;
use warnings;
use Glib qw(TRUE FALSE);
use Gtk2 -init;
use Gtk2::MozEmbed;
main();
sub main {
Gtk2::MozEmbed->set_profile_path($ENV{HOME} . "/.mybrowser", "MyBrowser");
my $window = Gtk2::Window->new("toplevel"); # windowを作成
my $moz = Gtk2::MozEmbed->new(); # MozEmbedを作成
# windowクローズ時のシグナル
$window->signal_connect(delete_event => sub {
Gtk2->main_quit;
return FALSE;
});
$moz->signal_connect(net_stop => \&on_net_stop); # データダウンロード後のシグナル
$window->set_title("MyBrowser");
$window->set_default_size(600,400); # ウィンドウサイズ
$window->add($moz);
$window->show_all();
$moz->load_url("http://gtk2-perl.sf.net"); # 接続先URL
Gtk2->main; # メインループへ
}
# データダウンロード後の処理
# すぐにキャプチャすると描画されていないのでタイマーで1秒待つ
sub on_net_stop {
my $self = shift;
Glib::Timeout->add(1000,sub { capture($self) });
}
# キャプチャメソッド
sub capture {
my $moz = shift;
my ($x,$y,$w,$h,$depth) = $moz->window->get_geometry();
my $pixbuf = Gtk2::Gdk::Pixbuf->new("GDK_COLORSPACE_RGB",FALSE,8,$w,$h);
$pixbuf->get_from_drawable($moz->window,$moz->window->get_colormap,0,0,0,0,$w,$h);
$pixbuf->save("screen.png","png");
print "Captured!!\n";
Gtk2->main_quit();
return FALSE;
}
このサンプルはGtk2を使うので当然X環境が必要になります。X環境が構築されているなら問題ありませんが、Xを導入していないようなサーバで使う場合はXvfb(X Virtual Frame Buffer)を使います。
# Xvfb :1 -screen 0 1024x768x24 & <-- rootでXvfbスクリーンを作成する
$ setenv DISPLAY :1.0 <-- cshの場合
$ perl captest.pl
これでscreen.pngという名前でキャプチャされます。コマンドラインで便利に使いたい場合はURLとファイル名を指定できるようにすればおっけー。
#br
:参考|
- Gtk2-Perl Home -- http://gtk2-perl.sourceforge.net/
-- Document http://gtk2-perl.sourceforge.net/doc/pod/