much better ranking
[stouyapi.git] / bin / import-game-data.php
index cf6a047640861478b3758f4ac65b92bacd8afef8..467dac53d57ebf54270681856b72c82ab469e4e9 100755 (executable)
@@ -77,14 +77,6 @@ foreach ($gameFiles as $gameFile) {
         'api/v1/games/' . $game->packageName . '/purchases',
         buildPurchases($game)
     );
-    /**/
-
-    /* this crashes babylonian twins
-    writeJson(
-        'api/v1/games/' . $game->packageName . '/purchases',
-        "{}\n"
-    );
-    */
 
     writeJson(
         'api/v1/apps/' . $game->packageName . '.json',
@@ -106,6 +98,8 @@ foreach ($gameFiles as $gameFile) {
     }
 }
 
+calculateRank($games);
+
 foreach ($developers as $developer) {
     writeJson(
         //index.htm does not need a rewrite rule
@@ -134,6 +128,7 @@ writeJson(
 
 function buildDiscover(array $games)
 {
+    $games = removeMakeGames($games);
     $data = [
         'title' => 'DISCOVER',
         'rows'  => [],
@@ -740,6 +735,29 @@ function addMissingGameProperties($game)
     }
 }
 
+/**
+ * Implements a sensible ranking system described in
+ * https://stackoverflow.com/a/1411268/2826013
+ */
+function calculateRank(array $games)
+{
+    $averageRatings = array_map(
+        function ($game) {
+            return $game->rating->average;
+        },
+        $games
+    );
+    $average = array_sum($averageRatings) / count($averageRatings);
+    $C = $average;
+    $m = 500;
+
+    foreach ($games as $game) {
+        $R = $game->rating->average;
+        $v = $game->rating->count;
+        $game->rating->rank = ($R * $v + $C * $m) / ($v + $m);
+    }
+}
+
 function getFirstVideoUrl($media)
 {
     foreach ($media as $medium) {
@@ -774,6 +792,11 @@ function getPromotedProduct($game)
     return null;
 }
 
+function removeMakeGames(array $games)
+{
+    return filterByGenre($games, 'Tutorials', true);
+}
+
 function removeMakeGenres($genres)
 {
     $filtered = [];