package dispatch.times import dispatch._ import json._ import Js._ trait Times extends JsHttp { import Http._ lazy val host = :/("api.nytimes.com") val api_key: String val service: String val version: Int def apply(action: String, params: Map[String, Any]) = /("svc") / service / ("v" + version) / action <<? (params + ("api-key" -> api_key)) def apply(action: String): Request = this(action, Map[String, Any]()) val results = ('results ! (list ! obj)) } case class People(api_key: String) extends Times { val service = "timespeople/api"; val version = 1 def profile(user_id: Int) = this("/user/" + user_id + "/profile.js") } case class Search(api_key: String) extends Times { val service = "search" val version = 1 def search(query: String) = this("article", Map("query" -> query)) } case class Community(api_key: String) extends Times { val service = "community" val version = 2 override val results: JsValue => List[JsObject] = ('results ! obj) andThen ('comments ! (list ! obj)) def recent = this("comments/recent.json") ># results } case class News(api_key: String) extends Times { val service = "news" val version = 2 def recent = this("all/recent.json") ># results }