package dispatch.twitter import json._ import Js._ import oauth._ import oauth.OAuth._ object Twitter { val host = :/("twitter.com") val search = :/("search.twitter.com") } case class Search(query: String, rpp: Int) extends Request( Twitter.search / "search.json" <<? Map("q" -> query, "rpp" -> rpp.toString) ) with Js { def results = this ># ('results ! (list ! obj)) } object Search extends Js { def apply(query: String): Search = Search(query, 20) val to_user_id = 'to_user_id ? num val from_user_id = 'from_user_id ? num val source = 'source ? str val id = 'id ? num val text = 'text ? str val created_at = 'created_at ? str val iso_language_code = 'iso_language_code ? str val from_user = 'from_user ? str } object Status extends Request(Twitter.host / "statuses") with Js { def public_timeline = this / "public_timeline.json" ># (list ! obj) def friends_timeline(consumer: Consumer, token: Token) = this / "friends_timeline.json" <@ (consumer, token) ># (list ! obj) val text = 'text ? str } case class Status(user: String) extends Request(Status / "user_timeline" / (user + ".json")) with Js { def timeline = this ># (list ! obj) } object User extends Js { val followers_count = 'followers_count ? num val screen_name = 'screen_name ? str } case class User(user: String) extends Request(Twitter.host / "users" / "show" / (user + ".json")) with Js { def show = this ># obj } object Auth { val svc = Twitter.host / "oauth" def request_token(consumer: Consumer) = svc.secure.POST / "request_token" <@ consumer as_token def request_token(consumer: Consumer, oauth_callback: String) = svc.secure / "request_token" << Map("oauth_callback" -> oauth_callback) <@ consumer as_token def authorize_url(token: Token) = svc / "authorize" <<? token def access_token(consumer: Consumer, token: Token, verifier: String) = svc.secure.POST / "access_token" <@ (consumer, token, verifier) >% { m => (Token(m), m("user_id"), m("screen_name")) } }