X-Git-Url: https://git.cweiske.de/stouyapi.git/blobdiff_plain/1b81dbfd87056ef6c8b0f2b77fcdf60c86fb4e39..19ea6b749f66d07ca66a1034c5f428f8dc482e14:/bin/import-game-data.php diff --git a/bin/import-game-data.php b/bin/import-game-data.php index ee6c1d9..4495dc3 100755 --- a/bin/import-game-data.php +++ b/bin/import-game-data.php @@ -9,16 +9,36 @@ ini_set('xdebug.halt_level', E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE); require_once __DIR__ . '/functions.php'; require_once __DIR__ . '/filters.php'; -if (!isset($argv[1])) { + +//command line option parsing +$optind = null; +$opts = getopt('h', ['help', 'mini', 'noqr'], $optind); +$args = array_slice($argv, $optind); + +if (isset($opts['help']) || isset($opts['h'])) { + echo "Import games from a OUYA game data repository\n"; + echo "\n"; + echo "Usage: import-game-data.php [--mini] [--noqr] [--help|-h]\n"; + echo " --mini Generate small but ugly JSON files\n"; + echo " --noqr Do not generate and link QR code images\n"; + exit(0); +} + +if (!isset($args[0])) { error('Pass the path to a "folders" file with game data json files folder names'); } -$foldersFile = $argv[1]; +$foldersFile = $args[0]; if (!is_file($foldersFile)) { error('Given path is not a file: ' . $foldersFile); } +$cfgMini = isset($opts['mini']); +$cfgEnableQr = !isset($opts['noqr']); + + //default configuration values $GLOBALS['baseUrl'] = 'http://ouya.cweiske.de/'; +$GLOBALS['categorySubtitles'] = []; $GLOBALS['packagelists'] = []; $GLOBALS['urlRewrites'] = []; $cfgFile = __DIR__ . '/../config.php'; @@ -28,9 +48,11 @@ if (file_exists($cfgFile)) { $wwwDir = __DIR__ . '/../www/'; -$qrDir = $wwwDir . 'gen-qr/'; -if (!is_dir($qrDir)) { - mkdir($qrDir, 0775); +if ($cfgEnableQr) { + $qrDir = $wwwDir . 'gen-qr/'; + if (!is_dir($qrDir)) { + mkdir($qrDir, 0775); + } } $baseDir = dirname($foldersFile); @@ -49,6 +71,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 = []; @@ -290,15 +319,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); @@ -518,11 +553,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, @@ -803,6 +845,8 @@ function getAllGenres($games) function addMissingGameProperties($game) { + global $cfgEnableQr; + if (!isset($game->overview)) { $game->overview = null; } @@ -846,6 +890,9 @@ function addMissingGameProperties($game) $firstReleaseTimestamp = null; $latestReleaseTimestamp = 0; foreach ($game->releases as $release) { + if (isset($release->broken) && $release->broken) { + continue; + } if (!isset($release->publicSize)) { $release->publicSize = 0; } @@ -892,7 +939,7 @@ function addMissingGameProperties($game) $game->developer->founder = false; } - if ($game->website) { + if ($cfgEnableQr && $game->website) { $qrfileName = preg_replace('#[^\\w\\d._-]#', '_', $game->website) . '.png'; $qrfilePath = $GLOBALS['qrDir'] . $qrfileName; if (!file_exists($qrfilePath)) { @@ -1014,15 +1061,19 @@ function rewriteUrl($url) function writeJson($path, $data) { - global $wwwDir; + global $cfgMini, $wwwDir; $fullPath = $wwwDir . $path; $dir = dirname($fullPath); if (!is_dir($dir)) { mkdir($dir, 0777, true); } + $opts = JSON_UNESCAPED_SLASHES; + if (!$cfgMini) { + $opts |= JSON_PRETTY_PRINT; + } file_put_contents( $fullPath, - json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n" + json_encode($data, $opts) . "\n" ); }