最近めっきりコードを書くことが減ってしまった。最後にがっつりプログラミングしていたのは、2020年の頭にアダルトサイトを副業で運営していた時で、Rubyでクローラーを作ったり、PHPでWordPress周りをカスタムしたりした。
リハビリと練習のためRubyのWeb系フレームワークのひとつ、Sinatraで簡単なアンテナサイトを作ってみることにする。指定したサイトやサービスから最近はまっている『メダロット』関係の記事を拾ってきて、日付順に表示する。
完成系

このように、各サイトのRSSフィード経由で拾ってきた記事情報をリストで一覧表示する。UIはBootstrapでてきとうに整形。
躓いた所
-
RSSのフィードにアクセスするときにSSLのエラーが起きて繋げない。”OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE”でエラー自体をサプレス出来たけど、絶対にベストプラクティスではない。Rubyでのパース周りよく理解しないで使っているので一度ちゃんと調べなければいけない。
-
RSSのXMLタグ、
lastBuildDateの値が空だと、パース出来ないエラーが返ってきた。これは最終更新日のキーだと思うんだけど、これが空になっているとはどういうことなのか。今回はlastBuildDateを使うことはないのでこのキー自体をfeed.gsub!('lastBuildDate')で消去したらエラーがでなくなった。 -
配列に記事オブジェクトを収録している状態で、日付順にソート。どうやらRubyはTimeオブジェクト同士の大小比較が出来るようなので、ソートの条件を数字比較と同様に演算処理で対応。このような日付順に並べ替えみたいな処理をすることは少なくないと思うのだけれど、どのような方法がベストプラクティスなんだろう。
"articles.sort!{ |a,b|Time.parse(b.date) <=> Time.parse(a.date) }"この後してみたいこと
-
指定サイトをもっと増やしてみたい。パース処理が多くなってロードに時間がかかる場合は並列処理も必要になってくるんだろうか。
-
タグや検索結果でのフィードを返してくれないサイトに対して、クローラーを作って情報を集めたい。
-
個人的に特に役立つ記事などをカテゴリ毎にまとめて掲載。メダロット9だったら『初心者絶対読むべし』セクションのような。
良い練習になりました。