Own schema for game data
authorChristian Weiske <cweiske@cweiske.de>
Sun, 3 Nov 2019 17:11:47 +0000 (18:11 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Sun, 3 Nov 2019 17:11:47 +0000 (18:11 +0100)
example-game.json [new file with mode: 0644]
game-metadata.html

diff --git a/example-game.json b/example-game.json
new file mode 100644 (file)
index 0000000..63f0e5c
--- /dev/null
@@ -0,0 +1,71 @@
+{
+    "uuid": "780688a9-95ee-429a-8755-69a8d0c88fe0",
+    "package": "de.eiswuxe.blookid2",
+    "title": "Bloo Kid 2",
+    "description": "A classic 2D retro-style platformer\r\nFeatures:\r\nFoo",
+    "players": [
+        1, 2
+    ],
+    "genres": [
+        "Platformer",
+        "Retro"
+    ],
+
+    "releases": [
+        {
+            "name": "1.6",
+            "uuid": "780688a9-95ee-429a-8755-69a8d0c88fe0",
+            "date": "2015-10-23T09:58:19Z",
+            "latest": true,
+
+            "url": "http://example.org/game-1.6.apk",
+            "size": 25507828,
+            "md5sum": "a5b0f82d54df5f551a64295e43771a10",
+            
+            "publicSize": 27275,
+            "nativeSize": 20292
+        }
+    ],
+
+    "media": {
+        "discover": "http://example.org/game-menu.jpg",
+        "large": "http://example.org/game.jpg",
+        "video": "https://vimeo.com/141878938",
+        "screenshots": [
+            "http://example.org/game-1.jpg",
+            "http://example.org/game-2.jpg"
+        ]
+    },
+
+    "developer": {
+        "name": "ACME",
+        "supportEmail": "acme@example.org",
+        "supportPhone": "+49 12345 67890",
+        "founder": false
+    },
+
+    "contentRating": "Everyone",
+    "website": "http://www.winterworks.de",
+    "firstPublishedAt": "2015-10-09T07:53:25Z",
+    "inAppPurchases": false,
+    "overview": "Released in October 2015 by winterworks GmbH.",
+    "premium": false,
+
+    "rating": {
+        "likeCount": 0,
+        "average": 4.1,
+        "count": 355
+    },
+
+    "products": [
+        {
+            "promoted": true,
+            "identifier": "full_version",
+            "name": "Unlock full game",
+            "description": "Remove the 9 satellites limitation",
+            "localPrice": 1.99,
+            "originalPrice": 5.00,
+            "currency": "EUR"
+        }
+    ]
+}
index a8252163815e7f15edce0caba1f12a07d17a8231..11c226d0b687f540e75778b7ed41e31e8fdd7601 100644 (file)
@@ -11,6 +11,7 @@
     <tr>
      <th>Group</th>
      <th>Datum</th>
     <tr>
      <th>Group</th>
      <th>Datum</th>
+     <th>Game data field</th>
      <th><a href="http://cweiske.de/ouya-store-api-docs.htm#get-https-devs-ouya-tv-api-v1-discover">Discover field</a></th>
      <th><a href="http://cweiske.de/ouya-store-api-docs.htm#get-https-devs-ouya-tv-api-v1-apps-xxx">App details field</a></th>
      <th><a href="https://gitlab.com/devirich/BrewyaOnOuya/blob/master/store/models.py">BrewyaOnOuya field</a></th>
      <th><a href="http://cweiske.de/ouya-store-api-docs.htm#get-https-devs-ouya-tv-api-v1-discover">Discover field</a></th>
      <th><a href="http://cweiske.de/ouya-store-api-docs.htm#get-https-devs-ouya-tv-api-v1-apps-xxx">App details field</a></th>
      <th><a href="https://gitlab.com/devirich/BrewyaOnOuya/blob/master/store/models.py">BrewyaOnOuya field</a></th>
@@ -25,6 +26,7 @@
      <td>Game UUID</td>
      <td>uuid</td>
      <td>uuid</td>
      <td>Game UUID</td>
      <td>uuid</td>
      <td>uuid</td>
+     <td>uuid</td>
      <td>App.uuid</td>
      <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
      <td></td>
      <td>App.uuid</td>
      <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
      <td></td>
@@ -34,6 +36,7 @@
      <td>Game title</td>
      <td>title</td>
      <td>title</td>
      <td>Game title</td>
      <td>title</td>
      <td>title</td>
+     <td>title</td>
      <td>App.title</td>
      <td>Bloo Kid 2</td>
      <td></td>
      <td>App.title</td>
      <td>Bloo Kid 2</td>
      <td></td>
@@ -41,6 +44,7 @@
     <tr>
      <td>app</td>
      <td>Overview text</td>
     <tr>
      <td>app</td>
      <td>Overview text</td>
+     <td>overview (optional)</td>
      <td></td>
      <td>overview</td>
      <td>App.overview</td>
      <td></td>
      <td>overview</td>
      <td>App.overview</td>
@@ -50,6 +54,7 @@
     <tr>
      <td>app</td>
      <td>Description</td>
     <tr>
      <td>app</td>
      <td>Description</td>
+     <td>description</td>
      <td></td>
      <td>description</td>
      <td>App.description</td>
      <td></td>
      <td>description</td>
      <td>App.description</td>
@@ -59,6 +64,7 @@
     <tr>
      <td>app</td>
      <td>Number of players</td>
     <tr>
      <td>app</td>
      <td>Number of players</td>
+     <td>players</td>
      <td>gamerNumbers</td>
      <td>gamerNumbers</td>
      <td>App.playerNumbers</td>
      <td>gamerNumbers</td>
      <td>gamerNumbers</td>
      <td>App.playerNumbers</td>
@@ -70,6 +76,7 @@
      <td>Genre list</td>
      <td>genres</td>
      <td>genres</td>
      <td>Genre list</td>
      <td>genres</td>
      <td>genres</td>
+     <td>genres</td>
      <td>App.genres</td>
      <td>[Platformer, Retro]</td>
      <td>
      <td>App.genres</td>
      <td>[Platformer, Retro]</td>
      <td>
      <td>app</td>
      <td>Package name</td>
      <td>package</td>
      <td>app</td>
      <td>Package name</td>
      <td>package</td>
+     <td>package</td>
      <td></td>
      <td>App.packageName</td>
      <td>evil.corptron.DuckGame</td>
      <td></td>
      <td>App.packageName</td>
      <td>evil.corptron.DuckGame</td>
-     <td></td>
+     <td>Run "aapt dump badging file.apk", field "package: name"</td>
     </tr>
     <tr>
      <td>app</td>
      <td>Details URL</td>
     </tr>
     <tr>
      <td>app</td>
      <td>Details URL</td>
+     <td>-</td>
      <td>url</td>
      <td></td>
      <td>url</td>
      <td></td>
-     <td>?</td>
+     <td>-</td>
      <td>ouya://launcher/details?app=evil.corptron.DuckGame</td>
      <td></td>
     </tr>
     <tr>
      <td>app</td>
      <td>Game website</td>
      <td>ouya://launcher/details?app=evil.corptron.DuckGame</td>
      <td></td>
     </tr>
     <tr>
      <td>app</td>
      <td>Game website</td>
+     <td>website</td>
      <td></td>
      <td>website</td>
      <td>App.website</td>
      <td></td>
      <td>website</td>
      <td>App.website</td>
     <tr>
      <td>app</td>
      <td>Content rating</td>
     <tr>
      <td>app</td>
      <td>Content rating</td>
+     <td>contentRating (optional)</td>
      <td>contentRating</td>
      <td>contentRating</td>
      <td>App.contentRating</td>
      <td>contentRating</td>
      <td>contentRating</td>
      <td>App.contentRating</td>
     <tr>
      <td>app</td>
      <td>FIXME</td>
     <tr>
      <td>app</td>
      <td>FIXME</td>
+     <td>premium (optional)</td>
      <td>premium</td>
      <td>premium</td>
      <td>App.premium</td>
      <td>premium</td>
      <td>premium</td>
      <td>App.premium</td>
     <tr>
      <td>app</td>
      <td>When the game was published</td>
     <tr>
      <td>app</td>
      <td>When the game was published</td>
+     <td>firstPublishedAt (optional)</td>
      <td></td>
      <td>firstPublishedAt</td>
      <td>App.firstPublishedAt</td>
      <td></td>
      <td>firstPublishedAt</td>
      <td>App.firstPublishedAt</td>
     <tr>
      <td>app</td>
      <td>Are there in-app purchases?</td>
     <tr>
      <td>app</td>
      <td>Are there in-app purchases?</td>
+     <td>inAppPurchases (optional)</td>
      <td>inAppPurchases</td>
      <td></td>
      <td>-</td>
      <td>inAppPurchases</td>
      <td></td>
      <td>-</td>
     <tr>
      <td>app</td>
      <td>FIXME</td>
     <tr>
      <td>app</td>
      <td>FIXME</td>
+     <td>-</td>
      <td>type</td>
      <td></td>
      <td>-</td>
      <td>type</td>
      <td></td>
      <td>-</td>
     <tr>
      <td>app</td>
      <td>Last update (unix timestamp)</td>
     <tr>
      <td>app</td>
      <td>Last update (unix timestamp)</td>
+     <td>-</td>
      <td>updated_at</td>
      <td></td>
      <td>AppVersion.releaseTime</td>
      <td>updated_at</td>
      <td></td>
      <td>AppVersion.releaseTime</td>
     <tr>
      <td>app</td>
      <td>Last update</td>
     <tr>
      <td>app</td>
      <td>Last update</td>
+     <td>releases.*.date (when "latest")</td>
      <td>updatedAt</td>
      <td></td>
      <td>AppVersion.releaseTime</td>
      <td>updatedAt</td>
      <td></td>
      <td>AppVersion.releaseTime</td>
     <tr>
      <td>rating</td>
      <td>Number of likes?</td>
     <tr>
      <td>rating</td>
      <td>Number of likes?</td>
+     <td>rating.likeCount</td>
      <td></td>
      <td>likeCount</td>
      <td>Rating.likeCount</td>
      <td></td>
      <td>likeCount</td>
      <td>Rating.likeCount</td>
      <td>rating</td>
      <td>Average rating</td>
      <td>rating.average</td>
      <td>rating</td>
      <td>Average rating</td>
      <td>rating.average</td>
+     <td>rating.average</td>
      <td>ratingAverage</td>
      <td>Rating.rating</td>
      <td>4.1</td>
      <td>ratingAverage</td>
      <td>Rating.rating</td>
      <td>4.1</td>
      <td>rating</td>
      <td>Number of ratings</td>
      <td>rating.count</td>
      <td>rating</td>
      <td>Number of ratings</td>
      <td>rating.count</td>
+     <td>rating.count</td>
      <td>ratingCount</td>
      <td>Rating.reviewCount</td>
      <td>355</td>
      <td>ratingCount</td>
      <td>Rating.reviewCount</td>
      <td>355</td>
     <tr>
      <td>product</td>
      <td>Promotion data</td>
     <tr>
      <td>product</td>
      <td>Promotion data</td>
+     <td>products.* (when "promoted=true")</td>
      <td>promotedProduct</td>
      <td>promotedProduct</td>
      <td>App.promotedProduct</td>
      <td>promotedProduct</td>
      <td>promotedProduct</td>
      <td>App.promotedProduct</td>
     <tr>
      <td>product</td>
      <td>Product key</td>
     <tr>
      <td>product</td>
      <td>Product key</td>
+     <td>products.*.identifier</td>
      <td>promotedProduct.identifier</td>
      <td>promotedProduct.identifier</td>
      <td>Product.identifier</td>
      <td>promotedProduct.identifier</td>
      <td>promotedProduct.identifier</td>
      <td>Product.identifier</td>
     <tr>
      <td>product</td>
      <td>Product name</td>
     <tr>
      <td>product</td>
      <td>Product name</td>
+     <td>products.*.name</td>
      <td>promotedProduct.name</td>
      <td>promotedProduct.name</td>
      <td>Product.name</td>
      <td>promotedProduct.name</td>
      <td>promotedProduct.name</td>
      <td>Product.name</td>
     <tr>
      <td>product</td>
      <td>Product currency</td>
     <tr>
      <td>product</td>
      <td>Product currency</td>
+     <td>products.*.currency</td>
      <td>promotedProduct.currency</td>
      <td>promotedProduct.currency</td>
      <td>-</td>
      <td>promotedProduct.currency</td>
      <td>promotedProduct.currency</td>
      <td>-</td>
     <tr>
      <td>product</td>
      <td>Product description</td>
     <tr>
      <td>product</td>
      <td>Product description</td>
+     <td>products.*.description</td>
      <td>promotedProduct.description</td>
      <td>promotedProduct.description</td>
      <td>Product.description</td>
      <td>promotedProduct.description</td>
      <td>promotedProduct.description</td>
      <td>Product.description</td>
     <tr>
      <td>product</td>
      <td>Saving</td>
     <tr>
      <td>product</td>
      <td>Saving</td>
+     <td>-</td>
      <td>promotedProduct.percentOff</td>
      <td>promotedProduct.percentOff</td>
      <td>-</td>
      <td>promotedProduct.percentOff</td>
      <td>promotedProduct.percentOff</td>
      <td>-</td>
     <tr>
      <td>product</td>
      <td>Current price</td>
     <tr>
      <td>product</td>
      <td>Current price</td>
+     <td>products.*.localPrice</td>
      <td>promotedProduct.localPrice</td>
      <td>promotedProduct.localPrice</td>
      <td>-</td>
      <td>promotedProduct.localPrice</td>
      <td>promotedProduct.localPrice</td>
      <td>-</td>
     <tr>
      <td>product</td>
      <td>Previous price</td>
     <tr>
      <td>product</td>
      <td>Previous price</td>
+     <td>products.*.originalPrice</td>
      <td>promotedProduct.originalPrice</td>
      <td>promotedProduct.originalPrice</td>
      <td>Product.originalPrice</td>
      <td>promotedProduct.originalPrice</td>
      <td>promotedProduct.originalPrice</td>
      <td>Product.originalPrice</td>
 
     <tr>
      <td>apk</td>
 
     <tr>
      <td>apk</td>
-     <td>versionNumber</td>
+     <td>Human readable version</td>
+     <td>releases.*.name</td>
      <td>latestVersion.versionNumber</td>
      <td>versionNumber</td>
      <td>Apk.versionName</td>
      <td>1.6</td>
      <td>latestVersion.versionNumber</td>
      <td>versionNumber</td>
      <td>Apk.versionName</td>
      <td>1.6</td>
-     <td></td>
+     <td>Run "aapt dump badging file.apk", field "versionName"</td>
     </tr>
     <tr>
      <td>apk</td>
      <td>UUID of latest apk version</td>
     </tr>
     <tr>
      <td>apk</td>
      <td>UUID of latest apk version</td>
+     <td>releases.*.uuid</td>
      <td>latestVersion.uuid</td>
      <td>latestVersion</td>
      <td>latestVersion.uuid</td>
      <td>latestVersion</td>
-     <td>Apk.versionCode</td>
+     <td>-</td>
      <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
      <td></td>
     </tr>
     <tr>
      <td>apk</td>
      <td>FIXME</td>
      <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
      <td></td>
     </tr>
     <tr>
      <td>apk</td>
      <td>FIXME</td>
+     <td>releases.*.publicSize</td>
      <td></td>
      <td>publicSize</td>
      <td>Apk.publicSize</td>
      <td></td>
      <td>publicSize</td>
      <td>Apk.publicSize</td>
     <tr>
      <td>apk</td>
      <td>FIXME</td>
     <tr>
      <td>apk</td>
      <td>FIXME</td>
+     <td>releases.*.nativeSize</td>
      <td></td>
      <td>nativeSize</td>
      <td>Apk.nativeSize</td>
      <td></td>
      <td>nativeSize</td>
      <td>Apk.nativeSize</td>
     <tr>
      <td>apk</td>
      <td>MD5 file hash</td>
     <tr>
      <td>apk</td>
      <td>MD5 file hash</td>
+     <td>releases.*.md5sum</td>
      <td>latestVersion.apk.md5sum</td>
      <td>md5sum</td>
      <td>Apk.md5sum</td>
      <td>latestVersion.apk.md5sum</td>
      <td>md5sum</td>
      <td>Apk.md5sum</td>
     <tr>
      <td>apk</td>
      <td>APK file size</td>
     <tr>
      <td>apk</td>
      <td>APK file size</td>
+     <td>releases.*.size</td>
      <td></td>
      <td>apkFileSize</td>
      <td>Apk.size</td>
      <td></td>
      <td>apkFileSize</td>
      <td>Apk.size</td>
     <tr>
      <td>apk</td>
      <td>APK publish date</td>
     <tr>
      <td>apk</td>
      <td>APK publish date</td>
+     <td>releases.*.date</td>
      <td></td>
      <td>publishedAt</td>
      <td>AppVersion.releaseTime</td>
      <td></td>
      <td>publishedAt</td>
      <td>AppVersion.releaseTime</td>
     <tr>
      <td>apk</td>
      <td>downloadLink</td>
     <tr>
      <td>apk</td>
      <td>downloadLink</td>
+     <td>releases.*.url</td>
      <td></td>
      <td></td>
      <td>Apk.location</td>
      <td></td>
      <td></td>
      <td>Apk.location</td>
     <tr>
      <td>media</td>
      <td>Discover image</td>
     <tr>
      <td>media</td>
      <td>Discover image</td>
+     <td>media.discover</td>
      <td>image</td>
      <td></td>
      <td>Media</td>
      <td>image</td>
      <td></td>
      <td>Media</td>
     <tr>
      <td>media</td>
      <td>Large image</td>
     <tr>
      <td>media</td>
      <td>Large image</td>
+     <td>media.large</td>
      <td></td>
      <td>mainImageFullUrl</td>
      <td>App.titleImage</td>
      <td></td>
      <td>mainImageFullUrl</td>
      <td>App.titleImage</td>
     <tr>
      <td>media</td>
      <td>Video</td>
     <tr>
      <td>media</td>
      <td>Video</td>
+     <td>media.video</td>
      <td></td>
      <td>videoUrl</td>
      <td>Media</td>
      <td></td>
      <td>videoUrl</td>
      <td>Media</td>
     <tr>
      <td>media</td>
      <td>Game screenshots</td>
     <tr>
      <td>media</td>
      <td>Game screenshots</td>
+     <td>media.screenshots</td>
      <td></td>
      <td>filepickerScreenshots</td>
      <td>Media</td>
      <td></td>
      <td>filepickerScreenshots</td>
      <td>Media</td>
     <tr>
      <td>media</td>
      <td>FIXME</td>
     <tr>
      <td>media</td>
      <td>FIXME</td>
+     <td>-</td>
      <td></td>
      <td>mobileAppIcon</td>
      <td>App.iconImage</td>
      <td></td>
      <td>mobileAppIcon</td>
      <td>App.iconImage</td>
     <tr>
      <td>developer</td>
      <td>Developer name</td>
     <tr>
      <td>developer</td>
      <td>Developer name</td>
+     <td>developer.name</td>
      <td></td>
      <td>developer</td>
      <td>Developer.name</td>
      <td></td>
      <td>developer</td>
      <td>Developer.name</td>
     <tr>
      <td>developer</td>
      <td>Developer support mail</td>
     <tr>
      <td>developer</td>
      <td>Developer support mail</td>
+     <td>developer.supportEmail</td>
      <td></td>
      <td>supportEmailAddress</td>
      <td>Developer.supportEmail</td>
      <td></td>
      <td>supportEmailAddress</td>
      <td>Developer.supportEmail</td>
     <tr>
      <td>developer</td>
      <td>Support phone number</td>
     <tr>
      <td>developer</td>
      <td>Support phone number</td>
+     <td>developer.supportPhone</td>
      <td></td>
      <td>supportPhone</td>
      <td>Developer.supportPhone</td>
      <td></td>
      <td>supportPhone</td>
      <td>Developer.supportPhone</td>
     <tr>
      <td>developer</td>
      <td>Developer is a founder</td>
     <tr>
      <td>developer</td>
      <td>Developer is a founder</td>
+     <td>developer.founder</td>
      <td></td>
      <td>founder</td>
      <td>Developer.founder</td>
      <td></td>
      <td>founder</td>
      <td>Developer.founder</td>