decadence

個人のメモ帳

play!2.0 WSを使ってRSS取得

Play!を使って何か作りたかったので,個人のHPを作成した.
結果はこんな感じ.これはherokuで動いてる.
少しかじったjsを10行ぐらい入れて少しだけ動的にした.
1日で適当にやったわりにはまぁまぁの見た目の物が出来た.さすがBootstrap.

特にすごい!といったものは入っていないが,WSを使って外部WebServiceAPIを叩くような連携を行った.
行った内容ははてなダイアリーRSSを取得して載せただけ.

3カ所程躓いた.

1つ目はPlay2.1を始め使おうとしていた時の事.
WS.url(url)でWSRequestHolderを取得した後にget()しようとしたのだが,get()が無い.
少しあわあわしていたので詳しい検証は出来なかったがネット上の参考文献の数からしてもPlay!2.0を使う方が懸命だと考えたので2.0に変更した.
何を思ったのかEmacsで書いていたのにeclipseにimportして確認した.結果コード補完したらWSRequestHandler(WS.url(url))に呼び出せる関数がprepareしか無かった.
prepareはprivateになってるし,色々とおかしかった.

次に躓いたのはWSは非同期処理であるからAsyncで囲まなくてはならないと思った点.
Asyncで囲んでActionに渡すからこれはControllerに書かなくちゃならないのか...?と思っていたけど,modelにHatenaDiaryのUtilオブジェクトを作り,そこで取得させたかった.
結果的にその方針で出来た.Responseに対してawaitという関数を呼び出すと処理を行ってくれた.
最終的に下の方のようなmodelが出来た.
Railsなど分からないが,DBを使わないmodelもありなんじゃないかと思っている.
Play!が初めて触るWebFrameworkだし,特に指導も無く書いているため俺俺になっているが,別にこれで良いんじゃないかと思ってる.

3つ目に躓いたのはjavascriptである.
通常$(document).ready();はDOM構築後に実行されるはずである.
Playではベースとなるとコンテンツなどのhtmlを分けて後で統合する形になる.
これが原因か分からないが,コンテンツ側へのjavascriptの操作が起動時に行われていなかった.
実際readyの中に書かれたjsをコンソールで一度実行すると上手く動いた.
解決策として,readyに書かれたjsを全てhtmlのbodyの後ろに直接置いた.
これで良いんだろうか,駄目だろう.

mumoshu: ScalaでMMOのサーバを書くための技術とかの記事も読んで常々思う.
ScalaもPlay!も本当に楽しいなぁ
もっと技術力あげてどこかで貢献したい