クックパッドさんの「第4回 開発コンテスト24」お疲れ様でした!
つくったもの
- Olds速報 http://oldssoku.rutan.info
2001年〜2010年のYahoo!ニュースの記事の見出しをランダムに表示するWebアプリです。*1
昔の懐かしい記事見出しを見ながら、「あー」とか感傷に浸る感じのものです。
最近のブラウザなら動くはず。
一応、スマホからも見れますが、“見れる”と“見やすい”は別ですね!(
制作の軌跡
- 9:30頃 起床。お題を見て「むりだ」と諦めてゴロゴロする
- 10:00頃 諦めて、前日にやってたAndroidアプリの開発を再開する
- 11:00頃 Androidのアプリ開発に飽きる(
- 12:00〜20:00頃 だらける( タイムマシンつくりてーなーとか考える。
- 20:00頃 TwitterのTLが老害チェッカーに溢れる。なんか作る気になる。
- 21:00頃 古いニュースがぴょこぴょこ出てきたら面白そう!と思いついて作業開始
というわけで、時間の半分くらいを無駄にしてますが、僕は元気です(
まず、記事タイトルを集めないといけないのですが、Yahooニュースにそんな過去ログはない。
なので、Internet Archiveに残っているYahooニュースのトップページから集めることにしました。
さすがに手動で回収は無いので、mechanizeを使ってリンク先を回収しています。
……とはいっても大量アクセスになってしまうので、sleepを挟みながら少しずつ回収。
最終的にクロールにかかる時間が一番の弊害になりました\(^o^)/
ちなみにデータは2001〜2012年まで回収したのですが、集めてみたら2001〜2010年の量と
2011〜2012年の量が同じくらいだったので、2001〜2010年だけ使うことにしました。
半分くらいアクセスが無駄になった……ごめん、Internet Archiveしゃん……
集めた記事タイトルは一旦はテキストに吐き出しますが、
このままでは使いにくいのでデータベースに入れたい。けどDBは面倒くさい。
というわけで、Key-Valueで放り込めるRedisを使うことにしました。
調べてみると、RedisにはSRANDMEMBERっていう
「セット内からランダムに1つ取得する」という神命令があることを発見!
これを見つけた瞬間、僕は提出間に合うと確信して頑張れましたw
(そしてクロールが終わらない現実に絶望しました)
そして、フロント周りはもちろん愛すべきSinatraです。
今回は早さ重視なので、Sinatra/baseではなくベタにSinatraさん。
インラインテンプレート機能も使ってViewファイル無しでやりました。トップだけだし。
CSS/JS部分もインラインテンプレートでやろうかと思ったのですが、
エディタの色わけ表示が仕事できなさそうなのでそこは諦めた。
ページ上ではAjaxでサーバから記事名リストを持ってきて表示していますが、
アクセス毎に記事リストをつくると同時にアクセスあると重いかなぁと思って、
一度作られたリストは30秒くらいキャッシュされるようにしてあります。Redis is God.
その他はGitHubにコードを上げてあるので興味あれば!
とっても短いコードです。おてがるかいはつ。
https://github.com/rutan/OldsSoku
感想
最初はそこまで参加するつもりも無くて、
なんかTwitter見てたらみんな楽しそうだなーからの途中参加でしたが、
こういうハッカソン的な、決まった時間内でお題のものをつくるっていうのは
初めてだったので、とっても楽しかったです。
今思うと、もっとポップアップの表示位置考えるとか、新聞記事風にするとか、
いろいろ工夫しないといけなさそうな点はいろいろあったので、
次こういうのやるときは、もっと余裕持って作業したいですね。
そのためにも、もっと早くネタ出なきゃダメだと思いました……
*1:WebアプリとWebサービスの使い分けがわからない