Skip to content
This repository has been archived by the owner on Dec 4, 2019. It is now read-only.

Latest commit

 

History

History
87 lines (62 loc) · 2.19 KB

dispatch-classic.md

File metadata and controls

87 lines (62 loc) · 2.19 KB


  • request builder - definerer request
  • handler - håndterer respons
  • executor - gjør selve kallet
import dispatch._

val request = url("http://www.yr.no/place/Norway/Telemark/Sauherad/Gvarv/forecast_hour_by_hour.xml")
val handler = request.as_str
val result = Http(handler)

request

url("http://www.yr.no") / "place" / "Norway" / "Telemark" 
	/ "Sauherad" / "Gvarv" / "forecast_hour_by_hour.xml"

url("http://sporing.posten.no/sporing.html") <<? Map("q" -> "123123123")

handlers

val http = new Http
val request = url("http://scala-lang.org")

http(request >>> System.out) // til OutputStream

http(request as_str) // som string

http(request <> ((xml:Elem) => xml \ "foo" \ "bar") // håndtert som xml

import tagsoup.TagSoupHttp._
http(request </> ((xml:NodeSeq) => xml \\ "body" \ "@href") // vasket html og håndtert som xml

executors

  • Threadsafe m/threadpool Http / new Http with thread.Safety
  • Current Thread new Http
  • NIO new nio.Http
  • Google App Engine new gae.Http

import xml._
import dispatch._

val http = new Http
def parse(xml:Elem) = 
  for {
    consignment <- xml \ "Consignment"
    totalweight <- consignment \ "TotalWeight"
  } yield totalweight.text

http(url("http://beta.bring.no/sporing/sporing.xml") <<? 
	Map("q" -> "TESTPACKAGE-AT-PICKUPPOINT") <> parse)

<ConsignmentSet xmlns="http://www.bring.no/sporing/1.0">
  <Consignment consignmentId="SHIPMENTNUMBER">
    <TotalWeight unitCode="kg">16.5</TotalWeight>
      ..

// List(16,5)

Oppgavetid :-)

https://github.com/arktekk/scala-kurs-oppgaver/tree/master/music