Scala2.8とLift2.2を使用します。
Github APIを呼び出して、ユーザーのリポジトリをリクエストしています。ユーザーのリポジトリが30未満の場合、1回の呼び出しが行われ、JValueを連結する必要はありません。ただし、ユーザーが30を超えるリポジトリを持っている場合、複数の呼び出しが行われます。これらの呼び出しからのこれらの結果を連結してから、それらを「フラット化」したいと思います。つまり、JValueの「リポジトリ」名は、最初の30だけでなくすべてのリポジトリを返す必要があります。
以下のコードは次を返します:Array(List(JObject(List(JField(repositories、JArray(... JObject(List(JField(repositories、JArray ...)))))))))
私が欲しいのは:Array(List(JObject(List(JField(repositories、JArray(....)))))ここで、リポジトリ名はすべてのリポジトリを指します。
私はこれに少し取り組んできましたが、うまくいかないようです。
import java.io._
import net.liftweb.json.JsonAST._
import net.liftweb.json.JsonParser._
import org.apache.http.client.methods.HttpGet
import org.apache.http.impl.client.{ DefaultHttpClient }
object Github extends Application {
implicit val formats = net.liftweb.json.DefaultFormats
val client = new DefaultHttpClient()
var repos = JArray(List[JValue]())
//Pick on mojombo since he has 30+ repos requires to calls to API
var method = new HttpGet("http://github.com/api/v2/json/repos/show/" + "mojombo" + "?page=1")
var response = client.execute(method)
var instream = response.getEntity.getContent();
var reader = new BufferedReader(new InputStreamReader(instream))
var line1 = reader.readLine
method = new HttpGet("http://github.com/api/v2/json/repos/show/" + "mojombo" + "?page=2")
response = client.execute(method)
instream = response.getEntity.getContent();
reader = new BufferedReader(new InputStreamReader(instream))
val line2 = reader.readLine
println(parse(line1) ++ parse(line2))
}