Better JSON schema validation error messages
[ouya-game-data.git] / game-metadata.html
index 80f3f74f1fe1f986443541d6eb6fd1e7892bcb82..43eaf030e42bb879f341586bf1e343a5eb399228 100644 (file)
    </thead>
    <tbody>
 
    </thead>
    <tbody>
 
-    <tr>
-     <td>app</td>
-     <td>Game UUID</td>
-     <td>uuid</td>
-     <td>uuid</td>
-     <td>uuid</td>
-     <td>-</td>
-     <td>App.uuid</td>
-     <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
-     <td></td>
-    </tr>
     <tr>
      <td>app</td>
      <td>Game title</td>
     <tr>
      <td>app</td>
      <td>Game title</td>
     <tr>
      <td>app</td>
      <td>Package name</td>
     <tr>
      <td>app</td>
      <td>Package name</td>
-     <td>package</td>
+     <td>packageName</td>
      <td>package</td>
      <td></td>
      <td>apk.package</td>
      <td>package</td>
      <td></td>
      <td>apk.package</td>
     <tr>
      <td>app</td>
      <td>Game website</td>
     <tr>
      <td>app</td>
      <td>Game website</td>
-     <td>website</td>
+     <td>website (optional)</td>
      <td></td>
      <td>website</td>
      <td>-</td>
      <td></td>
      <td>website</td>
      <td>-</td>
      <td></td>
     </tr>
 
      <td></td>
     </tr>
 
+    <tr>
+     <td>?</td>
+     <td>Metadata about the file</td>
+     <td>-</td>
+     <td>-</td>
+     <td></td>
+     <td>metaData</td>
+     <td>-</td>
+     <td>["key:rating.average", "key:developer.name", "key:suggestedAge", "45.29 MiB"]</td>
+     <td>Always those 4 values and in the same order (at least for apps)</td>
+    </tr>
+
     <tr>
      <td>rating</td>
      <td>Number of likes?</td>
     <tr>
      <td>rating</td>
      <td>Number of likes?</td>
-     <td>rating.likeCount</td>
+     <td>rating.likeCount (optional)</td>
      <td></td>
      <td>likeCount</td>
      <td>-</td>
      <td></td>
      <td>likeCount</td>
      <td>-</td>
     <tr>
      <td>rating</td>
      <td>Average rating</td>
     <tr>
      <td>rating</td>
      <td>Average rating</td>
-     <td>rating.average</td>
+     <td>rating.average (optional)</td>
      <td>rating.average</td>
      <td>ratingAverage</td>
      <td>rating.average</td>
      <td>rating.average</td>
      <td>ratingAverage</td>
      <td>rating.average</td>
     <tr>
      <td>rating</td>
      <td>Number of ratings</td>
     <tr>
      <td>rating</td>
      <td>Number of ratings</td>
-     <td>rating.count</td>
+     <td>rating.count (optional)</td>
      <td>rating.count</td>
      <td>ratingCount</td>
      <td>rating.count</td>
      <td>rating.count</td>
      <td>ratingCount</td>
      <td>rating.count</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>
-     <td>Remove the 9 satellites limitation. Infinite satellites!</td>
+     <td>
+      Remove the 9 satellites limitation. Infinite satellites!<br/>
+      null (759x)
+     </td>
      <td></td>
     </tr>
     <tr>
      <td></td>
     </tr>
     <tr>
      <td>?</td>
      <td>promotedProduct.type</td>
      <td>?</td>
      <td>?</td>
      <td>promotedProduct.type</td>
      <td>?</td>
-     <td>"entitlement"</td>
+     <td>"entitlement" (502x), null (758x)</td>
      <td></td>
     </tr>
 
      <td></td>
     </tr>
 
      <td>apk</td>
      <td>UUID of latest apk version</td>
      <td>releases.*.uuid</td>
      <td>apk</td>
      <td>UUID of latest apk version</td>
      <td>releases.*.uuid</td>
-     <td>latestVersion.uuid</td>
-     <td>latestVersion</td>
+     <td>
+      uuid<br/>
+      latestVersion.uuid
+     </td>
+     <td>
+      uuid<br/>
+      latestVersion
+     </td>
      <td>version.uuid</td>
      <td>version.uuid</td>
-     <td>-</td>
+     <td>App.uuid</td>
      <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
      <td>780688a9-95ee-429a-8755-69a8d0c88fe0</td>
-     <td></td>
+     <td>The OUYA API does not have app UUIDs, only release/apk uuids. </td>
+    </tr>
+    <tr>
+     <td>apk</td>
+     <td>Internal version</td>
+     <td>releases.*.versionCode</td>
+     <td>-</td>
+     <td>-</td>
+     <td>apk.versionCode</td>
+     <td>Apk.versionCode</td>
+     <td>null (1162x), 120401, 11, 1001004</td>
+     <td>Run "aapt dump badging file.apk", field "versionCode"</td>
     </tr>
     <tr>
      <td>apk</td>
      <td>FIXME</td>
     </tr>
     <tr>
      <td>apk</td>
      <td>FIXME</td>
-     <td>releases.*.publicSize</td>
+     <td>releases.*.publicSize (optional)</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>releases.*.nativeSize (optional)</td>
      <td></td>
      <td>nativeSize</td>
      <td>apk.nativeSize</td>
      <td></td>
      <td>nativeSize</td>
      <td>apk.nativeSize</td>
      <td>md5sum</td>
      <td>apk.md5sum</td>
      <td>Apk.md5sum</td>
      <td>md5sum</td>
      <td>apk.md5sum</td>
      <td>Apk.md5sum</td>
-     <td>a5b0f82d54df5f551a64295e43771a10</td>
+     <td>a5b0f82d54df5f551a64295e43771a10, null (432x)</td>
      <td></td>
     </tr>
     <tr>
      <td></td>
     </tr>
     <tr>
      </td>
      <td>
       Also in download.json<br/>
      </td>
      <td>
       Also in download.json<br/>
-      Details field: only a file name, no path/domain
+      Details field: only a file name, no path/domain. Always set.
      </td>
     </tr>
     <tr>
      </td>
     </tr>
     <tr>
      <td>media.large</td>
      <td></td>
      <td>mainImageFullUrl</td>
      <td>media.large</td>
      <td></td>
      <td>mainImageFullUrl</td>
-     <td>heroImage.url</td>
+     <td>-</td>
      <td>App.titleImage</td>
      <td>https://d3e4aumcqn8cw3.cloudfront.net/api/file/MASaiOBlTEO7GKYXsIns</td>
      <td></td>
     </tr>
      <td>App.titleImage</td>
      <td>https://d3e4aumcqn8cw3.cloudfront.net/api/file/MASaiOBlTEO7GKYXsIns</td>
      <td></td>
     </tr>
+    <tr>
+     <td>media</td>
+     <td>FIXME</td>
+     <td>-</td>
+     <td>-</td>
+     <td>-</td>
+     <td>heroImage.url</td>
+     <td>?</td>
+     <td>
+      https://s3.amazonaws.com/ouya-screenshots/3d819f4e-2195-433c-81ea-c766a6f3144f/ouya-image20170118-3-i56ad1<br/>
+      null
+     </td>
+     <td>
+      Most games, had "null" here, only 14 had one set.
+      When this was set, mobileAppIcon was also set.
+     </td>
+    </tr>
     <tr>
      <td>media</td>
      <td>Video</td>
     <tr>
      <td>media</td>
      <td>Video</td>
-     <td>media.video</td>
+     <td>media.video (optional)</td>
      <td></td>
      <td>videoUrl</td>
      <td></td>
      <td>videoUrl</td>
-     <td>mediaTiles.*.url (when mediaTiles.*.type=video)</td>
+     <td></td>
      <td>Media</td>
      <td>https://vimeo.com/141878938</td>
      <td></td>
      <td>Media</td>
      <td>https://vimeo.com/141878938</td>
      <td></td>
     <tr>
      <td>media</td>
      <td>Game screenshots</td>
     <tr>
      <td>media</td>
      <td>Game screenshots</td>
-     <td>media.screenshots</td>
+     <td>media.screenshots (optional)</td>
      <td></td>
      <td>filepickerScreenshots</td>
      <td></td>
      <td>filepickerScreenshots</td>
-     <td>mediaTiles.*.urls.full, mediaTiles.*.urls.thumb, mediaTiles.*.fp_url (when mediaTiles.*.type=image)</td>
+     <td>-</td>
      <td>Media</td>
      <td>[urls]</td>
      <td></td>
     </tr>
      <td>Media</td>
      <td>[urls]</td>
      <td></td>
     </tr>
+    <tr>
+     <td>media</td>
+     <td>Detail video</td>
+     <td>media.details.*.url</td>
+     <td></td>
+     <td></td>
+     <td>mediaTiles.*.url (type=video)</td>
+     <td>?</td>
+     <td>
+      <pre>[
+  {
+    "type": "video",
+    "url": "https://vimeo.com/141878938"
+  }
+]</pre>
+     </td>
+     <td rowspan="4">
+      Allows free ordering of images and videos on the details page.<br/>
+      "fp" is probably "FilePicker".<br/>
+      fp_url is not used in OUYA's launcher.
+      The launcher loads the thumbnail at first, immediately after the full image.
+      If no mediaTile is available, the app's mainImageFullUrl
+      is used. When offline, the apk image is used.<br/>
+      <br/>
+      Game data information:
+      If details is not given or an emtpy array,
+      "mediaTile" array should automatically be created by combining
+      "media.large", "media.video" and "media.screenshots" into the
+      mediaTiles format.
+     </td>
+    </tr>
+    <tr>
+     <td>media</td>
+     <td>Detail image thumbnail</td>
+     <td>media.details.*.thumb</td>
+     <td></td>
+     <td></td>
+     <td>mediaTiles.*.urls.thumb (type=image)</td>
+     <td>?</td>
+     <td>
+      Thumbnails were all size 852x479
+      <pre>[
+  {
+    "type: "image",
+    "urls": [
+      "full": "http://...",
+      "thumb": "http://...",
+    ],
+    "fp_url": "http://...."
+  },
+]</pre>
+     </td>
+    </tr>
+    <tr>
+     <td>media</td>
+     <td>Detail image full resolution</td>
+     <td>media.details.*.url</td>
+     <td></td>
+     <td></td>
+     <td>mediaTiles.*.urls.full (type=image)</td>
+     <td>?</td>
+     <td>
+      Many detail images had a resolution of 1280x720.
+      <pre>[
+  {
+    "type: "image",
+    "urls": [
+      "full": "http://...",
+      "thumb": "http://...",
+    ],
+    "fp_url": "http://...."
+  }
+]</pre>
+     </td>
+    </tr>
+    <tr>
+     <td>media</td>
+     <td>Detail image file picker URL</td>
+     <td>-</td>
+     <td></td>
+     <td></td>
+     <td>mediaTiles.*.fp_url</td>
+     <td>?</td>
+     <td>
+      <pre>[
+  {
+    "type: "image",
+    "urls": [
+      "full": "http://...",
+      "thumb": "http://...",
+    ],
+    "fp_url": "http://...."
+  }
+]</pre>
+     </td>
+    </tr>
     <tr>
      <td>media</td>
      <td>FIXME</td>
     <tr>
      <td>media</td>
      <td>FIXME</td>
       null<br/>
       https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-v6tjz1
      </td>
       null<br/>
       https://s3.amazonaws.com/ouya-screenshots/3ae8fc67-f7f5-4f97-a48c-8ea2d31460fd/ouya-image20170911-3-v6tjz1
      </td>
-     <td></td>
+     <td>
+      1246x null, rest had its own URL.
+      Set when heroImage was filled.
+     </td>
     </tr>
 
     <tr>
     </tr>
 
     <tr>
     <tr>
      <td>developer</td>
      <td>Developer support mail</td>
     <tr>
      <td>developer</td>
      <td>Developer support mail</td>
-     <td>developer.supportEmail</td>
+     <td>developer.supportEmail (optional)</td>
      <td></td>
      <td>supportEmailAddress</td>
      <td>-</td>
      <td></td>
      <td>supportEmailAddress</td>
      <td>-</td>
     <tr>
      <td>developer</td>
      <td>Support phone number</td>
     <tr>
      <td>developer</td>
      <td>Support phone number</td>
-     <td>developer.supportPhone</td>
+     <td>developer.supportPhone (optional)</td>
      <td></td>
      <td>supportPhone</td>
      <td>-</td>
      <td></td>
      <td>supportPhone</td>
      <td>-</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>developer.founder (optional)</td>
      <td></td>
      <td>founder</td>
      <td>developer.founder</td>
      <td></td>
      <td>founder</td>
      <td>developer.founder</td>
      <td>false</td>
      <td></td>
     </tr>
      <td>false</td>
      <td></td>
     </tr>
+    <tr>
+     <td>developer</td>
+     <td>Developer UUID</td>
+     <td>developer.uuid (optional)</td>
+     <td>-</td>
+     <td>-</td>
+     <td>developer.url (part of)</td>
+     <td>Developer.uuid</td>
+     <td>ouya://launcher/details?developer=5b015434-8a78-4274-aa5d-0cb2e330e50e</td>
+     <td></td>
+    </tr>
 
    </tbody>
   </table>
 
    </tbody>
   </table>