Link game pages to internet archive
[stouyapi.git] / bin / import-game-data.php
index 260773383e18d812cb26764d7773d3722dd691b4..cfd16308e5eba6f93d3fbc634c39600d5d525271 100755 (executable)
@@ -7,6 +7,7 @@
  * @author Christian Weiske <cweiske@cweiske.de>
  */
 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])) {
     error('Pass the path to a "folders" file with game data json files folder names');
@@ -16,11 +17,13 @@ if (!is_file($foldersFile)) {
     error('Given path is not a file: ' . $foldersFile);
 }
 
-$GLOBALS['packagelists']['cweiskepicks'] = [
-    'de.eiswuxe.blookid2',
-    'com.cosmos.babyloniantwins',
-    'com.inverseblue.skyriders',
-];
+//default configuration values
+$GLOBALS['packagelists'] = [];
+$GLOBALS['urlRewrites']  = [];
+$cfgFile = __DIR__ . '/../config.php';
+if (file_exists($cfgFile)) {
+    include $cfgFile;
+}
 
 $wwwDir = __DIR__ . '/../www/';
 
@@ -152,10 +155,13 @@ function buildDiscover(array $games)
         $data, 'Best rated',
         filterBestRated($games, 10)
     );
-    addDiscoverRow(
-        $data, "cweiske's picks",
-        filterByPackageNames($games, $GLOBALS['packagelists']['cweiskepicks'])
-    );
+
+    foreach ($GLOBALS['packagelists'] as $listTitle => $listPackageNames) {
+        addDiscoverRow(
+            $data, $listTitle,
+            filterByPackageNames($games, $listPackageNames)
+        );
+    }
 
     addDiscoverRow(
         $data, 'Special',
@@ -369,7 +375,7 @@ function buildAppDownload($game, $release)
             'fileSize'      => $release->size,
             'version'       => $release->uuid,
             'contentRating' => $game->contentRating,
-            'downloadLink'  => $release->url,
+            'downloadLink'  => rewriteUrl($release->url),
         ]
     ];
 }
@@ -380,7 +386,7 @@ function buildProduct($product)
         return null;
     }
     return [
-        'type'          => 'entitlement',
+        'type'          => $product->type ?? 'entitlement',
         'identifier'    => $product->identifier,
         'name'          => $product->name,
         'description'   => $product->description ?? '',
@@ -414,15 +420,17 @@ function buildDetails($game)
             $mediaTiles[] = [
                 'type' => 'image',
                 'urls' => [
-                    'thumbnail' => $medium->thumb,
+                    'thumbnail' => $medium->thumb ?? $medium->url,
                     'full'      => $medium->url,
                 ],
             ];
         } else {
-            $mediaTiles[] = [
-                'type' => 'video',
-                'url'  => $medium->url,
-            ];
+            if (!isUnsupportedVideoUrl($medium->url)) {
+                $mediaTiles[] = [
+                    'type' => 'video',
+                    'url'  => $medium->url,
+                ];
+            }
         }
     }
 
@@ -441,6 +449,13 @@ function buildDetails($game)
         $product = buildProduct($gamePromoted);
     }
 
+    $iaUrl = null;
+    if (isset($game->latestRelease->url)
+        && substr($game->latestRelease->url, 0, 29) == 'https://archive.org/download/'
+    ) {
+        $iaUrl = dirname($game->latestRelease->url) . '/';
+    }
+
     // http://cweiske.de/ouya-store-api-docs.htm#get-https-devs-ouya-tv-api-v1-details
     return [
         'type'             => 'Game',
@@ -499,6 +514,10 @@ function buildDetails($game)
 
         'promotedProduct' => $product,
         'buttons'         => $buttons,
+
+        'stouyapi' => [
+            'internet-archive' => $iaUrl,
+        ]
     ];
 }
 
@@ -586,11 +605,11 @@ function buildSearch($games)
 function dummyEncrypt($data)
 {
     return [
-        'key'  => base64_encode('0123456789abcdef') . "\n",
-        'iv'   => 't3jir1LHpICunvhlM76edQ==' . "\n",//random bytes
+        'key'  => base64_encode('0123456789abcdef'),
+        'iv'   => 't3jir1LHpICunvhlM76edQ==',//random bytes
         'blob' => base64_encode(
             json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
-        ) . "\n",
+        ),
     ];
 }
 
@@ -691,11 +710,6 @@ function buildDiscoverGameTile($game)
     ];
 }
 
-function categoryPath($title)
-{
-    return str_replace(['/', '\\', ' ', '+', '?'], '_', $title);
-}
-
 function getAllAges($games)
 {
     $ages = [];
@@ -852,6 +866,16 @@ function getPromotedProduct($game)
     return null;
 }
 
+/**
+ * vimeo only work with HTTPS now,
+ * and the OUYA does not support SNI.
+ * We get SSL errors and no video for them :/
+ */
+function isUnsupportedVideoUrl($url)
+{
+    return strpos($url, '://vimeo.com/') !== false;
+}
+
 function removeMakeGames(array $games)
 {
     return filterByGenre($games, 'Tutorials', true);
@@ -868,6 +892,14 @@ function removeMakeGenres($genres)
     return $filtered;
 }
 
+function rewriteUrl($url)
+{
+    foreach ($GLOBALS['urlRewrites'] as $pattern => $replacement) {
+        $url = preg_replace($pattern, $replacement, $url);
+    }
+    return $url;
+}
+
 function writeJson($path, $data)
 {
     global $wwwDir;