Install
openclaw skills install @f0ll0wwind/commute-survival-guide智能通勤助手,实时查询驾车、公交、骑行、步行路线,结合天气和路况,推荐最优通勤方案并可生成高德导航二维码。
openclaw skills install @f0ll0wwind/commute-survival-guide你是一个智能通勤决策助手,帮用户做每天"怎么去上班/回家"的最优决策。用户只需说出起点和终点(或直接说"今天怎么去上班"),我就能同时查询驾车、公交、骑行、步行四种方案,叠加实时路况和天气,直接告诉用户现在走哪条路最舒服。
本 SKILL 通过高德地图 Web 服务 API(HTTP 接口)获取数据,使用前需完成以下配置:
AMAP_API_KEY 中个人开发者免费,每日调用量充足,无需付费。
本 SKILL 运行时通过高德 Web 服务 API(https://restapi.amap.com)的 HTTP GET 接口获取数据。
扫码导航功能需要 Python qrcode 库,首次使用前安装:
pip install qrcode
直接用自然语言告诉我你的通勤信息:
快速查询:
"我从望京SOHO到国贸大厦,今天怎么走最快?"
"帮我查一下从西二旗到中关村的通勤路线"
"今天怎么去上班?我家在天通苑,公司在金融街"
指定偏好:
"我不想坐地铁,看看开车和骑车哪个快"
"今天限行吗?我的车牌是京A12345"
"从家到公司有没有顺路的咖啡店?"
获取报告:
"帮我统计一下这个月的通勤情况"
"我每天通勤多久?有没有更快的路线?"
扫码导航:
"帮我查通勤路线,推荐方案生成二维码"
"从望京到国贸,我要扫码导航"
当你说出起点和终点时,我会:
地理编码 API 将地址转为经纬度坐标驾车、公交、骑行、步行 四种路径规划 API天气 API 获取实时天气和预报周边搜索 API 查找路线上的便利店、咖啡店等commute_log.json,用于月度统计查完四种路线 + 天气后,按以下规则生成推荐:
天气因素:
路况因素:
限行因素:
综合推荐:
🕐 2026-06-13 周五 08:15
📍 望京SOHO → 国贸大厦
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚇 地铁/公交 42分钟 ✅ 推荐
14号线 → 10号线,换乘1次
步行距离:680米
预计 8:57 到达
🚗 驾车 38分钟
建国路 → 四惠桥 → 京通快速
⚠️ 建国路东向西缓行(约2公里)
过路费:无 | 打车费:约35元
🚲 骑行 ❌ 不推荐
🌧 当前有小雨,路面湿滑,不建议骑行
🚶 步行 95分钟
距离 6.2 公里,不建议日常通勤
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌤️ 天气:小雨 18°C 东南风3级
💡 出门建议:带伞、穿防水鞋
💡 建议坐地铁,42分钟到达,最稳妥。
骑行因雨天已自动排除。
🏪 沿途便利设施
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
☕ 咖啡店
1. Manner Coffee(望京SOHO店) 距起点 120米
2. 瑞幸咖啡(国贸大厦店) 距终点 85米
🏪 便利店
1. 7-Eleven(望京站店) 路过
2. 全家(大望路站店) 路过
⛽ 加油站
1. 中国石化(大望路站) 路过
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 2026年6月 通勤月报
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 总体数据
通勤次数:42次
总耗时:28.7小时
平均单程:41分钟(↓3分钟 vs 5月)
🏆 亮点
最快一次:6月5日 32分钟(8:22出门,驾车走建国路)
最常路线:建国路 → 四惠桥(29次,69%)
最佳出门窗口:8:20 - 8:30
🐌 瓶颈
最慢一次:6月11日 68分钟(暴雨 + 事故)
最堵路段:建国路东向西(出现拥堵 18次)
📊 交通方式分布
🚇 地铁:24次(57%)
🚗 驾车:16次(38%)
🚲 骑行:2次(5%)
💰 效率提升
相比"每次都走最堵路线",本月节省约 2.1 小时
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚗 限行查询
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
车牌:京A12345
日期:2026-06-13(周五)
✅ 今日不限行,可以正常驾车通勤
下次限行:6月16日(周一),尾号 1 和 6
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📱 扫码导航 — 驾车
推荐: 驾车 21分钟 | 5.0km | 无限行
[二维码在终端内显示]
扫码打开高德地图,直接开始驾车导航
深圳湾一号 → 深圳大学粤海校区
推荐驾车/骑行/步行时生成二维码,公交/地铁不生成(无需导航)。
| 能力 | API | 用途 |
|---|---|---|
| 地理编码 | geocode/geo | 地址转经纬度坐标(地标名可能不准) |
| POI 搜索 | place/text | 关键词搜索 POI,获取坐标更准确 |
| 逆地理编码 | geocode/regeo | 经纬度转地址(定位用) |
| 驾车路径规划 | v5/direction/driving | 驾车路线 + 实时路况 + 限行(需 show_fields=cost,tmcs) |
| 公交路径规划 | v5/direction/transit/integrated | 公交/地铁路线 + 换乘(需 show_fields=cost) |
| 步行路径规划 | v5/direction/walking | 步行路线(需 show_fields=cost) |
| 骑行路径规划 | v5/direction/bicycling | 骑行路线(duration 在顶层,无需 show_fields) |
| 电动车路径规划 | v5/direction/electrobike | 电动车路线,考虑限行 |
| 实时天气 | weather/weatherInfo(extensions=base) | 当前天气、温度、风力 |
| 天气预报 | weather/weatherInfo(extensions=all) | 未来4天预报 |
| 周边搜索 | place/around | 沿途便利店、咖啡店、加油站 |
| 行政区划 | config/district | 城市/区域编码查询 |
路径规划 API 使用 v5 版本,其余 API 使用 v3 版本。所有接口通过 HTTP GET 请求调用,返回 JSON 格式数据。
重要:路径规划必须用 v5(
/v5/direction/...),v3 老接口(/v3/direction/...)骑行已不可用。
1. 地理编码(地址 → 坐标):
GET https://restapi.amap.com/v3/geocode/geo
?key={AMAP_API_KEY}
&address=望京SOHO
&city=北京
返回 geocodes[0].location 为 "经度,纬度" 格式字符串。
注意:地理编码对地标名(如"望京SOHO")识别可能不准。推荐优先使用 POI 搜索(见下方)获取坐标。
1b. POI 搜索(推荐,坐标更准确):
GET https://restapi.amap.com/v3/place/text
?key={AMAP_API_KEY}
&keywords=望京SOHO
&city=北京
&citylimit=true
返回 pois[0].location 为 "经度,纬度" 格式。对地标、商场、写字楼等 POI 名称,此接口比地理编码更准确。
2. 驾车路线查询(含实时路况):
GET https://restapi.amap.com/v5/direction/driving
?key={AMAP_API_KEY}
&origin=116.481028,39.989643
&destination=116.434446,39.90816
&strategy=32
&show_fields=cost,tmcs
strategy=32 高德推荐(同高德APP默认),可选值:33躲避拥堵、34高速优先、35不走高速 等show_fields=cost,tmcs 返回耗时费用 + 路况详情route.paths[0].cost.duration(秒)— 总耗时route.paths[0].steps[].tmcs[] — 路况数组,tmc_status 值:畅通、缓行、拥堵、严重拥堵、未知route.paths[0].restriction — 0(无限行)或 1(有限行)3. 限行判断(驾车 API 扩展参数):
GET https://restapi.amap.com/v5/direction/driving
?key={AMAP_API_KEY}
&origin=...
&destination=...
&plate=京AHA322
传入 plate(完整车牌号如"京AHA322"),API 自动判断限行。
4. 公交路线查询:
GET https://restapi.amap.com/v5/direction/transit/integrated
?key={AMAP_API_KEY}
&origin=116.481028,39.989643
&destination=116.434446,39.90816
&city1=010
&city2=010
&strategy=0
&show_fields=cost
city1 起点城市编码,city2 终点城市编码strategy=0 推荐方案,可选值:1最经济、2最少换乘、3最少步行 等show_fields=cost 返回耗时费用route.transits[] 为多个方案,每个方案含:
transits[].cost.duration — 耗时(秒)transits[].cost.transit_fee — 公交费用(元)transits[].walking_distance — 步行距离(米)transits[].segments[] — 换乘段,segments[].bus.buslines[] 包含公交/地铁线路信息5. 步行路线查询:
GET https://restapi.amap.com/v5/direction/walking
?key={AMAP_API_KEY}
&origin=116.481028,39.989643
&destination=116.434446,39.90816
&show_fields=cost
show_fields=cost 返回耗时route.paths[0].distance(米)和 route.paths[0].cost.duration(秒)6. 骑行路线查询:
GET https://restapi.amap.com/v5/direction/bicycling
?key={AMAP_API_KEY}
&origin=116.481028,39.989643
&destination=116.434446,39.90816
route.paths[0].distance(米)和 route.paths[0].duration(秒)duration 在顶层,不在 cost 中(与驾车/步行/公交不同)6b. 电动车路线查询(可选):
GET https://restapi.amap.com/v5/direction/electrobike
?key={AMAP_API_KEY}
&origin=116.481028,39.989643
&destination=116.434446,39.90816
route.paths[0].duration(秒)在顶层7. 实时天气查询:
GET https://restapi.amap.com/v3/weather/weatherInfo
?key={AMAP_API_KEY}
&city=110105
&extensions=base
city 为城市编码(adcode),如 110105 是北京朝阳区lives[0].weather(天气现象)、lives[0].temperature(温度)、lives[0].windpower(风力)8. 天气预报查询:
GET https://restapi.amap.com/v3/weather/weatherInfo
?key={AMAP_API_KEY}
&city=110105
&extensions=all
返回 forecasts[0].casts[] 包含未来4天预报,每天含 dayweather、nightweather、daytemp、nighttemp。
9. 周边搜索(沿途 POI):
GET https://restapi.amap.com/v3/place/around
?key={AMAP_API_KEY}
&location=116.46,39.94
&keywords=便利店
&radius=500
&offset=5
location 搜索中心点(取路线中点坐标)keywords 搜索关键词radius 搜索半径(米)offset 每页条数pois[] 包含名称、地址、距离等10. 行政区划查询(获取城市编码):
GET https://restapi.amap.com/v3/config/district
?key={AMAP_API_KEY}
&keywords=北京
&subdistrict=0
返回 districts[0].adcode 为城市编码,可用于天气查询。
为提高效率,以下 API 可并行调用(无依赖关系):
调用顺序:
第1步(并行):geocode(起点) + geocode(终点)
第2步(并行):driving + transit + walking + bicycling + weather
第3步:综合分析,生成推荐
第4步(可选):around(路线中点) 搜索沿途 POI
第5步:输出格式化结果
第6步:为推荐方案生成二维码(终端内显示)
根据推荐方案生成高德地图 URI Scheme 链接,用 Python qrcode 库在终端内直接显示二维码。扫码后打开高德 App 进入导航。
URI Scheme 格式:
| 推荐方式 | 链接格式 |
|---|---|
| 驾车 | https://uri.amap.com/navigation?from={起坐标},{起名}&to={终坐标},{终名}&mode=car&policy=0&src=mypage&coordinate=gaode |
| 骑行/电动车 | https://uri.amap.com/navigation?from={起坐标},{起名}&to={终坐标},{终名}&mode=ride&src=mypage&coordinate=gaode |
| 步行 | https://uri.amap.com/navigation?from={起坐标},{起名}&to={终坐标},{终名}&mode=walk&src=mypage&coordinate=gaode |
| 公交 | 不生成二维码(无需导航) |
生成并显示二维码的 Python 代码:
import qrcode
def show_nav_qr(origin_coord, origin_name, dest_coord, dest_name, mode):
"""为推荐方案生成终端二维码"""
if mode == 'car':
url = f'https://uri.amap.com/navigation?from={origin_coord},{origin_name}&to={dest_coord},{dest_name}&mode=car&policy=0&src=mypage&coordinate=gaode'
elif mode == 'ride':
url = f'https://uri.amap.com/navigation?from={origin_coord},{origin_name}&to={dest_coord},{dest_name}&mode=ride&src=mypage&coordinate=gaode'
elif mode == 'walk':
url = f'https://uri.amap.com/navigation?from={origin_coord},{origin_name}&to={dest_coord},{dest_name}&mode=walk&src=mypage&coordinate=gaode'
else:
return # 公交不生成二维码
qr = qrcode.QRCode(version=1, box_size=1, border=1)
qr.add_data(url)
qr.make(fit=True)
qr.print_ascii(invert=True)
# 调用示例
show_nav_qr('113.942717,22.506895', '深圳湾一号', '113.936577,22.532641', '深圳大学粤海校区', 'car')
注意事项:
box_size=1 控制终端显示大小,border=1 控制边距print_ascii(invert=True) 用 unicode 方块字符在终端渲染,无需生成图片文件通勤记录存储在本地文件 commute_log.json 中,每次查询后追加记录:
{
"records": [
{
"date": "2026-06-13",
"time": "08:15",
"from": "望京SOHO",
"from_coord": "116.481028,39.989643",
"to": "国贸大厦",
"to_coord": "116.434446,39.90816",
"mode": "地铁",
"duration": 42,
"distance": 12800,
"weather": "小雨",
"temperature": 18,
"windpower": "3",
"route": "14号线→10号线",
"recommendation": "地铁最稳妥"
}
]
}
月报统计基于此文件聚合计算,包括:
/v5/direction/...),v3 老接口骑行已不可用。show_fields 参数显式请求,否则只返回基础信息。驾车用 show_fields=cost,tmcs,其他用 show_fields=cost。cost.duration 中(需 show_fields=cost);骑行/电动车的耗时在 route.paths[0].duration 顶层(无需 show_fields)。plate=京AHA322(完整车牌号),不再用 province + number。010),天气查询需要 adcode(如 110105)。可通过行政区划 API 查询获取。place/text(POI 搜索)获取坐标。steps[].tmcs[].tmc_status 可能返回"未知"(无路况数据的路段),需在展示时处理。116.481028,39.989643),注意不要写反。commute_log.json,首次使用时文件不存在,需先创建。本 SKILL 使用 高德开放平台 的地图数据服务,覆盖全国 1000+ 城市。