# 720yun 原项目资源与鉴权说明

基于对 `text.md`（720yun 页面保存的 HTML/脚本）的检查，说明**是否有加密措施**、**为什么脚本读取与浏览器不一致**，以及**底面图的实际地址**。

---

## 一、原项目是否有加密/鉴权措施？

文档中**没有**对图片内容做加密（如 AES、自定义编解码）。资源 URL 为明文路径，不携带 token 或签名。

但存在以下**访问控制**，会影响脚本直接拉取或离线使用：

| 措施 | 说明 |
|------|------|
| **Referer 校验** | 页面含 `<meta name="referrer" content="always">`，请求会带来源页。CDN（如 resource-t.720static.com）很可能只允许来自 `*.720yun.com` 的 Referer，否则关闭连接或返回异常。用 Python/脚本直接请求时未带该 Referer，易出现连接被关（如 EOF）。 |
| **场景 JSON 不直出** | 场景配置在 `window.json="json/4ca3fae5e7x/.../3.json"`，由前端在浏览器里请求。该接口可能校验 Cookie/Origin/Referer，脚本直接 GET 常返回 403/404 或空，无法拿到完整 cube 路径列表。 |
| **过期与权限字段** | `window.data` 中有 `"expired":1`、`"urlExpiredDate":null`、`"privilege":1`。若服务端按 `expired` 或 `urlExpiredDate` 做时效控制，过期后可能拒绝部分接口或资源。 |

**结论**：没有对图片做“加密”，但有 **Referer/来源校验** 和可能的 **时效/权限** 控制，所以用脚本从站外直接拉取会失败或拿不全；在浏览器里从 720yun 页面打开时，由同源请求带正确 Referer，才能正常加载。

### 为什么 Chrome 能访问、脚本“读取”就不正确？

- 浏览器请求 720 的 CDN 时会自动带上 **Referer: https://www.720yun.com/**（以及完整 User-Agent）。CDN 只认这类请求，返回 200 和正确图片。
- 脚本若用默认 `urllib` 或只带简单 User-Agent、**不带 Referer**，CDN 会拒绝或关闭连接，你看到的就是“读取不正确”、EOF、403 等。
- **解决办法**：脚本里请求 720static.com 的 URL 时，必须加上与浏览器一致的请求头，例如：
  - `Referer: https://www.720yun.com/`
  - `User-Agent: Mozilla/5.0 (Macintosh; ...) Chrome/120.0.0.0 Safari/537.36`
- 本仓库已在 `scripts/fetch_720yun.py` 的 `download_file` 和 `scripts/parse_720yun_doc.py` 的下载逻辑里使用上述头，用 `--download` 拉取时与浏览器行为一致。

---

## 二、底面图（mobile_d）的实际地址与 CDN 域名

原项目**有底图**，地址为（与浏览器一致）：

- **底面**：`https://ssl-panoimg130.720static.com/resource/prod/4ca3fae5e7x/d22jkguytw6/59446768/imgs/mobile_d.jpg`

之前解析脚本里用的资源域是 **resource-t.720static.com**，而真实全景图 CDN 是 **ssl-panoimg130.720static.com**。用错域名时，脚本请求会失败或拿不到正确数据；在浏览器里因为页面请求的是正确域名，所以“在浏览器里是正确的数据”。

- 解析脚本已改为使用 **ssl-panoimg130.720static.com** 作为资源 base，生成的 6 面 + 缩略图 URL 与浏览器一致。
- 下载时需同时带 **Referer: https://www.720yun.com/** 和浏览器 User-Agent（见上一节），否则 CDN 仍可能拒绝，导致“读取”与浏览器不一致。

---

## 三、在本项目里怎么用（含底面）

- 解析出的 6 面 URL 已使用正确 CDN（ssl-panoimg130.720static.com），且含底面 mobile_d.jpg。
- 在项目根目录执行 **`python3 scripts/parse_720yun_doc.py --download`**，会用与浏览器一致的 Referer/User-Agent 把 6 面 + 缩略图下载到 `image/`，再在页面上选「选择六面体(6张)」按顺序选 image 下 6 张即可。
- 若仍只有 5 张（没有 d），可用一张纯黑或占位图作为第 6 张，或在 config 的 cubemap 里第 6 个用占位图路径。
