技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

WS API でWeb上のデータを引っ張る

HTTP なコマンドで拾えるものは大概拾える。

import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.ws.{Response, WS}
import scala.util.{Failure, Success}


object RssLoader extends Logger {

  def firstUri(uri:String) = {

    def successOr(result:Response) = {
      result.status match {
        case 200 => Right(result.body)
        case _ => Left(result.status)
      }
    }

    val future = WS.url(uri).get() // Future[Response]
    future.onSuccess { case success =>
      successOr(success).fold(
        status => logger.warn("Unable to get RSS %s (%d)".format(uri, status)),
        body => logger.info("get rss values. %s".format(body))
      )
    }
  }
}

RssLoader.firstUri("http://white-azalea.hatenablog.jp/rss")

と書ける。

実行結果は

[info] m.a.RssLoader$ - get rss values. 

  
    謎言語使いの徒然
    http://white-azalea.hatenablog.jp/
    適当に気になった技術や言語を流すブログ。
    Sun, 30 Jun 2013 01:26:09 +0900
    http://blogs.law.harvard.edu/tech/rss
    Hatena::Blog
    
      
        
          フォームエラーをまとめて表示したい
          http://white-azalea.hatenablog.jp/entry/2013/06/30/012609
          <p>Playframework2.1.1 のフォームに値をバインドし、エラーを表示する際に、エラーのみを一覧表示で取得したい場合がある。<br />
その方法を探してみた。(そのまま今作ってるやつ)</p>
<pre class="code" data-unlink>  val userCreateForm = Form(
    tuple(

ただし、Playframework アプリケーションが動いていないと動作しない。
(UT時は多分FakeServer立てれば動いたはず)