Prechádzať zdrojové kódy

Move read to utils object

theenglishway (time) 2 rokov pred
rodič
commit
e3acb7a7a1

+ 35 - 10
src/main/scala/BallDontLie.scala

@@ -25,30 +25,55 @@ object Utils {
 
     ujson.read(r.text())
   }
+
+  def read[T: Reader](json: ujson.Value): T = {
+    upickle.default.read[T](json)
+  }
 }
 
 case class GamesResponse(data: List[GameData], meta: ResponseMetadata)
 object GamesResponse {
   implicit val gamesResponseR: Reader[GamesResponse] = macroR[GamesResponse]
+  val endpoint = "https://www.balldontlie.io/api/v1/games"
 
   val getGames = (season: Int, teams: List[Int]) => {
-    val json = Utils.get_json(
-      "https://www.balldontlie.io/api/v1/games",
-      Map(
-        "seasons[]" -> List(season).mkString(","),
-        "team_ids[]" -> teams.mkString(",")
-      )
+    val baseParams = Map(
+      "seasons[]" -> List(season).mkString(","),
+      "team_ids[]" -> teams.mkString(",")
     )
-    upickle.default.read[GamesResponse](json)
+    val json =
+      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
+    }
   }
 }
 
 case class TeamsResponse(data: List[Team], meta: ResponseMetadata)
 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 json = Utils.get_json("https://www.balldontlie.io/api/v1/teams", Nil)
-    upickle.default.read[TeamsResponse](json)
+    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
+    }
   }
 }

+ 9 - 4
src/main/scala/json.worksheet.sc

@@ -14,10 +14,15 @@ val wd = os.pwd
 val json_string = os.read(wd / "suns_2021.json")
 
 val json1 = ujson.read(json_string)
+json1.obj("data")
 
+upickle.default.read[GamesResponse](json1)
 
-case class Response(data: List[GameData], meta: ResponseMetadata)
-implicit val responseR: Reader[Response] = macroR[Response]
 
-val resp: Response = upickle.default.read[Response](json1)
-resp.meta
+val teams_string = os.read(wd / "teams_p1.json")
+val teams_json = ujson.read(teams_string)
+val response: TeamsResponse = upickle.default.read[TeamsResponse](teams_json)
+
+val teams_p2_string = os.read(wd / "teams_p2.json")
+val teams_p2_json = ujson.read(teams_p2_string)
+upickle.default.read[TeamsResponse](teams_p2_json)