From: Christian Weiske Date: Tue, 14 Jan 2020 21:23:16 +0000 (+0100) Subject: much better ranking X-Git-Tag: v1.0.0~15 X-Git-Url: https://git.cweiske.de/stouyapi.git/commitdiff_plain/44491ef1b9b52e4ed4a5f245cbbeef123a436b18?hp=a2ab16cfec3ac79d5b293c135e5430b07d617e3f much better ranking --- diff --git a/bin/filters.php b/bin/filters.php index 703114a..04a998f 100644 --- a/bin/filters.php +++ b/bin/filters.php @@ -84,7 +84,7 @@ function filterBestRated($origGames, $limit) usort( $games, function ($gameA, $gameB) { - return $gameB->rating->average - $gameA->rating->average; + return ($gameB->rating->rank - $gameA->rating->rank) * 100; } ); diff --git a/bin/import-game-data.php b/bin/import-game-data.php index 2d0076e..467dac5 100755 --- a/bin/import-game-data.php +++ b/bin/import-game-data.php @@ -98,6 +98,8 @@ foreach ($gameFiles as $gameFile) { } } +calculateRank($games); + foreach ($developers as $developer) { writeJson( //index.htm does not need a rewrite rule @@ -733,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) {