Takuya71 のぶろぐ

外資系ソフトウェア会社で働いてます、認定スクラムマスター

こんどは dispatch 0.9.5 で Github API をつかい github の starred の情報取得

この前は dispatch 0.8.6 を使って Github API をつかってみましたが、新しい dispatch のバージョンの 0.9.5 を使って同じことをやってみました。

0.9.5 では OAuth のモジュールが core モジュールに含まれています。
したがって import は

import dispatch._ 
import dispatch.oauth._ 

の2行です。

サイトにアクセスして情報を取得する為の記載は 少し異なります。

0.8.6 の時

val contents = http(u.secure <:< authtoken as_str)

0.9.5 では

val contents = http(u.secure <:< authtoken OK as.String)

as_str と記載していた箇所が OK as.String になっています。OKだったら Stringとして処理という意味になるでしょうか。
大きく 違うのは この処理の結果です。

上の一行を実行した時点では

contents: dispatch.Promise[String] = Promise(-incomplete-)

という 結果が返ってきています。 処理は 非同期で行われている為 即座に結果は返ってきていなく
値を取得して 処理するには for を使って処理を行います。

for( str <- contents ) println(str)

Source

build.sbt

scalaVersion := "2.9.2"

libraryDependencies ++= Seq(
    "net.databinder.dispatch" %% "dispatch-core" % "0.9.5"
)

github_starred.scala

import dispatch._ 
import dispatch.oauth._ 

val TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxx"
val TOKENKEY = "token " + TOKEN

val http = new Http

val u = :/("api.github.com") / "user" / "starred"

val authtoken = Map("Authorization" -> TOKENKEY)

val contents = http(u.secure <:< authtoken OK as.String)

for( str <- contents ) println(str)