X-Git-Url: https://git.cweiske.de/stouyapi.git/blobdiff_plain/9697c02b2e3ae0d6ee67ecf7f29cf322d6b7238c..b29b50fec73ea9c3e78a058e5c8948a0d0e5f053:/bin/import-game-data.php diff --git a/bin/import-game-data.php b/bin/import-game-data.php index c0b500c..5d454f4 100755 --- a/bin/import-game-data.php +++ b/bin/import-game-data.php @@ -18,6 +18,8 @@ if (!is_file($foldersFile)) { } //default configuration values +$GLOBALS['baseUrl'] = 'http://ouya.cweiske.de/'; +$GLOBALS['categorySubtitles'] = []; $GLOBALS['packagelists'] = []; $GLOBALS['urlRewrites'] = []; $cfgFile = __DIR__ . '/../config.php'; @@ -27,6 +29,11 @@ if (file_exists($cfgFile)) { $wwwDir = __DIR__ . '/../www/'; +$qrDir = $wwwDir . 'gen-qr/'; +if (!is_dir($qrDir)) { + mkdir($qrDir, 0775); +} + $baseDir = dirname($foldersFile); $gameFiles = []; foreach (file($foldersFile) as $line) { @@ -43,6 +50,13 @@ foreach (file($foldersFile) as $line) { } } +//store git repository version of last folder +$workdir = getcwd(); +chdir($folder); +$gitDate = `git log --max-count=1 --format="%h %cI"`; +chdir($workdir); +file_put_contents($wwwDir . '/game-data-version', $gitDate); + $games = []; $count = 0; $developers = []; @@ -166,12 +180,12 @@ function buildDiscover(array $games) ]; addDiscoverRow( - $data, 'Last Updated', - filterLastUpdated($games, 10) + $data, 'New games', + filterLastAdded($games, 10) ); addDiscoverRow( - $data, 'Best rated', - filterBestRated($games, 10), + $data, 'Best rated games', + filterBestRatedGames($games, 10), true ); @@ -186,14 +200,20 @@ function buildDiscover(array $games) $data, 'Special', [ 'Best rated', + 'Best rated games', 'Most rated', 'Random', + 'Last updated', ] ); writeJson( 'api/v1/discover-data/' . categoryPath('Best rated') . '.json', buildSpecialCategory('Best rated', filterBestRated($games, 99)) ); + writeJson( + 'api/v1/discover-data/' . categoryPath('Best rated games') . '.json', + buildSpecialCategory('Best rated games', filterBestRatedGames($games, 99)) + ); writeJson( 'api/v1/discover-data/' . categoryPath('Most rated') . '.json', buildSpecialCategory('Most rated', filterMostDownloaded($games, 99)) @@ -205,6 +225,10 @@ function buildDiscover(array $games) filterRandom($games, 99) ) ); + writeJson( + 'api/v1/discover-data/' . categoryPath('Last updated') . '.json', + buildSpecialCategory('Last updated', filterLastUpdated($games, 99)) + ); $players = [ //1 => '1 player', @@ -216,7 +240,18 @@ function buildDiscover(array $games) foreach ($players as $num => $title) { writeJson( 'api/v1/discover-data/' . categoryPath($title) . '.json', - buildDiscoverCategory($title, filterByPlayers($games, $num)) + buildDiscoverCategory( + $title, + //I do not want emulators here, + // and neither Streaming apps + filterByGenre( + filterByGenre( + filterByPlayers($games, $num), + 'Emulator', true + ), + 'App', true + ) + ) ); } @@ -263,15 +298,21 @@ function buildDiscoverCategory($name, $games) 'rows' => [], 'tiles' => [], ]; - addDiscoverRow( - $data, 'Last Updated', - filterLastUpdated($games, 10) - ); - addDiscoverRow( - $data, 'Best rated', - filterBestRated($games, 10), - true - ); + if (isset($GLOBALS['categorySubtitles'][$name])) { + $data['stouyapi']['subtitle'] = $GLOBALS['categorySubtitles'][$name]; + } + + if (count($games) >= 20) { + addDiscoverRow( + $data, 'Last Updated', + filterLastUpdated($games, 10) + ); + addDiscoverRow( + $data, 'Best rated', + filterBestRated($games, 10), + true + ); + } $games = sortByTitle($games); $chunks = array_chunk($games, 4); @@ -410,7 +451,7 @@ function buildAppDownload($game, $release) 'fileSize' => $release->size, 'version' => $release->uuid, 'contentRating' => $game->contentRating, - 'downloadLink' => rewriteUrl($release->url), + 'downloadLink' => $release->url, ] ]; } @@ -491,11 +532,18 @@ function buildDetails($game, $linkDeveloperPage = false) $iaUrl = dirname($game->latestRelease->url) . '/'; } + $description = $game->description; + if (isset($game->notes) && trim($game->notes)) { + $description = "Technical notes:\r\n" . $game->notes + . "\r\n----\r\n" + . $description; + } + // http://cweiske.de/ouya-store-api-docs.htm#get-https-devs-ouya-tv-api-v1-details $data = [ 'type' => 'Game', 'title' => $game->title, - 'description' => $game->description, + 'description' => $description, 'gamerNumbers' => $game->players, 'genres' => $game->genres, @@ -814,7 +862,9 @@ function addMissingGameProperties($game) $game->rating->count = 0; } + $game->firstRelease = null; $game->latestRelease = null; + $firstReleaseTimestamp = null; $latestReleaseTimestamp = 0; foreach ($game->releases as $release) { if (!isset($release->publicSize)) { @@ -829,6 +879,15 @@ function addMissingGameProperties($game) $game->latestRelease = $release; $latestReleaseTimestamp = $releaseTimestamp; } + if ($firstReleaseTimestamp === null + || $releaseTimestamp < $firstReleaseTimestamp + ) { + $game->firstRelease = $release; + $firstReleaseTimestamp = $releaseTimestamp; + } + } + if ($game->firstRelease === null) { + error('No first release for ' . $game->packageName); } if ($game->latestRelease === null) { error('No latest release for ' . $game->packageName); @@ -853,6 +912,34 @@ function addMissingGameProperties($game) if (!isset($game->developer->founder)) { $game->developer->founder = false; } + + if ($game->website) { + $qrfileName = preg_replace('#[^\\w\\d._-]#', '_', $game->website) . '.png'; + $qrfilePath = $GLOBALS['qrDir'] . $qrfileName; + if (!file_exists($qrfilePath)) { + $cmd = __DIR__ . '/create-qr.sh' + . ' ' . escapeshellarg($game->website) + . ' ' . escapeshellarg($qrfilePath); + passthru($cmd, $retval); + if ($retval != 0) { + exit(20); + } + } + $qrUrlPath = $GLOBALS['baseUrl'] . 'gen-qr/' . $qrfileName; + $game->media[] = (object) [ + 'type' => 'image', + 'url' => $qrUrlPath, + ]; + } + + //rewrite urls from Internet Archive to our servers + $game->discover = rewriteUrl($game->discover); + foreach ($game->media as $medium) { + $medium->url = rewriteUrl($medium->url); + } + foreach ($game->releases as $release) { + $release->url = rewriteUrl($release->url); + } } /**