luogu-api-docs

洛谷 API 文档

不方便直接列出的类型定义在 luogu-api.d.ts

对于所有请求:

对于非 GET 请求:

对于响应主体类型为 DataResponse 的请求:

对于响应主体类型为 LentilleDataResponse 的请求:

目录

范例

GET 请求

列出主题库中标题含有“模板”的题目。

await fetch("https://www.luogu.com.cn/problem/list?type=P&keyword=模板", {
  headers: [
    ["x-luogu-type", "content-only"],
  ],
});

POST 请求

此文档的编者发送一条内容为“Hi”的私信。

await fetch("https://www.luogu.com.cn/api/chat/new", {
  headers: [
    ["content-type", "application/json"],
    ["referer", "https://www.luogu.com.cn/"],
    ["x-csrf-token", document.querySelector("meta[name=csrf-token]").content],
  ],
  body: JSON.stringify({
    user: 206953,
    content: "Hi",
  }),
  method: "POST",
});

WebSocket 连接

监听私信,在日志中记录内容和双方的用户名。

const ws = new WebSocket("wss://ws.luogu.com.cn/ws");
ws.onopen = () => {
  ws.send(JSON.stringify({
    channel: "chat",
    channel_param: `${_feInstance.currentUser.uid}`,
    type: "join_channel",
  }));
};
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  switch (data._ws_type) {
    case "server_broadcast": {
      const { message } = data;
      console.log(
        `${message.sender.name}${message.receiver.name}: ${message.content}`,
      );
      break;
    }
  }
};