メメメモモ

プログラミング、筋トレ、ゲーム、etc

perlでスクレイピング「Mojolicious::LiteとStarmanで閲覧用Webアプリを作成する」

スクレイピングしたデータは、見やすい形にしておくのがいいと思います。
場合によると思いますが、ブラウザで見られるようにしてあると便利な場合があります。
そこで、perlでWebアプリを作成します。


ただ、スクレイピングデータを見るためにだけのWebアプリですので、手軽に作りたいです。
そこで、簡単なWebアプリフレームワークperl製のWebサーバを使うことにします。
Webアプリフレームワークは「Mojolicious::Lite」を、
Webサーバは「Starman」を使います。
2つともCPANモジュールなので、cpanmなどでインストールできます。


Mojolicious::Liteでは、次のように一つのファイル内でWebアプリのプログラムを書く事ができます。

#!/usr/bin/env perl                                                                           
use strict;
use warnings;
use Mojolicious::Lite;

get '/' => sub {
    my $self = shift;
    $self->render( items => ['item1', 'item2'] );
} => 'index';

get '/test/:item' => sub {
    my $self = shift;
    my $item = $self->stash('item');
    $self->render_text($item);
} => 'test';

app->start($ARGV[0] ? $ARGV[0] : 'psgi');

__DATA__

@@ index.html.ep
<html>
<head><title>test</title></head>
<body>
<ul>
% for my $item (@$items) {
<li><a href="<%= url_for('test', item => $item) %>"><%= $item %></a></li>
% }
</ul>
</body>
</html>

ちょっとしたスクリプト感覚でWebアプリが作れてしまいます。
テストで動かす場合は「perl app.pl daemon」で起動、
http://localhost:3000/」でアクセスできます。


このWebアプリをStarmanで運用します。
起動コマンドは次のようにしました。

starman -a mojo.pl -port 5000 --workers 1 -D --pid pid.txt

上記のコマンドでは下記のオプションを使っています。

  • -a
    • Webアプリの実行ファイルを指定します。「mojo.pl」はMojolicious::Liteで作成したスクリプトです
  • -port
    • ポート番号を指定しています。複数のアプリを動かすときは、それぞれポート番号を変えていきます
  • -workers
    • ワーカー数を指定してます。自分だけ使うことを想定していますので「1」に設定しました
  • -D
    • デーモン化してバックグラウンドで動作させます
  • --pid
    • pidの出力先ファイルを指定してます。デーモン化したプロセスを停止・再起動する場合はpid.txtに書かれたpidを使います


これであとはスクレイピングしたデータを表示する処理を書くだけです。
cpanで環境が揃うのがいいなぁと思いました。


Mojolicious::Liteについては、下記のページが参考になりました。


Starmanのオプションについては「starman -h」「plackup -h」で参照できます。