ZH

公开 API

游戏目录可以以 JSON 形式读取,无需账号:适用于其他网站、应用、机器人……

该 API 是只读的,允许来自任何网站的调用(CORS)。响应会缓存一分钟。

游戏

参数
category 某个分类(其 slug)
kind original(原创)、cpc(Amstrad CPC 重制)、port(移植)
order[rating]、order[plays]、order[publishedAt]、order[title] 排序,asc 或 desc;可以连续写多个来决出先后。默认:最新的在前
page、itemsPerPage 每页 30 个游戏,最多 100 个
curl -g -H 'Accept: application/json' 'https://<ce site>/api/games?category=arcade&order[rating]=desc'

每个游戏包含:

字段
slug、title、description
category、kind 所属分类(slug)、项目类型
author 作者(GitHub 用户名)
rating、ratings 5 分制的平均评分(没有投票时为 null)、投票数
plays 已开始的游玩局数
engine、publishedAt JumPHP 引擎版本、最近一次发布的日期
forkOf 它所 Fork 自的游戏,否则为 null
url、play、source 它的页面、全屏游玩页、可浏览的源码
image 640 × 360 的图片(没有则为 null)
repository、manifest 它的 GitHub 仓库、已发布文件的清单(JumPHP 的远程模式)

按评分排序与游戏列表页一致:当游戏的投票很少时,平均分会被拉向 3(相当于三张幽灵票),这样单独一个 5 分满分就不会排到许多 4.5 分的前面。

分页与 JSON-LD

在普通 JSON(Accept: application/json)中,列表是一个数组。在 JSON-LD(Accept: application/ld+json,默认格式)中,它还会给出总数(totalItems)和各分页的地址(view.next、view.last):

{
  "@id": "/api/games",
  "totalItems": 42,
  "member": [ { "@id": "/api/games/pong", "slug": "pong", "title": "PONG", "…": "…" } ],
  "view": { "next": "/api/games?page=2", "last": "/api/games?page=2" }
}

错误:游戏或分类不存在(或不再列出)时返回 404,参数无效(kind=zzz)时返回 422,格式为 Problem Details(application/problem+json)。