* 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/