X-Git-Url: https://git.cweiske.de/stouyapi.git/blobdiff_plain/a2ab16cfec3ac79d5b293c135e5430b07d617e3f..ad9f3cf5a07338134a29fee4b6215c50cb8142c8:/bin/import-game-data.php diff --git a/bin/import-game-data.php b/bin/import-game-data.php index 2d0076e..0dc4926 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 @@ -122,6 +124,14 @@ writeJson( buildMakeCategory('Tutorials', filterByGenre($games, 'Tutorials')) ); +$searchLetters = 'abcdefghijklmnopqrstuvwxyz0123456789., '; +foreach (str_split($searchLetters) as $letter) { + $letterGames = filterBySearchWord($games, $letter); + writeJson( + 'api/v1/search-data/' . $letter . '.json', + buildSearch($letterGames) + ); +} function buildDiscover(array $games) @@ -212,12 +222,7 @@ function buildDiscoverCategory($name, $games) filterBestRated($games, 10) ); - usort( - $games, - function ($gameA, $gameB) { - return strcasecmp($gameA->title, $gameB->title); - } - ); + $games = sortByTitle($games); $chunks = array_chunk($games, 4); foreach ($chunks as $chunkGames) { addDiscoverRow($data, '', $chunkGames); @@ -234,12 +239,7 @@ function buildMakeCategory($name, $games) 'tiles' => [], ]; - usort( - $games, - function ($gameA, $gameB) { - return strcasecmp($gameA->title, $gameB->title); - } - ); + $games = sortByTitle($games); addDiscoverRow($data, '', $games); return $data; @@ -521,6 +521,23 @@ function buildPurchases($game) return $encryptedTwice; } +function buildSearch($games) +{ + $games = sortByTitle($games); + $results = []; + foreach ($games as $game) { + $results[] = [ + 'title' => $game->title, + 'url' => 'ouya://launcher/details?app=' . $game->packageName, + 'contentRating' => $game->contentRating, + ]; + } + return [ + 'count' => count($results), + 'results' => $results, + ]; +} + function dummyEncrypt($data) { return [ @@ -733,6 +750,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) {