Files
Stardream 2d59bb772c feat(oshi-tabi-speedtest): add JR oshi-tabi speedtest bypass userscript
Simulates movement along the Tokaido Shinkansen route, supports Nagoya
inbound/outbound direction checks, overrides watch/getCurrentPosition,
and includes a night-time API window bypass switch.
2026-06-24 07:19:40 +10:00
..

fuck-jr-central-oshi-tabi-speedtest 去他妈的JR东海/东日本 "推し旅" 测速

本项目修改自 kiritoxkiriko/fuck-jr-central-oshi-tabi-speedtest

简介

众所周知,JR 东海/东日本经常推出和热门 IP 联动的 "推し旅" 活动。 这些活动往往需要乘坐新干线进行测速来领取特典,比如 JR東海×「BanG Dream! 10th ANNIVERSARY」ブルーアーカイブ × JR東海 推し旅 名古屋。 本脚本用来快速绕过这个测速。

原理

活动页通过浏览器的 navigator.geolocation API 获取你的速度位置,并校验位置是否落在一组预设的矩形区域(area)内。 原项目针对的 recommend.jr-central.co.jp 旧活动是在前端直接判定的,所以只要 hook navigator.geolocation.watchPosition 让它返回一个固定速度和一个范围内随机经纬度即可绕过。 oshi-tabi.voistock.com 的活动则把采样点上传到服务端判定,详见下方「服务端测速」一节;但数据源同样是 navigator.geolocation,所以 hook 的思路通用。)

不过 voistock 的 ブルアカ × 名古屋 活动除了速度,还会判定方向: 它会比较连续位置点相对目标车站(名古屋 [35.17099309, 136.8815566])的运动方向, 入口 名古屋行き 要求逐步靠近名古屋(towards),名古屋帰り 要求逐步远离away)。 旧脚本返回的“东京矩形内随机点”没有稳定路线,连续采样的方向来回跳变,会触发:

進行方向が逆(反対方向)です。正しい方向の新幹線で再度お試しください。

因此本脚本改为沿东海道新干线真实途经点的折线轨迹模拟移动

  • 内置东京→名古屋的途经点折线,按真实时间推进位置(已行驶距离 = 经过秒数 × 速度), 保证上报的 speed 字段与相邻采样点算出的“距离/时间”速度自洽,且落在活动页要求的 150360 km/h 区间内。
  • 根据相邻点的方位角填入 heading(不再是 null)。
  • 同时覆写 watchPositiongetCurrentPositionclearWatch,覆盖页面可能用到的多种采样方式。
  • 右下角提供方向选择悬浮面板(名古屋行き / 名古屋帰り),切换即从对应起点重新出发; towards 时到名古屋距离单调递减,away 时单调递增。

可调参数集中在脚本顶部(SPEED_KMHSAMPLE_INTERVAL_MS、途经点 ROUTE_TO_NAGOYAENABLE_NIGHT_BYPASS 等), 不同活动页如有差异可自行调整。

服务端测速与接口营业时间

oshi-tabi.voistock.com 上的 ブルアカ × 名古屋 活动(第 1、2 弾共用同一套 scrt_measure.js)的测速判定在服务端 浏览器只负责用 navigator.geolocation 采集 GPS 点、成批 POST/api/measure/start/api/measure/point(s), 最终由服务器返回通过/失败。 (这跟原项目针对的 recommend.jr-central.co.jp 旧活动不是同一套实现,后者据原项目描述为纯前端判定。)

好消息是 - 服务器仍然是按你上传的 GPS 轨迹判定的,并不需要真实乘车凭证或额外认证, 所以本脚本的轨迹模拟同样有效,方向选对即可通过。

需要注意的一个坑是 接口营业时间:测速 API 在深夜会关闭,此时请求会直接返回

{ "status": "unavailable", "message": "このAPIは深夜の間はご利用いただけません。", "available_from": "05:55 JST" }

控制台对应 [MeasureClient] Error: 503 error这跟脚本无关,是接口本身按时间关闭。处理方式:

  • 正常情况下,等日本时间 05:55 之后再测即可。
  • 夜间调试时,脚本顶部的 ENABLE_NIGHT_BYPASS(默认开启)会在 document-start 阶段写入 localStorage.devMode = '1',让页面启用其内置的夜间测试 token 以绕开营业时间限制。 这只绕开“营业时间”,token 由 JR 维护、随时可能失效;不需要时把它设为 false 即可。