dispatch で Github API をつかい github の starred の情報取得
dispatch で github にOAuth でアクセス
github api を使って自分が star 付けているレポジトリの情報を取得してみるプログラムを実験してみました。
token の取得
まず 最初に Github APIに OAuth でアクセス出来るように、Creating an OAuth token for command-line use の手順とおり、 先にアクセス用の token を取得しておきます。
% curl -u 'takuya71' -d '{"scope":["repo"],"note":"takupatch1"}' https://api.github.com/authorizations Enter host password for user 'takuya71': { "token": "xxxxxxxxxxxxxxxxxxxxx", "app": { "url": "http://developer.github.com/v3/oauth/#oauth-authorizations-api", "name": "takupatch1 (API)" }, "updated_at": "2012-12-24T04:58:00Z", "scopes": [ ], "note": "takupatch1", "url": "https://api.github.com/authorizations/xxxxx", "created_at": "2012-12-24T04:58:00Z", "id": xxxxxx, "note_url": null }
最初の “token” の部分が使用する token です。
starred を取得する API
今回 使用する Star レポジトリを取得するAPIは こちら です。
GET /user/starred
プログラム
では プログラムの方ですが Scala での httpのアクセスでは定番の dispatch を使っております。
バージョン
- Scala 2.9.2
- Dispatch 0.8.9
build.sbt
name := "disp8-cons" version := "0.1" scalaVersion := "2.9.2" libraryDependencies ++= Seq( "net.databinder" %% "dispatch-http" % "0.8.9", "net.databinder" %% "dispatch-oauth" % "0.8.9" )
mystarred.scala
import dispatch.classic._ import oauth._ import OAuth._ val TOKEN = "xxxxxxxxxxx" 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 as_str) println(contents)
dispatch の 0.8.9 からは import dispatch.classic._
のように classic としてimport。
認証用の token ですが ヘッダに "Authorization: token mytoken"
と指定します、
この部分が
val authtoken = Map("Authorization" -> TOKENKEY)
となります。
ヘッダに指定するには Map(ヘッダ名 -> 値) です。
次に starred の情報を取得する肝心の部分は以下の部分です。
val contents = http(u.secure <:< authtoken as_str)
github API は https で接続するため u.secure
のように url に secure メソッドを指定します。
secure を付けないと http 接続になってしまい、情報が取得出来ません。
<:<
メソッドで ヘッダ情報を追加し、as_str
を指定して 結果を文字列として取得します。
- secure メソッドで https 接続指定
- <:< で "Authorization:" ヘッダを追加して token を指定
上の例は あえて 一行で書くと
val contents = Http(url("https://api.github.com/user/starred") <:< Map("Authorization" -> "token xxxxxxxxxxxxxxxxx") as_str)
これだけになっちゃいます。
取得結果は
[{"updated_at":"2012-12-13T03:58:10Z","git_url":"git://github.com/banyan/config.git","has_issues":true,"issues_url":"https://api.github.com/repos/banyan/config/issues{/number}","git_tags_url":"https://api.github.com/repos/banyan/config/git/tags{/sha}","clone_url":"https://github.com/banyan/config.git","mirror_url":null,"milestones_url":"https://api.github.com/repos/banyan/config/milestones{/number}","git_commits_url":"https://api.github.com/repos/banyan/config/git/commits{/sha}","stargazers_url":"https://api.github.com/repos/banyan/config/stargazers","languages_url":"https://api.github.com/repos/banyan/config/languages","hooks_url":"https://api.github.com/repos/banyan/config/hooks","owner":{"type":"User","repos_url":"https://api.github.c...
簡単に Github の情報を取得出来そうです。
今日はここまで。