3.8 KiB
3.8 KiB
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 个用占位图路径。