返回顶部
g

goplaces-togoGoPlaces推荐

Ask the user for their Google saved places list, look up each place with goplaces, and recommend the single best one to visit today based on their preferences and visit history.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.2
安全检测
已通过
294
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

goplaces-togo

goplaces-togo

目标

通过 goplaces CLI 获取实时详情(评分、营业时间、评论),结合用户自己的笔记、用户指定的菜系和位置偏好以及访问历史,帮助用户从其保存的 Google 地点列表中选择一个地点进行访问,然后给出清晰、有主见的推荐。

前置条件

  • - goplaces 二进制文件已安装并位于 PATH 中。
  • 已设置 GOOGLEPLACESAPIKEY 环境变量。
  • Google Takeout 保存的地点 CSV — 从 https://takeout.google.com 导出一次:
1. 点击取消全选,然后仅勾选 已保存 2. 点击下一步 → 导出一次 → 创建导出 3. 下载 zip 文件,在 Takeout/Saved/Saved Places.csv 找到 CSV 文件 4. 将文件路径提供给代理 — 它会自动导入并记住
  • - 本地数据文件 skills/goplaces-togo/goplaces-visits.json 用于持久化保存的列表和访问历史(首次使用时自动创建)。

数据文件结构

skills/goplaces-togo/goplaces-visits.json 是所有持久化状态的唯一数据源:

json
{
savedList: [
{
name: 字符串,
mapsUrl: 字符串 | null,
placeId: 字符串 | null,
city: 字符串 | null,
userComment: 字符串 | null,
addedAt: YYYY-MM-DD
}
],
places: {
: {
name: 字符串,
city: 字符串 | null,
visits: [
{ date: YYYY-MM-DD, time: HH:MM, note: 字符串 | null }
]
}
}
}

  • - savedList — 用户保存的地点,持久化保存以免用户再次粘贴。
  • savedList[].city — 通过 Places API 解析的标准化城市名称;用于在评分前按城市筛选。
  • places — 以 place_id 为键,保存访问历史,用于记录和近期访问评分。

步骤

1. 加载或询问保存的列表

读取 skills/goplaces-togo/goplaces-visits.json。检查 savedList 是否存在且至少有一个条目。

如果存在保存的列表,向用户显示并询问:

我有您上次保存的列表:

  1. 1. <名称> —
  2. ...

使用此列表,还是提供新的 CSV 替换它?(按 Enter 使用现有列表。)

  • - 如果用户按 Enter 或说使用它/是/类似的肯定回答 → 保持 savedList 不变并继续。
  • 如果用户提供新的 CSV 文件路径或粘贴 CSV 内容 → 用新解析的条目替换 savedList(参见步骤 2),写入磁盘,然后继续。
  • 如果用户说添加或更新后跟新的 CSV → 合并:添加新条目,保留不重复的现有条目(按名称不区分大小写或 mapsUrl 匹配)。将合并后的列表写入磁盘。

如果不存在保存的列表,准确地说:

我需要您的 Google 保存的地点列表。获取方法如下:

  1. 1. 访问 https://takeout.google.com
  2. 点击取消全选,然后向下滚动并仅勾选 已保存
  3. 点击下一步 → 导出一次 → 创建导出
  4. 下载 zip 文件,打开它,在 Saved/ 文件夹中找到 CSV 文件(例如 Saved Places.csv)
  5. 分享文件路径或在此处粘贴其内容

等待用户提供 CSV 后再进入步骤 2。

2. 解析 CSV 并提取用户评论

从 Google Takeout 导出的 CSV 具有以下标题和格式:

Title,Note,URL,Tags,Comment
Gochi Cupertino,,https://www.google.com/maps/place/Gochi+Cupertino/data=!4m2!3m1!1s0x808fb5c78e1841e7:0xf8efac3fb5ce0b40,,
Kunjip Tofu,Fine and good for date,https://www.google.com/maps/place/Kunjip+Tofu/data=!4m2!3m1!1s0x808fb10003a9a597:0xe41f61b5ba1b2f19,,

对于每个非空数据行(跳过标题行和空行):

  • - Title → name
  • Note → userComment(如果为空则使用 null)
  • URL → mapsUrl — 按原样存储以供参考;不要尝试从 URL 路径中提取地点 ID,因为 data=!4m2!3m1!1s 中的十六进制值是 Google 的内部 CID 格式,不是 Places API ID
  • Tags, Comment → 暂时忽略
  • 将 addedAt 设置为今天的日期
  • 存储 { name, mapsUrl, userComment, addedAt, placeId: null }

解析后,在进行任何 API 调用之前,立即将结果数组写入 skills/goplaces-togo/goplaces-visits.json 的 savedList 中。这确保即使会话提前结束,列表也不会丢失。

3. 按城市分类每个地点

对于 savedList 中 city 为 null 的每个条目,解析地点名称以获取其城市:

bash
goplaces resolve <地点名称> --limit 1 --json

从结果中,按以下优先级提取城市:

  1. 1. candidates[0].addressComponents — 找到 types 包含 locality 的组件 → 使用其 longText
  2. 回退到 types 包含 administrativearealevel_2 的组件 → 使用其 longText
  3. 回退到从 candidates[0].formattedAddress 解析城市标记(通常是逗号分隔的第二段,例如 Gochi, Cupertino, CA 95014 → Cupertino)
  4. 如果全部失败,将 city 设置为 null 并将该条目标记为未分类

将城市名称标准化为首字母大写(例如 cupertino → Cupertino)。同时存储 candidates[0].place_id 中的 placeId — 无需在步骤 4 中重新解析。

分类所有条目后,将更新后的 savedList(包含已填写的 city 和 placeId)写回磁盘。

按城市分组向用户显示摘要:

在 X 个城市中找到 N 个地点:

  • - Cupertino(3):Gochi Cupertino, Eilleens Kitchen, ...
  • Santa Clara(2):Pho to Chau 999, ...
  • 未分类(1):Some Place Name

4. 询问用户今天所在的城市

准确地说:

您今天在哪个城市?(或按 Enter 搜索所有城市)

  • - 如果用户说出一个城市 → 将 savedList 筛选为 city 匹配的条目(不区分大小写)。仅使用这些进行评分。如果该城市没有匹配项,请告知并再次询问或提供搜索所有城市的选项。
  • 如果用户按 Enter 或说全部/任何地方 → 使用完整的 savedList。
  • 将所选城市作为 currentCity(或全部为 null)存储在此会话的内存中。

5. 询问菜系和位置偏好

准确地说:

您今天想吃什么菜系或类型的食物?您有偏好的街区或区域吗?(按 Enter 跳过任一问题。)

等待用户的回复。解析两个可选值:

  • - cuisinePreference — 例如日本料理、意大利菜、任何辣的,如果跳过则为 null。
  • locationPreference — 例如涩谷、新宿站 2 公里范围内,如果跳过则为 null。

如果用户跳过两者,则无需偏好筛选直接继续。

6. 解析任何仍未解析的地点 ID

步骤 3 已经为新导入的条目解析并存储了 placeId。仅对仍具有 placeId: null 的条目重新运行解析(例如手动添加的条目):

bash
goplaces resolve <地点名称> --limit 1 --json

解析 JSON。获取 candidates[0].place_id。如果 city 仍为 null,也回填 city。如果结果为空,将该条目标记

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 goplaces-togo-1776187358 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 goplaces-togo-1776187358 技能

通过命令行安装

skillhub install goplaces-togo-1776187358

下载

⬇ 下载 goplaces-togo v1.0.2(免费)

文件大小: 7.5 KB | 发布时间: 2026-4-15 13:21

v1.0.2 最新 2026-4-15 13:21
**Adds city classification and city-based filtering to recommendations.**

- Each saved place is now classified by city using the Places API; city names are stored and normalized.
- On launch, shows a summary of saved places grouped by city, and asks which city the user is in today (with option to search all).
- Recommendations filter by selected city before applying cuisine/location preferences.
- The data schema is updated: both `savedList` and `places` entries can contain a `city` field.
- Place ID resolution now fills in both `city` and `placeId` for new entries to reduce duplicate lookups.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部