ブックマーク / qiita.com/uchiko (9)

  • Mojo::JSONの挙動について - Qiita

    Mojo::JSONは、「Perlのデータ構造」と「JSON文字列」で、相互に変換してくれるモジュールです。 「Perlのデータ構造」から「JSON文字列」に変換する場合はencodeメソッドを使用し、 「JSON文字列」から「Perlのデータ構造」に変換する場合はdecodeメソッドを使用します。 注意が必要なのは、 Mojo::JSONのencode/decodeが、 Encodeのencode/decodeに合わせたような挙動になっていることです。 encodeメソッド encodeメソッドに渡すデータの中に日語などの文字列がある場合は、 utf8フラグを付けておく必要があります。 付けなかった場合は、文字化けが起こります。 use strict; use warnings; use Encode; use Mojo::JSON; my $parser = Mojo::JSON->

    Mojo::JSONの挙動について - Qiita
  • plenvの導入 - Qiita

    $ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/ $ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(plenv init -)"' >> ~/.bash_profile $ exec $SHELL -l 完了すると、plenvコマンドが使用できます。 Perlのインストール 以下のコマンドで、使用できるPerlのバージョンが確認できます。 ずらっと表示されるのでlessで確認します。

    plenvの導入 - Qiita
  • Test::MojoでビルドされたアプリにPhantomJSでアクセスする - Qiita

    概要 やり方は、以下の手順。 Test::Mojo->newする。 Test::TCPのserver側で、Mojo::Server::Daemonを使用して一時的なWebサーバを立ち上げる。 Test::TCPのclient側で、PhantomJSのコマンドを実行。引数にポート番号を渡す。 PhantomJSのスクリプト内でポート番号を受け取って、Webサーバにアクセスする。 PhantomJSのスクリプト PhantomJSのスクリプトは例えば以下のようになる。 var System = require('system'); var port = System.args[1]; var page = require('webpage').create(); page.open('http://127.0.0.1:'+port+'/', function() { page.render('

    Test::MojoでビルドされたアプリにPhantomJSでアクセスする - Qiita
  • Porboという開発用PSGIサーバを作った - Qiita

    概要 Mojoliciousに付随しているMorboのような開発用サーバが欲しかったので、 勉強がてらにPorboという開発用PSGIサーバを作った。 以下のような条件を全て満たす開発用サーバが欲しかった。 シングルプロセスで複数のポートをListenできる(HTTP::Server::PSGIだとできない) SSLに対応している(Twiggyだと対応していない) Plack::Middlewareが使える(Morboだと使えない) 個人的にこれらの機能が備わっていると開発が捗る。 Porboの中身 複数ポートをListenするからイベント駆動が必要そうだな、 ということでAnyEventを使用して書いた。 TwiggyやHTTP::Sever::PSGIを読んで、見よう見まねで作ったので、 AnyEventの仕様や動作などをまだよく理解できておらず勉強中。 テストはTwiggyのものを流

    Porboという開発用PSGIサーバを作った - Qiita
  • Mojo::UserAgentがスクレイピングツールとして便利 - Qiita

    概要 スクレイピングでやりたいことは、 だいたい以下のようなもの。 ■データを取得する -> GETでHTMファイルL/XML(RSS)ファイル/画像ファイルなどを取得 -> POSTでフォームにSubmitする(ログイン/パスワードDL) -> 並列で取得する ■取得したデータから必要なデータを抽出する -> HTMLをParseして、CSSセレクタでデータを抽出する -> JSONをParseして、データを抽出する -> XML(RSS)をParseして、データを抽出する ■取得したデータを保存する -> ファイルとして保存する Mojo::UserAgentは、上記の処理が簡単に書けるようになっている。 インストール MojoliciousをインストールするとMojo::UserAgentも入る。 HTTPSにアクセスすることもあるので、IO::Socket::SSLも入れる。 us

    Mojo::UserAgentがスクレイピングツールとして便利 - Qiita
  • 開発時にplackupで起動した時に出力されるログを制御する - Qiita

    出力されるログを制御するPlack::Middleware::LogFilterというものを書いた。 https://github.com/memememomo/Plack-Middleware-LogFilter 以下のようにして使用する。 use Plack::Builder; builder { enable 'LogFilter', filter => sub { my ($env, $output) = @_; # ignore static file log if ($output =~ /\/static\/(js|css|images)/) { return 0; } return 1; }; $app }; ログの1行1行で、出力するかどうかを判別するフィルタを設定できる。 上記の例では、静的なファイルの配信ログを出力しないように設定している。 開発でplackupコマン

    開発時にplackupで起動した時に出力されるログを制御する - Qiita
  • Mojoliciousでエラーメッセージ画面を変更する - Qiita

    デフォルトで表示される恐竜は可愛いけれど、 エラー画面を変更したい場合がある。 その場合、templatesディレクトリ下に、 それぞれのエラーに対応するテンプレートファイルを置く。 not_found.html.ep (404) exception.html.ep (500) これらのファイルを置けば、画面を変更することができるけれど、 開発している場合は、エラー詳細が表示されるデフォルト画面が表示されてほしい。 テンプレートファイルは、以下のような命名規則にもなっている。 exception.$mode.$format not_found.$mode.$format $modeで切り替えることができる。 番では"production"モードとなっているはずなので、 以下のファイルを置くことになる。 exception.production.html.ep not_found.prod

    Mojoliciousでエラーメッセージ画面を変更する - Qiita
  • MojoliciousでJSON::XSを使う - Qiita

    use Mojolicious::Lite; use Mojo::JSON::XS; use Mojo::ByteStream 'b'; app->renderer->add_handler(json => sub { my ($self, $c, $output, $options) = @_; $$output = Mojo::JSON::XS->new->encode($options->{json}); }); get '/' => sub { my $self = shift; $self->render(json => {name => b('太郎')}); }; app->start; 「encountered object '太é��', but neither allow_blessed, convert_blessed nor allow_tags settings

    MojoliciousでJSON::XSを使う - Qiita
  • Mojoliciousアプリ全体のエラー処理をする - Qiita

    developmentモードでスクリプトエラーが起こった場合、 以下の様な画面が表示される。 Mojolicious側でアプリの全体的なエラーをキャッチして、 このようなエラー画面を表示させている。 内部では、around_dispatchというフックを使って処理している。 独自にアプリ全体のエラーをキャッチして、 何かしらの処理したい場合も around_dispatch を使う。 (強力なフックなので気軽に使うべきではないと、 ドキュメントで注意されているのでちょっとこわい) 例えば、アプリのエラーメッセージに、 「SYSTEM ERROR!!」というプレフィクスを付けたいとすると、 以下のような設定になる。 app->hook(around_dispatch => sub { my ($next, $c) = @_; eval { $next->(); 1; }; # アプリにエラー

    Mojoliciousアプリ全体のエラー処理をする - Qiita
  • 1