Bladeren bron

Add getTeams function and read back from file if already present

theenglishway (time) 2 jaren geleden
bovenliggende
commit
84a2779c8e
3 gewijzigde bestanden met toevoegingen van 43 en 1 verwijderingen
  1. 5 0
      src/main/scala/BallDontLie.scala
  2. 26 1
      src/main/scala/Extract.scala
  3. 12 0
      src/main/scala/Main.scala

+ 5 - 0
src/main/scala/BallDontLie.scala

@@ -57,6 +57,11 @@ object Utils {
 
     os.write.over(file, string)
   }
+
+  def readFromFile[T: Reader](file: Path): T = {
+    val string = os.read(file)
+    upickle.default.read[T](string)
+  }
 }
 
 case class EndpointResponse[T](data: T, meta: ResponseMetadata) {

+ 26 - 1
src/main/scala/Extract.scala

@@ -1,7 +1,8 @@
 package extract
 
 import balldontlie._
-import game.PlayerGameStats
+import game.{Team, PlayerGameStats}
+import upickle.default._
 
 object Extract {
   val selectedTeams = List(
@@ -11,6 +12,30 @@ object Extract {
     "Milwaukee Bucks"
   ).take(1)
 
+  def writeOrReadBack[T: ReadWriter](
+      file: os.Path,
+      getRemoteData: () => T
+  ): T = {
+    if (!os.exists(file)) {
+      val data = getRemoteData()
+      Utils.writeToFile[T](data, file)
+
+      data
+    } else {
+      Utils.readFromFile[T](file)
+    }
+  }
+
+  def getTeams(output: os.Path, filterTeams: Team => Boolean) = {
+    def getData() = {
+      EndpointResponse
+        .getTeams()
+        .filter(filterTeams)
+    }
+
+    writeOrReadBack(output, getData)
+  }
+
   def getStats(stats_output: os.Path, games_output: os.Path) = {
     if (!os.exists(stats_output) || !os.exists(games_output)) {
       val teamIds = EndpointResponse

+ 12 - 0
src/main/scala/Main.scala

@@ -1,10 +1,22 @@
 import org.apache.spark.sql.SparkSession
 
+import game._
 import extract.Extract
 
 object Main extends App {
+  val teams_output = os.pwd / "teams.json"
   val stats_output = os.pwd / "stats.json"
   val games_output = os.pwd / "games.json"
 
+  val selectedTeams = List(
+    "Phoenix Suns",
+    "Atlanta Hawks",
+    "Los Angeles Lakers",
+    "Milwaukee Bucks"
+  )
+
   println("Hello, World!")
+  val teamFilter = (team: Team) => selectedTeams.contains(team.full_name)
+
+  val teams = Extract.getTeams(teams_output, teamFilter)
   Extract.getStats(stats_output, games_output)