|
|
@@ -2,7 +2,6 @@ package balldontlie
|
|
|
|
|
|
import upickle.default._
|
|
|
import game._
|
|
|
-import requests.Response
|
|
|
|
|
|
case class ResponseMetadata(
|
|
|
total_pages: Int,
|
|
|
@@ -45,15 +44,7 @@ object GamesResponse {
|
|
|
Utils.get_json(endpoint, baseParams)
|
|
|
|
|
|
val response: GamesResponse = upickle.default.read[GamesResponse](json)
|
|
|
- if (response.meta.current_page != response.meta.total_pages) {
|
|
|
- val json = Utils.get_json(
|
|
|
- endpoint,
|
|
|
- baseParams + ("page" -> response.meta.next_page.toString())
|
|
|
- )
|
|
|
- Utils.read[GamesResponse](json)
|
|
|
- } else {
|
|
|
- response
|
|
|
- }
|
|
|
+ response.data
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -62,18 +53,34 @@ object TeamsResponse {
|
|
|
implicit val teamsResponseR: Reader[TeamsResponse] = macroR[TeamsResponse]
|
|
|
val endpoint = "https://www.balldontlie.io/api/v1/teams"
|
|
|
|
|
|
- val getTeams: TeamsResponse = {
|
|
|
- val json = Utils.get_json(endpoint, Nil)
|
|
|
- val response: TeamsResponse = Utils.read[TeamsResponse](json)
|
|
|
+ val getTeams = {
|
|
|
+ val getDataFromPage = (page: Int) => {
|
|
|
+ val json = Utils.get_json(endpoint, Map("page" -> page.toString()))
|
|
|
+ val response: TeamsResponse = Utils.read[TeamsResponse](json)
|
|
|
+
|
|
|
+ val nextPage =
|
|
|
+ if (response.meta.current_page != response.meta.total_pages) {
|
|
|
+ Some(response.meta.next_page)
|
|
|
+ } else {
|
|
|
+ None
|
|
|
+ }
|
|
|
|
|
|
- if (response.meta.current_page != response.meta.total_pages) {
|
|
|
- val json = Utils.get_json(
|
|
|
- endpoint,
|
|
|
- Map("page" -> response.meta.next_page.toString())
|
|
|
- )
|
|
|
- Utils.read[TeamsResponse](json)
|
|
|
- } else {
|
|
|
- response
|
|
|
+ (response.data, nextPage)
|
|
|
}
|
|
|
+
|
|
|
+ def getDataFromAllPages(
|
|
|
+ dataSoFar: List[Team],
|
|
|
+ nextPage: Option[Int]
|
|
|
+ ): List[Team] = {
|
|
|
+ nextPage match {
|
|
|
+ case Some(page) =>
|
|
|
+ val (data, next) = getDataFromPage(page)
|
|
|
+ getDataFromAllPages(dataSoFar ++ data, next)
|
|
|
+ case None =>
|
|
|
+ dataSoFar
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getDataFromAllPages(Nil, Some(1))
|
|
|
}
|
|
|
}
|