diff --git a/README.md b/README.md
index b716ae55b3..3ffdecf4f2 100644
--- a/README.md
+++ b/README.md
@@ -67,11 +67,13 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
- [x] [APP API 签名](docs/misc/sign/APP.md)(`appkey`与`sign`)
- [x] [已知的 APPKey](docs/misc/sign/APPKey.md)
- [x] [Wbi 签名](docs/misc/sign/wbi.md)(`wts`与`w_rid`)
+ - [ ] [bili_ticket](docs/misc/sign/bili_ticket.md)
- [x] [公共错误码](docs/misc/errcode.md)
- [x] [图片格式化](docs/misc/picture.md)
- [x] [bvid 说明](docs/misc/bvid_desc.md)
- [ ] [设备唯一标识BUVID](docs/misc/device_identity.md)
+- [ ] [获取 buvid3 / buvid4](docs/misc/buvid3_4.md)
- [ ] [gRPC API 接口定义](grpc_api)
- [ ] [登录](docs/login)
- [x] [登录操作 (人机认证)](docs/login/login_action)
@@ -207,6 +209,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
- [ ] 动态列表
- [x] [特定话题动态列表](docs/dynamic/tag_dynamics.md)
- [ ] [动态内容](docs/dynamic/get_dynamic_detail.md)
+ - [ ] [导航栏动态](docs/dynamic/nav.md)
- [ ] [相簿](docs/album)
- [x] [基本信息](docs/album/info.md)
- [x] [相簿列表](docs/album/list.md)
@@ -357,6 +360,7 @@ OR Aifadian:[https://afdian.net/@ShakaiAneE](https://afdian.net/@ShakaiAneE)
- [SocialSisterYi/bcut-asr](https://github.com/SocialSisterYi/bcut-asr): 使用必剪API的语音字幕识别
- [CzJam/Bili_Realtime_Data](https://github.com/CzJam/Bili_Realtime_Data): Bilibili粉丝与视频实时数据统计
- [kingwingfly/fav](https://github.com/kingwingfly/fav): 自动同步bili收藏夹、合集视频到本地的CLI工具(Rust实现,并提供一个文档测试完善的Rust风格的用于构建有状态爬虫的核心库)
+- [linyuye/Bilibili_crawler](https://github.com/linyuye/Bilibili_crawler): 基于bilibili懒加载api爬取b站动态,视频等评论区
### 其他
diff --git a/docs/clientinfo/ip.md b/docs/clientinfo/ip.md
index 548ec02fef..d72633d8a0 100644
--- a/docs/clientinfo/ip.md
+++ b/docs/clientinfo/ip.md
@@ -1,6 +1,6 @@
# 通过ip确定地理位置
-## 通过ip确定位置
+## 根据请求IP确定属地
> https://api.bilibili.com/x/web-interface/zone
@@ -60,3 +60,94 @@ curl 'https://api.bilibili.com/x/web-interface/zone'
```
+
+## 查询任意 IP 地址的归属地
+
+> https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr
+> https://api.live.bilibili.com/client/v1/Ip/getInfoNew
+
+注: 两接口等效
+
+*请求方式:GET*
+
+**URL参数:**
+
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| ip | str | IP地址 | 不必要 | IPv4或IPv6地址不限, 留空与[根据请求IP确定地理位置](#根据请求ip确定地理位置)基本相同 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为空 |
+| msg | str | 错误信息 | 同message |
+| data | obj | 信息本体 | 出错时为空数组 |
+
+`data`对象:
+
+与[根据请求IP确定地理位置](#根据请求ip确定地理位置)回复的`data`对象基本相同, 但无 `country_code` 字段
+
+**示例:**
+
+查询请求IP地址的归属地:
+
+```shell
+curl -G 'https://api.live.bilibili.com/client/v1/Ip/getInfoNew'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "addr": "104.28.156.113",
+ "country": "新加坡",
+ "province": "新加坡",
+ "city": "",
+ "isp": "cloudflare.com",
+ "latitude": "1.352083",
+ "longitude": "103.819836"
+ }
+}
+```
+
+
+
+查询IP地址`8.8.8.8`的归属地:
+
+```shell
+curl -G 'https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr' \
+--data-urlencode 'ip=8.8.8.8'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "addr": "8.8.8.8",
+ "country": "GOOGLE.COM",
+ "province": "GOOGLE.COM",
+ "city": "",
+ "isp": "level3.com",
+ "latitude": "",
+ "longitude": ""
+ }
+}
+```
+
+
diff --git a/docs/fav/info.md b/docs/fav/info.md
index 84bce67522..45008d9171 100644
--- a/docs/fav/info.md
+++ b/docs/fav/info.md
@@ -22,7 +22,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----------------------------- | -------- | --------------------------------------------------- |
-| code | num | 返回值 | 0:成功
-400:请求错误
-403:访问权限不足 |
+| code | num | 返回值 | 0:成功
-400:请求错误
-403:访问权限不足
11010: 内容不存在 |
| message | str | 错误信息 | 默认为0 |
| data | 有效时:obj
无效或:null | 信息本体 | |
diff --git a/docs/live/manage.md b/docs/live/manage.md
index 9aac690f65..319487f5a0 100644
--- a/docs/live/manage.md
+++ b/docs/live/manage.md
@@ -161,7 +161,7 @@ curl 'https://api.live.bilibili.com/room/v1/Room/update' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功
65530:token错误(登录错误)
1:错误
60009:分区不存在
60013:非常抱歉,您所在的地区受实名认证限制无法开播
**(其他错误码有待补充)** |
+| code | num | 返回值 | 0:成功
65530:token错误(登录错误)
1:错误
60009:分区不存在
60024: 目标分区需要人脸认证
60013:非常抱歉,您所在的地区受实名认证限制无法开播
**(其他错误码有待补充)** |
| msg | str | 错误信息 | 默认为空 |
| message | str | 错误信息 | 默认为空 |
| data | obj | 信息本体 | |
diff --git a/docs/misc/buvid3_4.md b/docs/misc/buvid3_4.md
new file mode 100644
index 0000000000..13d386e710
--- /dev/null
+++ b/docs/misc/buvid3_4.md
@@ -0,0 +1,48 @@
+# 获取 buvid3 / buvid4
+
+## 游客获取 buvid3 / buvid4
+
+> https://api.bilibili.com/x/frontend/finger/spi
+
+*请求方式: GET*
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 信息 | ok: 成功 |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | ---- |
+| b_3 | str | buvid3 | 需手动存放至 cookie 中 |
+| b_4 | str | buvid4 | 同上 |
+
+**示例:**
+
+注: 建议自行生成, 不要复制本处示例的 buvid3 / buvid4.
+
+```shell
+curl -G 'https://api.bilibili.com/x/frontend/finger/spi'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "b_3": "D9656DA8-9BEF-F464-5B72-C4849AFD336379044infoc",
+ "b_4": "F6E0FD4B-520C-1902-4F7B-E461D8D1F5AB79044-024072309-666onEZSnlHVPjoRp4kDYg=="
+ },
+ "message": "ok"
+}
+```
+
+
diff --git a/docs/misc/bvid_desc.md b/docs/misc/bvid_desc.md
index 486956f0a6..2ed0fc8564 100644
--- a/docs/misc/bvid_desc.md
+++ b/docs/misc/bvid_desc.md
@@ -248,10 +248,9 @@ print(av2bv(avid: 111298867365120))
print(bv2av(bvid: "BV1L9Uoa9EUx"))
```
-
### Java
-```
+```java
import java.math.BigInteger;
/**
@@ -266,8 +265,7 @@ public class AVBVConverter {
private static final String DATA = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf";
- public static String av2bv(int aidParam) {
-
+ public static String av2bv(long aidParam) {
BigInteger aid = BigInteger.valueOf(aidParam);
char[] bytes = {'B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
int bvIndex = bytes.length - 1;
@@ -275,18 +273,14 @@ public class AVBVConverter {
while (tmp.compareTo(BigInteger.ZERO) > 0) {
bytes[bvIndex] = DATA.charAt(tmp.mod(BigInteger.valueOf(BASE)).intValue());
tmp = tmp.divide(BigInteger.valueOf(BASE));
- bvIndex -= 1;
+ bvIndex--;
}
swap(bytes, 3, 9);
swap(bytes, 4, 7);
- StringBuilder sb = new StringBuilder(bytes.length);
- for (Character ch : bytes) {
- sb.append(ch);
- }
- return sb.toString();
+ return new String(bytes);
}
- public static int bv2av(String bvid) {
+ public static long bv2av(String bvid) {
char[] bvidArr = bvid.toCharArray();
swap(bvidArr, 3, 9);
swap(bvidArr, 4, 7);
@@ -296,7 +290,7 @@ public class AVBVConverter {
tmp = tmp.multiply(BigInteger.valueOf(BASE)).add(BigInteger.valueOf(DATA.indexOf(c)));
}
BigInteger xor = tmp.and(MASK_CODE).xor(XOR_CODE);
- return xor.intValue();
+ return xor.longValue();
}
@@ -314,21 +308,17 @@ public class AVBVConverter {
final int aid2 = 305988942;
final String bv2 = "BV1aP411K7it";
-
//av ==> bv
assert av2bv(aid1).equals(bv1);
assert av2bv(aid2).equals(bv2);
-
//bv ==>av
assert bv2av(bv1) == aid1;
assert bv2av(bv2) == aid2;
}
}
-
```
-
### Golang
```go
diff --git a/docs/misc/device_identity.md b/docs/misc/device_identity.md
index 5fae7fd90e..03358484d9 100644
--- a/docs/misc/device_identity.md
+++ b/docs/misc/device_identity.md
@@ -2,7 +2,7 @@
## 设备唯一标识 BUVID
-注意区分于 Web 端的 buvid3, buvid4.
+注意区分于 Web 端的 [buvid3, buvid4](buvid3_4.md).
BUVID 在 APP 首次安装于某设备, 且首次启动时生成.
diff --git a/docs/misc/picture.md b/docs/misc/picture.md
index 01a51a53a4..b3c3f8a62d 100644
--- a/docs/misc/picture.md
+++ b/docs/misc/picture.md
@@ -1,18 +1,33 @@
# 图片格式化
-对于\*.hdslb.com/bfs下的图片文件都可以使用以下格式化参数
+对于 `*.hdslb.com/bfs` 下的图片文件都可以使用以下可选格式化参数.
-> \*.hdslb.com/bfs/\*/\*.\[jpg/png/gif\]@{width}w\_{high}h\_{quality}q.{format}
+使用 `@` 开始参数 (无论格式如何, 无论是否有参数, 通过计算 HASH 发现, 使用 `@` 均会导致返回图片不同), 多个参数以 `_` 分隔, 图片格式无需分隔且必须放在最后
-| 可选参数 | 含义 | 备注 |
-| -------- | ---------------- | ---------------- |
-| width | 图片最大限制宽度 | |
-| high | 图片最大限制高度 | |
-| quality | 图片质量百分比 | 仅限webp |
-| format | 图片格式 | 仅限png/jpg/webp/[avg_color](#avg_color格式说明) |
+参见: [#191](https://github.com/SocialSisterYi/bilibili-API-collect/issues/191)
+
+注: jpg 即 jpeg, 二者等效. 网页端常用 AVIF, WebP.
+
+| 参数 | 格式 | 含义 | 备注 |
+| ---- | ------- | ---------------- | ---------------- |
+| w | ${int}w | 图片最大限制宽度 | 范围 [1, 9223372036854775807] |
+| h | ${int}h | 图片最大限制高度 | 范围 [1, 9223372036854775807] |
+| s | ${int}s | 作用尚不明确 | 不影响输出结果, 范围 [1, 9223372036854775807] |
+| e | ${int}e | 改变大小 | 0: 保留比例取其小, 1: 保留比例取其大, 2: 不保留原比例 |
+| p | ${int}p | 缩放倍数 | 默认100, 范围 [1, 1000] |
+| o | ${int}o | 作用尚不明确 | 不影响输出结果 范围 [0, 1] |
+| q | ${int}q | 图片质量百分比 | 仅限webp/jpeg/avif |
+| c | ${int}c | 裁切图片(如果宽高允许) | 0: 不裁切但会修改图片, 1: 上传时的预设规则(若无则右下), 2: 左上, 3: 右上 |
+| f | ${int}f | 作用尚不明确 | [0, 1]: 不改变图片, 2: 会改变图片 |
+| progressive | progressive | 图片编码方式 | 仅限 jpeg(无: baseline, 有: progressive)/png(无:non-interlaced, 有: interlaced) |
+| ! | !${str} | 加载来源 | web-home-carousel-cover, header, web-dynamic, web-avatar-space-header, ... |
+| . | .${str} | 图片格式 | 仅限 png/jpeg/webp/avif/[avg_color](#avg_color格式说明) |
**示例:**
+
+查看示例:
+
原始图片
https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg
@@ -43,6 +58,7 @@ https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q
![](https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp)
+
## avg_color格式说明
diff --git a/docs/misc/sign/bili_ticket.md b/docs/misc/sign/bili_ticket.md
index a9d40a9135..6cfd5b2f95 100644
--- a/docs/misc/sign/bili_ticket.md
+++ b/docs/misc/sign/bili_ticket.md
@@ -1,7 +1,10 @@
-`bili_ticket` 目前没发现多少风控价值,但是暂且在这里提供一份示例。
+# BiliTicket
-由 [@aynuarance](https://github.com/aynuarance) 于 [#903](https://github.com/SocialSisterYi/bilibili-API-collect/issues/903) 提供的思路,根据时间戳使用 `hmac_sha256` 算法计算 `hexsign`。
+## 简述
+
+`bili_ticket` 位于请求头 Cookie 中, 非必需, 但存在可降低风控概率
+由 [@aynuarance](https://github.com/aynuarance) 于 [#903](https://github.com/SocialSisterYi/bilibili-API-collect/issues/903) 提供的思路,根据时间戳使用 `hmac_sha256` 算法计算 `hexsign`。
是 [JWT 令牌](https://jwt.io/),有效时长为 259260 秒,即 3 天。
例如 `eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDI3NDI3NDYsImlhdCI6MTcwMjQ4MzQ4NiwicGx0IjotMX0.xQgtTAc41NA1gzvd9yKUPgucUy_DKcQj6OG1vj8V7ZA`
@@ -14,7 +17,18 @@
}
```
-# Python 示例
+## 算法
+
+1. 获取 UNIX 秒级时间戳存入变量如 `timestamp`
+2. 计算变量 `hexsign` 值,使用 `hmac_sha256` 算法,密钥为 `XgwSnGZ1p`,消息为字符串 `"ts"` 与变量 `timestamp` 值拼接
+3. 构造请求参数,`key_id` 为 `ec02`,`hexsign` 为变量 `hexsign` 值,`context[ts]` 为变量 `timestamp` 值,`csrf` 为 cookie 中的 `bili_jct` 值也可为空
+4. 发送 `POST` 请求,获取 `data` 字段中的 `ticket` 字段的值即为所求
+
+## Demo
+
+### Python
+
+需要 `requests` 依赖
```python
import hmac
@@ -59,4 +73,106 @@ if __name__ == '__main__':
'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
resp = requests.post(url, params=params,headers=headers).json()
-```
\ No newline at end of file
+ print(resp)
+```
+
+### Java
+
+无需第三方依赖
+
+```java
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+public class BiliTicketDemo {
+
+ /**
+ * Convert a byte array to a hex string.
+ *
+ * @param bytes The byte array to convert.
+ * @return The hex string representation of the given byte array.
+ */
+ public static String bytesToHex(byte[] bytes) {
+ StringBuilder sb = new StringBuilder();
+ for (byte b : bytes) {
+ String hex = Integer.toHexString(0xff & b);
+ if (hex.length() == 1) {
+ sb.append('0');
+ }
+ sb.append(hex);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Generate a HMAC-SHA256 hash of the given message string using the given key
+ * string.
+ *
+ * @param key The key string to use for the HMAC-SHA256 hash.
+ * @param message The message string to hash.
+ * @throws Exception If an error occurs during the HMAC-SHA256 hash generation.
+ * @return The HMAC-SHA256 hash of the given message string using the given key
+ * string.
+ */
+ public static String hmacSha256(String key, String message) throws Exception {
+ Mac mac = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
+ mac.init(secretKeySpec);
+ byte[] hash = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
+ return bytesToHex(hash);
+ }
+
+ /**
+ * Get a Bilibili web ticket for the given CSRF token.
+ *
+ * @param csrf The CSRF token to use for the web ticket, can be {@code null} or
+ * empty.
+ * @return The Bilibili web ticket raw response for the given CSRF token.
+ * @throws Exception If an error occurs during the web ticket generation.
+ * @see https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/bili_ticket.md
+ */
+ public static String getBiliTicket(String csrf) throws Exception {
+ // params
+ long ts = System.currentTimeMillis() / 1000;
+ String hexSign = hmacSha256("XgwSnGZ1p", "ts" + ts);
+ StringBuilder url = new StringBuilder(
+ "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket");
+ url.append('?');
+ url.append("key_id=ec02").append('&');
+ url.append("hexsign=").append(hexSign).append('&');
+ url.append("context[ts]=").append(ts).append('&');
+ url.append("csrf=").append(csrf == null ? "" : csrf);
+ // request
+ HttpURLConnection conn = (HttpURLConnection) new URI(url.toString()).toURL().openConnection();
+ conn.setRequestMethod("POST");
+ conn.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0");
+ InputStream in = conn.getInputStream();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ int b;
+ while ((b = in.read()) != -1) {
+ out.write(b);
+ }
+ return new String(out.toByteArray(), StandardCharsets.UTF_8);
+ }
+
+ /**
+ * Main method to test the BiliTicketDemo class.
+ *
+ * @param args The command line arguments (not used).
+ */
+ public static void main(String[] args) {
+ try {
+ System.out.println(getBiliTicket("")); // use empty CSRF here
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
+```
diff --git a/docs/misc/sign/wbi.md b/docs/misc/sign/wbi.md
index be8678165c..358bc5f8f1 100644
--- a/docs/misc/sign/wbi.md
+++ b/docs/misc/sign/wbi.md
@@ -700,8 +700,6 @@ public class WbiTest {
map.put("bar", "五一四");
map.put("baz", 1919810);
map.put("wts", System.currentTimeMillis() / 1000);
- map.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
- map.put("Referer", "https://www.bilibili.com/");
StringJoiner param = new StringJoiner("&");
//排序 + 拼接字符串
map.entrySet().stream()
diff --git a/docs/misc/time_stamp.md b/docs/misc/time_stamp.md
index d4e64598a8..6914205961 100644
--- a/docs/misc/time_stamp.md
+++ b/docs/misc/time_stamp.md
@@ -2,7 +2,7 @@
## 获取当前时间戳
-> https://api.bilibili.com/x/report/click/now
+> https://api.bilibili.com/x/report/click/now
> https://api.bilibili.com/x/click-interface/click/now
*请求方式:GET*
diff --git a/docs/user/space.md b/docs/user/space.md
index b5dec5dd10..61f310d058 100644
--- a/docs/user/space.md
+++ b/docs/user/space.md
@@ -1008,6 +1008,325 @@ curl -G 'http://space.bilibili.com/ajax/settings/getSettings' \
+#### 查询可用头图列表 (Web端)
+
+> https://space.bilibili.com/ajax/topphoto/getlist
+
+*请求方式: GET*
+
+注: 带有转义
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | -------------------------- |
+| mid | num | 目标用户mid | 必要 | 非负数, 即使该用户并不存在 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ------------------------- | -------------------------------------- | ---- |
+| status | bool | 成功: true
失败: false | |
+| data | 成功: array
失败: str | 成功: 信息本体
失败: "用户id错误" | |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ----------- | ------------------------------------ |
+| id | num | 空间头图 ID | |
+| product_name | str | 显示名称 | |
+| price | num | 价格 | |
+| coin_type | num | 支付类型? | |
+| vip_free | num | 大会员免费 | |
+| s_img | str | 小图 URI | 需要自行与 `i0.hdslb.com` 拼接成 URL |
+| l_img | str | 大图 URI | 同 s_img |
+| thumbnail_img | str | 空 | 并不存在的缩略图? |
+| sort_num | num | 排序编号 | |
+| is_disable | num | 已禁用 | 0: 未禁用 |
+| expire | num | 过期时间? | UNIX 时间戳, 或 0 为永不过期 |
+| had | num | 是否拥有? | 当 expire 不为 0 时 为 1, 否则为 0 |
+
+**示例:**
+
+查询`mid=1145141919810000000`的可用空间头图
+
+```shell
+curl -G "https://space.bilibili.com/ajax/topphoto/getlist" \
+--data-urlencode "mid=1145141919810000000"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true,
+ "data": [
+ {
+ "id": 1,
+ "product_name": "bilibili春",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
+ "l_img": "bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
+ "thumbnail_img": "",
+ "sort_num": 19,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 2,
+ "product_name": "两人单车",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/d60a4be11f1bca6168a60a53c64bca18eddd6443.jpg",
+ "l_img": "bfs/space/44873d3568bdcb3d850d234e02a19602972450f1.png",
+ "thumbnail_img": "",
+ "sort_num": 16,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 5,
+ "product_name": "成为偶像",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/5fe2632486a5a91a234f0e7cb368ab6397477da4.jpg",
+ "l_img": "bfs/space/87277d30cd19edcec9db466a9a3e556aeb0bc0ed.png",
+ "thumbnail_img": "",
+ "sort_num": 15,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 11,
+ "product_name": "星际勘探",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/6849abc6e67000ad807b35a970aba31dd1e400dd.jpg",
+ "l_img": "bfs/space/c919a9818172a8297f8b0597722f96504a1e1d88.png",
+ "thumbnail_img": "",
+ "sort_num": 14,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 10,
+ "product_name": "星O大战",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/ff3b0882e55c1099738e59616e5956ad357d9948.jpg",
+ "l_img": "bfs/space/e22f5b8e06ea3ee4de9e4da702ce8ef9a2958f5a.png",
+ "thumbnail_img": "",
+ "sort_num": 13,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 12,
+ "product_name": "王牌特工",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/f5d38e2af44fd12fa65423aff55933fcf9071419.jpg",
+ "l_img": "bfs/space/8cd85a382756ab938df23a856017abccd187188e.png",
+ "thumbnail_img": "",
+ "sort_num": 12,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 3,
+ "product_name": "仰望星空",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/c9dae917e24b4fc17c4d544caf6b6c0b17f8692b.jpg",
+ "l_img": "bfs/space/9ccc0447aebf0656809b339b41aa5b3705f27c47.png",
+ "thumbnail_img": "",
+ "sort_num": 11,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 14,
+ "product_name": "雨过天晴",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/1115b2fdabd128337f892feada4ce32e51f3a5ad.jpg",
+ "l_img": "bfs/space/6a1198e25f8764bd30d53411dac9fdf840bc3265.png",
+ "thumbnail_img": "",
+ "sort_num": 10,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 6,
+ "product_name": "绿荫秘境",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/dc02d22a718c1c436f1a355b3cd726b04098ef7d.jpg",
+ "l_img": "bfs/space/265ecddc52d74e624dc38cf0cff13317085aedf7.png",
+ "thumbnail_img": "",
+ "sort_num": 9,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 13,
+ "product_name": "漫游仙境",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/184abe52a5ea9390b506c064cfba4f8f20ae9cca.jpg",
+ "l_img": "bfs/space/24d0815514951bb108fbb360b04a969441079315.png",
+ "thumbnail_img": "",
+ "sort_num": 7,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 15,
+ "product_name": "放课后time",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/aea2dd7b8894ce31d578d4fad6a7188c7b49cb2f.jpg",
+ "l_img": "bfs/space/6e799ff2de2de55d27796707a283068d66cdf3f4.png",
+ "thumbnail_img": "",
+ "sort_num": 6,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 4,
+ "product_name": "昴宿星团",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/1f4eaf70d1bb981f6057b3e440249d7a1f65774f.jpg",
+ "l_img": "bfs/space/3ab888c1d149e864ab44802dea8c1443e940fa0d.png",
+ "thumbnail_img": "",
+ "sort_num": 5,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 7,
+ "product_name": "蔷薇洛丽塔",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/718eac8c71e29b8a80431c46110805c3a40e30a6.jpg",
+ "l_img": "bfs/space/70ce28bcbcb4b7d0b4f644b6f082d63a702653c1.png",
+ "thumbnail_img": "",
+ "sort_num": 4,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 9,
+ "product_name": "黑暗之门",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/ef1b08e62fdc35b06e39795bc6de8e510935bf97.jpg",
+ "l_img": "bfs/space/cd52d4ac1d336c940cc4958120170f7928d9e606.png",
+ "thumbnail_img": "",
+ "sort_num": 3,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 19,
+ "product_name": "你的名字",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/373e127e8784d3e4c1b5e6db0c27702ba077643f.jpg",
+ "l_img": "bfs/space/f49642b3683a08e3190f29d5a095386451f8952c.jpg",
+ "thumbnail_img": "",
+ "sort_num": 2,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ }
+ ]
+}
+```
+
+
+
+### 设置空间头图 (Web端)
+
+> https://space.bilibili.com/ajax/settings/setToutu
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: referer为 `.bilibili.com` 域名下
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------------------------------- | ------ | ---- |
+| id | num | 头图 ID | 必要 | |
+| csrf | str | CSRF Token (即 Cookie bili_jct 值) | 不必要 | |
+
+**JSON回复:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | --------------------------- |
+| status | bool | 状态 | true: 成功
false: 失败 |
+| data | str | 错误信息 | 正确时无此项 (带有转义) |
+
+**示例:**
+
+设置空间头图为为`王牌特工(id=12)`
+
+```shell
+curl -X POST "https://space.bilibili.com/ajax/settings/setToutu" \
+--referer "https://space.bilibili.com/" \
+--data-urlencode "id=12" \
+--data-urlencode "csrf=xxx" \
+-b "SESSDATA=xxx; bili_jct=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true
+}
+```
+
+
+
#### 调整空间板块布局
> http://space.bilibili.com/ajax/settings/setIndexOrder
@@ -1034,7 +1353,7 @@ curl -G 'http://space.bilibili.com/ajax/settings/getSettings' \
| 3 | (左侧)订阅番剧 |
| 4 | (左侧)订阅标签 |
| 5 | (左侧)最近投币的视频 |
-| 6 | (左侧)我的圈子**(此板块被隐藏)** |
+| 6 | (左侧)我的圈子 **(此板块被隐藏)** |
| 7 | (左侧)我的频道 |
| 8 | (左侧)我的专栏 |
| 9 | (左侧)我的相簿 |
@@ -1050,24 +1369,26 @@ curl -G 'http://space.bilibili.com/ajax/settings/getSettings' \
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | -------- | ----------------------------------- |
-| ststus | bool | 操作结果 | true:操作成功
false:操作失败 |
+| status | bool | 操作结果 | true:操作成功
false:操作失败 |
| data | str | 错误信息 | 正确时无此项 |
**示例:**
调整空间布局为:
->我的稿件 直播间
->我的专栏 个人资料
->订阅番剧 公告
->我的收藏夹 官方活动
->我的相簿 最近玩的游戏
->最近投币的视频
->订阅标签
->我的频道
+```text
+我的稿件 直播间
+我的专栏 个人资料
+订阅番剧 公告
+我的收藏夹 官方活动
+我的相簿 最近玩的游戏
+最近投币的视频
+订阅标签
+我的频道
+```
```shell
-curl 'http://space.bilibili.com/ajax/settings/setIndexOrder' \
+curl 'https://space.bilibili.com/ajax/settings/setIndexOrder' \
--data-urlencode 'index_order=1,8,3,2,9,5,4,7,22,23,21,24,25,6' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \
@@ -1113,7 +1434,7 @@ curl 'http://space.bilibili.com/ajax/settings/setIndexOrder' \
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | -------- | ----------------------------------- |
-| ststus | bool | 操作结果 | true:操作成功
false:操作失败 |
+| status | bool | 操作结果 | true:操作成功
false:操作失败 |
| data | str | 错误信息 | 正确时无此项 |
**示例:**
@@ -1121,7 +1442,7 @@ curl 'http://space.bilibili.com/ajax/settings/setIndexOrder' \
设置`关注的TAG`为隐藏
```shell
-curl 'http://space.bilibili.com/ajax/settings/setPrivacy' \
+curl 'https://space.bilibili.com/ajax/settings/setPrivacy' \
--data-urlencode 'tags=0' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \
@@ -4298,7 +4619,7 @@ curl -G 'https://api.bilibili.com/x/space/bangumi/follow/list' \
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---------------------------- | -------------------------------------- | --------------------------- |
-| ststus | bool | 返回值 | false:错误
true:正确 |
+| status | bool | 返回值 | false:错误
true:正确 |
| data | 错误时:str
正确时:obj | 错误时:错误信息
正确时:数据本体 | 正确时不返回错误信息 |
`data`对象:
diff --git a/docs/video/action.md b/docs/video/action.md
index b841b952a9..56a3f3c19e 100644
--- a/docs/video/action.md
+++ b/docs/video/action.md
@@ -460,7 +460,7 @@ curl -G 'https://api.bilibili.com/x/web-interface/archive/coins' \
> https://api.bilibili.com/medialist/gateway/coll/resource/deal
>
-> https://api.bilibili.com/x/v3/fav/resource/deal
+> https://api.bilibili.com/x/v3/fav/resource/deal
*请求方式:POST*
@@ -485,7 +485,7 @@ curl -G 'https://api.bilibili.com/x/web-interface/archive/coins' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-403:访问权限不足
10003:不存在该稿件
11201:已经收藏过了
11202:已经取消收藏了
11203:达到收藏上限
72010017:参数错误 |
+| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-403:访问权限不足
10003:不存在该稿件
11010: 您访问的内容不存在
11201:已经收藏过了
11202:已经取消收藏了
11203:达到收藏上限
72010017:参数错误 |
| message | str | 错误信息 | 正确为success |
| data | obj | 信息本体 | |
diff --git a/docs/video_ranking/dynamic.md b/docs/video_ranking/dynamic.md
index b06cea2204..225ce35f1b 100644
--- a/docs/video_ranking/dynamic.md
+++ b/docs/video_ranking/dynamic.md
@@ -1,9 +1,5 @@
# 分区最新视频
-- [获取分区最新视频列表](#获取分区最新视频列表)
-
----
-
## 获取分区最新视频列表
> https://api.bilibili.com/x/web-interface/dynamic/region
@@ -15,7 +11,7 @@
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ----------- | ------ | ------- |
| pn | num | 页码 | 非必要 | 默认为1 |
-| ps | num | 每页项数 | 非必要 | 默认为5 |
+| ps | num | 每页项数 | 非必要 | 默认为14, 留空为5 |
| rid | num | 目标分区tid | 必要 | |
**json回复:**
@@ -197,3 +193,445 @@ curl -G 'https://api.bilibili.com/x/web-interface/dynamic/region' \
```
+
+### 获取分区标签近期互动列表
+
+> https://api.bilibili.com/x/web-interface/dynamic/tag
+
+*请求方式: GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | ----------------- |
+| ps | num | 视频数 | 非必要 | 默认为14, 留空为5 |
+| pn | num | 列数 | 非必要 | 留空为1 |
+| rid | num | 目标分区id | 必要 | 参见[视频分区一览](../video/video_zone.md) |
+| tag_id | num | 目标标签id | 必要 | |
+
+**json回复:**
+
+与[获取分区最新视频列表](#获取分区最新视频列表)相同, 略
+
+**示例:**
+
+获取`tid=136(游戏->音游)`分区中`tag_id=10026108(Phigros)`标签近期互动列表的2条视频信息
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/dynamic/tag' \
+--data-urlencode 'rid=136' \
+--data-urlencode 'tag_id=10026108' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "page": {
+ "num": 1,
+ "size": 2,
+ "count": 152
+ },
+ "archives": [
+ {
+ "aid": 1452657587,
+ "videos": 1,
+ "tid": 136,
+ "tname": "音游",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/4cb13f97e0d4b43645728432468e44b40ad343de.jpg",
+ "title": "【MuseDash x Phigros/逆天愚人节谱面】Retribution ~Cycle of Redemption~ Lv.? AP",
+ "pubdate": 1712310000,
+ "ctime": 1712302810,
+ "desc": "谱师:Mayflycmd(@命令提示符 )",
+ "state": 0,
+ "duration": 189,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 3493136175204754,
+ "name": "TempoTiger",
+ "face": "https://i1.hdslb.com/bfs/face/0cf2722f9aaa0db94f9166a8084e347bca3580f4.jpg"
+ },
+ "stat": {
+ "aid": 1452657587,
+ "view": 27021,
+ "danmaku": 141,
+ "reply": 113,
+ "favorite": 306,
+ "coin": 144,
+ "share": 95,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 1050,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 27021
+ },
+ "dynamic": "",
+ "cid": 1494650111,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Eq421w7T4",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n240405sa2zsrp9x2i3erx1ln8icirs6_firsti.jpg",
+ "pub_location": "广东",
+ "cover43": "",
+ "bvid": "BV1Eq421w7T4",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": null
+ },
+ {
+ "aid": 1155789590,
+ "videos": 1,
+ "tid": 136,
+ "tname": "音游",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/c75674c8d104421d1794e69926d42ffa90e7d73d.jpg",
+ "title": "[Phigros 自制谱] 把一切都倾注进去吧!/ 雑踏、僕らの街 - TOGENASHI TOGEARI",
+ "pubdate": 1719687153,
+ "ctime": 1719687153,
+ "desc": "不是,你们怎么忍住把这键盘歌写这么简单的?\n不是,你们怎么忍住把这键盘歌写这么简单的?\n不是,你们怎么忍住把这键盘歌写这么简单的?\n\n应该是 Phigros 第一个写满三分钟的,虽然后面抄了很多重复配置,但无伤大雅(\n个人定数 16.6,其实就两段 5k 键盘难,看时间长多给了 0.1\n所以啊\n\n愤怒也好喜悦也好悲伤也好,把一切都倾注进去!\n怒りも喜びも哀しさも、全部ぶちこめ。\n\n-- 6.30 更新,修了一个特效的问题,改了一个很蹭的配置和一个很丑的排键",
+ "state": 0,
+ "duration": 201,
+ "mission_id": 1726375,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 341532844,
+ "name": "西宮缄",
+ "face": "https://i1.hdslb.com/bfs/face/1387108d9337c04c27ce2d8d75679e40540d4c14.jpg"
+ },
+ "stat": {
+ "aid": 1155789590,
+ "view": 39479,
+ "danmaku": 303,
+ "reply": 169,
+ "favorite": 1650,
+ "coin": 473,
+ "share": 653,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 5843,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 39479
+ },
+ "dynamic": "打这个比溜冰还爽",
+ "cid": 1600971084,
+ "dimension": {
+ "width": 2000,
+ "height": 1500,
+ "rotate": 0
+ },
+ "season_id": 3395535,
+ "short_link_v2": "https://b23.tv/BV1iZ421g7E8",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n240630sa3chl8idnpz8d31t6yaczagn_firsti.jpg",
+ "pub_location": "天津",
+ "cover43": "",
+ "bvid": "BV1iZ421g7E8",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": null
+ }
+ ]
+ }
+}
+```
+
+
+
+### 获取分区近期投稿列表
+
+> https://api.bilibili.com/x/web-interface/newlist
+
+*请求方式: GET*
+
+注: 该接口在 Web 端实际情况中被请求, 但似乎未在页面中显示, 作用尚不清楚
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | ----------------- |
+| ps | num | 视频数 | 非必要 | 默认为14, 留空为5 |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| rid | num | 目标分区id | 非必要 | 参见[视频分区一览](../video/video_zone.md) |
+| type | num | 类型? | 非必要 | 默认为0 |
+
+**JSON回复:**
+
+与[获取分区最新视频列表](#获取分区最新视频列表)相同, 略
+
+**示例:**
+
+与[获取分区最新视频列表](#获取分区最新视频列表)相似, 略
+
+### 获取分区近期投稿列表 (带排序)
+
+> https://api.bilibili.com/x/web-interface/newlist_rank
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | --------- | ------ | ------- |
+| main_ver | str | 主页版本 | 非必要 | 默认为 `v3` |
+| search_type | str | 搜索类型 | 必要 | 默认为 `video` |
+| view_type | str | 查看类型? | 必要 | 默认为 `hot_rank` |
+| copy_right | num | 版权? | 非必要 | 默认为 `-1` |
+| new_web_tag | num | 标签? | 非必要 | 默认为 `1` |
+| order | str | 排序方式 | 非必要 | click: 按播放排序(默认)
scores: 按评论数排序
stow: 按收藏排序
coin: 按硬币数排序
dm: 按弹幕数排序|
+| cate_id | num | 分区id | 必要 | 留空会导致响应中`data`中`result`为`null`, 参见[视频分区一览](../video/video_zone.md) |
+| page | num | 页码 | 非必要 | 默认以 `1` 开始 |
+| pagesize | num | 视频数 | 必要 | 默认为 `30`, 留空会导致 -500 |
+| time_from | num | 起始时间 | 必要 | yyyyMMdd, 默认为 `time_to` - 7 |
+| time_to | num | 结束时间 | 必要 | yyyyMMdd, 默认为当前时间(大于起始时间) |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----- |
+| code | num | 返回值 | 0:成功
-500: 未传pagesize
-10: 未传其余必要参数 |
+| message | str | 错误信息 | 无为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 错误为null |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ----- | ------------------ | ----- |
+| exp_list | null | | 作用尚不明确 |
+| show_module_list | array | 显示模块列表? | |
+| result | array | 结果本体 | 失败时为null |
+| show_column | num | 0 | 作用尚不明确 |
+| rqt_type | str | search | 作用尚不明确 |
+| numPages | num | 页码 | 失败时为0 |
+| numResults | num | 视频数 | 失败时为0 |
+| crr_query | str | 空 | 作用尚不明确 |
+| pagesize | num | 视频数 | |
+| suggest_keyword | num | 空 | 作用尚不明确 |
+| egg_info | null | | 作用尚不明确 |
+| cache | num | 0 | 作用尚不明确 |
+| exp_bits | num | 1 | 作用尚不明确 |
+| exp_str | str | 空 | 作用尚不明确 |
+| seid | str | 一串字符串中的数字 | 作用尚不明确 |
+| msg | str | 结果信息 | 成功时为`success`, 反之为`as error.` |
+| egg_hit | num | 0 | 作用尚不明确 |
+| page | num | 页码 | |
+
+`data`中的`show_module_list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| 0 | str | tips | |
+| 1 | str | brand_ad | |
+| 2 | str | esports | |
+| 3 | str | activity | |
+| 4 | str | web_game | |
+| 5 | str | card | |
+| 6 | str | media_bangumi | |
+| 7 | str | media_ft | |
+| 8 | str | bili_user | |
+| 9 | str | user | |
+| 10 | str | star | |
+| 11 | str | video | |
+
+`data`中的`result`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | -------------- | ----- |
+| pubdate | str | 发布时间 | 格式为 `yyyy-MM-dd HH:mm:ss` |
+| pic | str | 封面图 | |
+| tag | str | 标签 | 用 `,` 分隔 |
+| duration | num | 时长 | 单位为秒 |
+| id | num | aid | |
+| rank_score | num | 排序分数? | |
+| badgepay | bool | 是否有角标? | |
+| senddate | num | 发送时间? | UNIX 秒级时间戳 |
+| author | str | UP主名 | |
+| review | num | 评论数 | |
+| mid | num | UP主mid | |
+| is_union_video | num | 是否为联合投稿 | |
+| rank_index | num | 排序索引号 | |
+| type | str | 类型 | video: 视频 |
+| arcrank | str | 0 | 作用尚不明确 |
+| play | str | 播放数 | |
+| rank_offset | num | 排序偏移? | 与 `rank_index` 相同 |
+| description | str | 简介 | |
+| video_review | num | 弹幕数? | |
+| is_pay | num | 是否付费? | 0: 免费
1: 付费 |
+| favorites | num | 收藏数 | |
+| arcurl | str | 视频播放页URL | |
+| bvid | str | bvid | |
+| title | str | 标题 | |
+| vt | num | 0 | 作用尚不明确 |
+| enable_vt | num | 0 | 作用尚不明确 |
+| vt_display | str | 空 | 作用尚不明确 |
+
+**示例:**
+
+获取`tid=231(科技->计算机技术)`分区近期投稿列表, 按播放数排序, 页码为1, 视频数为2, 时间一周
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/newlist_rank' \
+--data-urlencode 'search_type=video' \
+--data-urlencode 'view_type=hot_rank' \
+--data-urlencode 'order=click' \
+--data-urlencode 'cate_id=231' \
+--data-urlencode 'page=1' \
+--data-urlencode 'pagesize=2' \
+--data-urlencode 'time_from=20240716' \
+--data-urlencode 'time_to=20240723'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "exp_list": null,
+ "show_module_list": [
+ "tips",
+ "brand_ad",
+ "esports",
+ "activity",
+ "web_game",
+ "card",
+ "media_bangumi",
+ "media_ft",
+ "bili_user",
+ "user",
+ "star",
+ "video"
+ ],
+ "result": [
+ {
+ "pubdate": "2024-07-19 15:27:23",
+ "pic": "//i0.hdslb.com/bfs/archive/a6c2a8669e623333eee4bd8316b4e7b01716b7f2.jpg",
+ "tag": "微软,Microsoft",
+ "duration": 14,
+ "id": 1406270001,
+ "rank_score": 237205,
+ "badgepay": false,
+ "senddate": 1721410429,
+ "author": "柚子木字幕组",
+ "review": 928,
+ "mid": 221648,
+ "is_union_video": 0,
+ "rank_index": 1,
+ "type": "video",
+ "arcrank": "0",
+ "play": "237205",
+ "rank_offset": 1,
+ "description": "X",
+ "video_review": 42,
+ "is_pay": 0,
+ "favorites": 618,
+ "arcurl": "http://www.bilibili.com/video/av1406270001",
+ "bvid": "BV1gr421M7rE",
+ "title": "突发:微软服务中断正在影响全球用户",
+ "vt": 0,
+ "enable_vt": 0,
+ "vt_display": ""
+ },
+ {
+ "pubdate": "2024-07-17 22:12:47",
+ "pic": "//i0.hdslb.com/bfs/archive/1b02bc3806369f8c051a84e1ffef11b22695e659.jpg",
+ "tag": "演讲,大学,编程,英伟达,人工智能,TED,AI,黄仁勋",
+ "duration": 1908,
+ "id": 1556206286,
+ "rank_score": 52653,
+ "badgepay": false,
+ "senddate": 1721225567,
+ "author": "YouTube精选字幕组",
+ "review": 147,
+ "mid": 487511093,
+ "is_union_video": 0,
+ "rank_index": 2,
+ "type": "video",
+ "arcrank": "0",
+ "play": "52648",
+ "rank_offset": 2,
+ "description": "New SciTech\n上月加州理工学院毕业典礼上,刚刚带领英伟达达成世界第一市值的CEO黄仁勋,到场分享对当下AI革命趋势的见解、带领英伟达转型成AI公司的历程、以及自己在职场这么多年的人生感悟。\n\n全程没有上位者那种空洞无意义的说教,都是真实的发展故事和对未来世界的看法。如果你的工作生活中有涉及到AI技术的可能,那么这期演讲将会非常有意义。",
+ "video_review": 16,
+ "is_pay": 0,
+ "favorites": 2152,
+ "arcurl": "http://www.bilibili.com/video/av1556206286",
+ "bvid": "BV1C1421b7dD",
+ "title": "“这个时代要跑,不要走”黄仁勋加州理工毕业演讲完整版",
+ "vt": 0,
+ "enable_vt": 0,
+ "vt_display": ""
+ }
+ ],
+ "show_column": 0,
+ "rqt_type": "search",
+ "numPages": 404,
+ "numResults": 808,
+ "crr_query": "",
+ "pagesize": 2,
+ "suggest_keyword": "",
+ "egg_info": null,
+ "cache": 0,
+ "exp_bits": 1,
+ "exp_str": "",
+ "seid": "6717218533109517809",
+ "msg": "success",
+ "egg_hit": 0,
+ "page": 1
+ }
+}
+```
+
+