PHPのアプリケーションを置き換えるためにPerlとmojoliciousとシンプルなRSSアグリゲーターを構築する


最後の話では、私は、簡単なWebアプリケーションのビルド、展開、ホスティングのためのデジタルオーシャンアプリケーションサービスを使用する私の経験を少し共有しました.
この物語では、私が構築した小さなアプリケーションをまとめたいと思います.

導入
私が取り替えているアプリケーションは古い(初期の2000年代)PHPアプリケーションです.それは多くの柔道のブログからのRSSフィードを集め、両方のWebプレゼンテーションと組み合わせRSSフィードの新しいRSSフィードを生成します.旧サイトは2010年初頭以来ほとんど変更されていない.それは、それが上にあったホスティング・プラットホーム(CNPanel)がPHPをアップグレードして、サイトを壊すまで、うまくやった.
2つの特定のハックは、両方の助けと妨げていた.Webページは、PHPを実行したcronジョブによって静的HTMLファイルに書き込まれていました.多言語の必要性に対処するために、サイトはサイトの異なったOPMLファイルに対して実行している同じコードの3つのインストールをしました.これは実際には、PHPのアップグレードがアプリを壊したときにサイトが“アップ”ままだった.

新バージョン
私はMojoliciousを使用してサイトを構築することを決めた.私は過去にダンサー2で多くの仕事をしました、それで、これはMojoで本当の何かを造る良い機会でした.
サイトを適切にマルチリンガルにすることは、私の議題において高かった.私にとっても重要なファクター.

始動
私はMojoliciousコマンドラインツールを使用して作業アプリケーションの足場を作り始めました.
mojo generate app
これは私のアプリの形を与えたMojo/Mojoliciousは、かなり標準的なMVCウェブアプリケーション構造を働かせます.ダンサー2に精通しているように調整することは困難ではない.すべてのあなたの定期的な取り扱いのツールGET and POST リクエストは既にあります.モジョもMorbo .

モルボー
MorboはHTTPを扱う開発サーバで、私にとってはほとんど必須の機能を持っています.ホットリロードいくつかのコードを変更すると、Morboはそれを再読み込みします.これは他の言語でかなり一般的です、そして、それがMojoに焼かれることはうれしいです.

テスト::Mojo
モホが来るTest::Mojo これは、アプリケーションのWebui要素をテストするのに役立つ素晴らしいライブラリです.これは本当に良いし、よく動作します.私はテスト駆動型の開発スタイルで物事を構築したいです.両方の単体テストと統合スタイルテスト.Test ::Mojoは私がビルドしたいWebページを記述するのが簡単になり、それをビルドして確認します.
これは、ビジネスロジックのユニットテストを置き換えることはありませんTest2::V0 ) そのために.Test ::Mojoは、箱の中のOliveを提供します.開発者としての使いやすさは、私にとって重要です、そして、率直に、あなたが一緒にものを配線しなければならないより、デフォルトオプションのより多くのTDDスタイルの開発をします.

XML
これは実際にパズルの最も難しい部分だった.多くのオプションがあり、最後にXML::OPML 各言語のサイトのリストを解析する.XML::Feed RSSフィードの読み込みと書き込みを処理します.これを超えて、私はHTML::Strip 外部からのコンテンツをクリーンアップするにはText::Truncate 画面上に表示される各項目に表示されるテキストを制限する.最後に、私はMoo オブジェクト指向の“ビジネスロジック”コードの一部を形成する.
MozoliciousがCSSセレクターサポートを持つJSONとHTML/XMLパーサーを持っているのを見ますそれで、多分、私はこのすべてを必要としません?私は探索する必要があります.

コード構造
サイトは、現時点では非常に簡単ですが、私は2つの部分に分割している.フィードフェッチ、解析、集計は1つの部分です.OPMLファイルを読み込み、RSSファイルを書き込む際に開始します.
番目の部分は、RSSファイルを読み取り、画面上に提示するウェブサイトです.現在、ウェブサイトは外部サイトからのフィードを取得しません.これは、スタンドアロンスクリプトとして私のマシン上でローカルに行われているこれはおそらく変更されますそれは、サイトが現在非常に単純であることを意味しますが.

路線
コードは簡単です:

 $r->get('/')->to('Home#welcome');
 $r->get('/:lang')->to('Main#index');

サイト全体は基本的に我々が提供している言語である1つのルートです./english , /french or /spanish . The :lang どのRSSファイルを読み取り、表示するかを決定するコード内で使用されます.So /english 読み取りrss_english.xml 表示します.現在、コントローラは以下のようになります.

sub index ($self) {
    my $xml
        = XML::Feed->parse( 'public/rss_' . $self->param('lang') . '.xml' );
    my $opml_parser = XML::OPML->new;
    my $opml
        = $opml_parser->parse( 'public/' . $self->param('lang') . '.opml' );

    # Rendel template "example/welcome.html.ep" with message
    $self->render(
        lang => ucfirst $self->param('lang'),
        rss_xml => $xml,
        opml => $opml,
    );
}

ご覧のように、OPMLファイル(ページの片側のサイトのリストを表示する)と、リストのサイトからの各項目の集約RSSフィードを読みます.

テンプレートの隠し複雑さ
コンロローラーは単純ですが、一部ではテンプレート自体に大きなコードを隠しています.テンプレートエンジンは私がループを生成するのに十分に複雑で、HTML、truncateなどをストリップします.

ブートストラップ
いくつかのデザインを適用するために使用される小さなブートストラップがあります.

概要
だから私のためにmojolisious楽しいですあなたが開発者フォーカスWebフレームワークを探している場合はよく試してみる価値;どんな言語から来ても.ツーリング(MorboとTest ::Mojo)は、簡単で信頼できる開発プロセスのために作ります.Appの構造は、ほとんどの任意のMVCフレームワークから来ている誰かに精通している(そのダンサー2、ルビーオンレール、ジャンゴまたはExpress).
試してみる.