浏览代码

Retrieve ALL stats (which is a lot)

theenglishway (time) 2 年之前
父节点
当前提交
ade28574cd
共有 1 个文件被更改,包括 29 次插入4 次删除
  1. 29 4
      src/main/scala/BallDontLie.scala

+ 29 - 4
src/main/scala/BallDontLie.scala

@@ -60,6 +60,7 @@ object EndpointResponse {
   val teams_per_page = 25
   val games_per_page = 25
   val stats_per_page = 25
+  val stats_page_limit = 20
 
   def doPaginatedRequest[T: Reader](
       endpoint: String,
@@ -138,11 +139,35 @@ object EndpointResponse {
   def getStats(game_ids: List[Int]): ListOfStats = {
     implicit val gamesResponseR: Reader[StatsResponse] = macroR[StatsResponse]
 
-    doPaginatedRequest[StatsResponse](
+    def getAllData(
+        endpoint: String,
+        params: Map[String, Any],
+        dataSoFar: ListOfStats = Nil,
+        page: Option[Int] = Some(1)
+    ): ListOfStats = {
+      page match {
+        case None => dataSoFar
+        case Some(value) if value > stats_page_limit => dataSoFar
+        case Some(value) =>
+          val response =
+            doPaginatedRequest[StatsResponse](
+              endpoint,
+              value,
+              stats_per_page,
+              params
+            )
+          getAllData(
+            endpoint,
+            params,
+            response.data ++ dataSoFar,
+            response.getNext()
+          )
+      }
+    }
+
+    getAllData(
       "https://www.balldontlie.io/api/v1/stats",
-      1,
-      stats_per_page,
       Map(("game_ids" -> game_ids))
-    ).data
+    )
   }
 }