X-Git-Url: https://git.cweiske.de/stouyapi.git/blobdiff_plain/75dd5e0848530329858aa816823b33a66709ef54..ad9f3cf5a07338134a29fee4b6215c50cb8142c8:/bin/import-game-data.php?ds=sidebyside diff --git a/bin/import-game-data.php b/bin/import-game-data.php index d4033af..0dc4926 100755 --- a/bin/import-game-data.php +++ b/bin/import-game-data.php @@ -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 @@ -113,14 +107,36 @@ foreach ($developers as $developer) { . '/products/index.htm', buildDeveloperProducts($developer['products'], $developer['info']) ); + writeJson( + //index.htm does not need a rewrite rule + 'api/v1/developers/' . $developer['info']->uuid + . '/current_gamer', + buildDeveloperCurrentGamer() + ); } writeJson('api/v1/discover-data/discover.json', buildDiscover($games)); writeJson('api/v1/discover-data/home.json', buildDiscoverHome($games)); +//make +writeJson( + 'api/v1/discover-data/tutorials.json', + 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) { + $games = removeMakeGames($games); $data = [ 'title' => 'DISCOVER', 'rows' => [], @@ -164,7 +180,7 @@ function buildDiscover(array $games) ); } - $genres = getAllGenres($games); + $genres = removeMakeGenres(getAllGenres($games)); sort($genres); addChunkedDiscoverRows($data, $genres, 'Genres'); @@ -206,12 +222,7 @@ function buildDiscoverCategory($name, $games) filterBestRated($games, 10) ); - usort( - $games, - function ($gameA, $gameB) { - return strcmp($gameA->title, $gameB->title); - } - ); + $games = sortByTitle($games); $chunks = array_chunk($games, 4); foreach ($chunks as $chunkGames) { addDiscoverRow($data, '', $chunkGames); @@ -220,6 +231,20 @@ function buildDiscoverCategory($name, $games) return $data; } +function buildMakeCategory($name, $games) +{ + $data = [ + 'title' => $name, + 'rows' => [], + 'tiles' => [], + ]; + + $games = sortByTitle($games); + addDiscoverRow($data, '', $games); + + return $data; +} + function buildDiscoverHome(array $games) { //we do not want anything here for now @@ -432,6 +457,16 @@ function buildDetails($game) ]; } +function buildDeveloperCurrentGamer() +{ + return [ + 'gamer' => [ + 'uuid' => '00702342-0000-1111-2222-c3e1500cafe2', + 'username' => 'stouyapi', + ], + ]; +} + /** * For /api/v1/developers/xxx/products/?only=yyy */ @@ -486,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 [ @@ -698,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) { @@ -732,6 +807,22 @@ function getPromotedProduct($game) return null; } +function removeMakeGames(array $games) +{ + return filterByGenre($games, 'Tutorials', true); +} + +function removeMakeGenres($genres) +{ + $filtered = []; + foreach ($genres as $genre) { + if ($genre != 'Tutorials' && $genre != 'Builds') { + $filtered[] = $genre; + } + } + return $filtered; +} + function writeJson($path, $data) { global $wwwDir;