{
  "schemaVersion": "1.0",
  "item": {
    "slug": "map-search",
    "name": "Map Search",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/shoucangjia1qu/map-search",
    "canonicalUrl": "https://clawhub.ai/shoucangjia1qu/map-search",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/map-search",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=map-search",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "map_search.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/map-search"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/map-search",
    "agentPageUrl": "https://openagent3.xyz/skills/map-search/agent",
    "manifestUrl": "https://openagent3.xyz/skills/map-search/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/map-search/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "🗺️ Map Search Skill",
        "body": "多地图聚合搜索工具，支持高德、百度、腾讯。"
      },
      {
        "title": "核心代码",
        "body": "#!/usr/bin/env python3\n\"\"\"地图搜索工具\"\"\"\n\nimport os\nimport json\nimport requests\n\n# ========== 配置路径 ==========\nCONFIG_PATH = os.path.expanduser(\"~/.config/openclaw/map_config.json\")\n\n\n# ========== 读取配置函数 ==========\ndef get_config():\n    \"\"\"从配置文件读取所有配置（API Keys + 优先级）\"\"\"\n    if os.path.exists(CONFIG_PATH):\n        with open(CONFIG_PATH, 'r') as f:\n            config = json.load(f)\n            return {\n                \"api_keys\": {\n                    \"amap\": config.get(\"amap\", {}).get(\"api_key\", \"\"),\n                    \"baidu\": config.get(\"baidu\", {}).get(\"api_key\", \"\"),\n                    \"tencent\": config.get(\"tencent\", {}).get(\"api_key\", \"\")\n                },\n                \"priority\": config.get(\"priority\", [\"amap\", \"tencent\", \"baidu\"])\n            }\n    \n    # 回退到环境变量\n    return {\n        \"api_keys\": {\n            \"amap\": os.getenv(\"AMAP_API_KEY\", \"\"),\n            \"baidu\": os.getenv(\"BAIDU_MAP_API_KEY\", \"\"),\n            \"tencent\": os.getenv(\"TENCENT_MAP_API_KEY\", \"\")\n        },\n        \"priority\": [\"amap\", \"tencent\", \"baidu\"]\n    }\n\n\n# ========== 初始化全局变量 ==========\nCONFIG = get_config()           # 获取配置\nAPI_KEYS = CONFIG[\"api_keys\"]   # 提取 API Keys\nPRIORITY = CONFIG[\"priority\"]   # 提取优先级\n\nAMAP_KEY = API_KEYS[\"amap\"]\nBAIDU_KEY = API_KEYS[\"baidu\"]\nTENCENT_KEY = API_KEYS[\"tencent\"]\n\n\n# ========== 核心搜索函数 ==========\ndef search_maps(keyword, region=\"全国\", priority=None):\n    \"\"\"地图聚合搜索\"\"\"\n    if priority is None:\n        priority = PRIORITY  # 使用配置文件中的优先级\n    \n    results = {}\n    \n    # 高德搜索\n    if \"amap\" in priority and AMAP_KEY:\n        url = f\"https://restapi.amap.com/v3/place/text?key={AMAP_KEY}&keywords={keyword}&city={region}&output=json\"\n        r = requests.get(url, timeout=5).json()\n        if r.get(\"status\") == \"1\":\n            results[\"高德\"] = [{\"name\": p[\"name\"], \"address\": p[\"address\"], \"location\": p[\"location\"]}\n                              for p in r.get(\"pois\", [])[:5]]\n    \n    # 百度搜索\n    if \"baidu\" in priority and BAIDU_KEY:\n        url = f\"https://api.map.baidu.com/place/v2/search?query={keyword}&region={region}&ak={BAIDU_KEY}&output=json\"\n        r = requests.get(url, timeout=5).json()\n        if r.get(\"status\") == 0:\n            results[\"百度\"] = [{\"name\": p[\"name\"], \"address\": p.get(\"address\", \"\"), \"location\": p.get(\"location\", \"\")}\n                             for p in r.get(\"results\", [])[:5]]\n    \n    # 腾讯搜索\n    if \"tencent\" in priority and TENCENT_KEY:\n        url = f\"https://apis.map.qq.com/ws/place/v1/search?keyword={keyword}&region={region}&key={TENCENT_KEY}&output=json\"\n        r = requests.get(url, timeout=5).json()\n        if r.get(\"status\") == 0:\n            results[\"腾讯\"] = [{\"name\": p[\"name\"], \"address\": p.get(\"address\", \"\"), \"location\": p.get(\"location\", \"\")}\n                             for p in r.get(\"data\", [])[:5]]\n    \n    return results\n\n\n# ========== 主入口 ==========\nif __name__ == \"__main__\":\n    import sys\n    keyword = sys.argv[1] if len(sys.argv) > 1 else \"咖啡馆\"\n    region = sys.argv[2] if len(sys.argv) > 2 else \"上海\"\n    \n    results = search_maps(keyword, region)\n    \n    for source, items in results.items():\n        print(f\"\\n【{source}】\")\n        for i, item in enumerate(items, 1):\n            print(f\"  {i}. {item['name']}\")\n            print(f\"     地址: {item['address']}\")"
      },
      {
        "title": "1. 通过 exec 调用",
        "body": "python /root/.openclaw/workspace/skills/map-search/map_search.py \"咖啡馆\" \"上海\""
      },
      {
        "title": "2. 封装成 CLI 工具",
        "body": "# 创建软链接\nln -s /root/.openclaw/workspace/skills/map-search/map_search.py /usr/local/bin/map-search\n\n# 直接使用\nmap-search \"火锅\" \"北京\"\nmap-search \"酒店\" \"深圳\""
      },
      {
        "title": "配置文件",
        "body": "路径： ~/.config/openclaw/map_config.json\n\n{\n  \"amap\": {\n    \"api_key\": \"你的高德API Key\"\n  },\n  \"baidu\": {\n    \"api_key\": \"你的百度API Key\"\n  },\n  \"tencent\": {\n    \"api_key\": \"你的腾讯API Key\"\n  },\n  \"priority\": [\"amap\", \"tencent\", \"baidu\"]\n}"
      },
      {
        "title": "设置优先级",
        "body": "\"priority\": [\"amap\", \"tencent\", \"baidu\"]\n\n\"amap\" - 高德\n\"baidu\" - 百度\n\"tencent\" - 腾讯\n\n按数组顺序搜索，找到一个有效结果就停止。"
      },
      {
        "title": "环境变量（备选）",
        "body": "如果配置文件不存在，会回退到环境变量：\n\nexport AMAP_API_KEY=\"你的高德Key\"\nexport BAIDU_MAP_API_KEY=\"你的百度Key\"\nexport TENCENT_MAP_API_KEY=\"你的腾讯Key\""
      },
      {
        "title": "API Keys 申请",
        "body": "平台地址高德https://lbs.amap.com/百度https://lbsyun.baidu.com/腾讯https://lbs.qq.com/"
      },
      {
        "title": "关键词搜索",
        "body": "【高德】\n  1. 星巴克(人民广场店)\n     地址: 黄浦区南京西路123号\n  2. 瑞幸咖啡(来福士店)\n     地址: 黄浦区西藏中路268号"
      },
      {
        "title": "附近搜索",
        "body": "🔍 附近搜索: 咖啡馆 (半径 2000 米)\n正在获取当前位置...\n当前位置: 经度 121.47, 纬度 31.23\n\n【高德】\n  1. 星巴克(人民广场店)\n     地址: 黄浦区南京西路123号\n     距离: 520米\n  2. 瑞幸咖啡(来福士店)\n     地址: 黄浦区西藏中路268号\n     距离: 890米"
      },
      {
        "title": "自动获取当前位置（通过 IP 定位）",
        "body": "python /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k \"咖啡馆\""
      },
      {
        "title": "指定经纬度",
        "body": "python /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k \"咖啡馆\" --lat 31.230416 --lng 121.473701"
      },
      {
        "title": "指定搜索半径",
        "body": "python /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k \"火锅\" -r 1000"
      },
      {
        "title": "命令行参数",
        "body": "参数说明示例--nearby 或 -n启用附近搜索模式--nearby-k 或 --keyword搜索关键词-k \"咖啡馆\"--lat纬度--lat 31.230416--lng经度--lng 121.473701-r 或 --radius搜索半径（米，默认2000）-r 1000"
      },
      {
        "title": "使用场景示例",
        "body": "场景命令搜附近咖啡馆map-search --nearby -k \"咖啡馆\"搜附近1公里的火锅map-search --nearby -k \"火锅\" -r 1000搜指定位置附近的酒店map-search --nearby -k \"酒店\" --lat 39.9 --lng 116.4"
      },
      {
        "title": "注意事项",
        "body": "需要安装 requests 库: pip install requests\n每个地图 API 有每日调用次数限制\n配置文件优先级 > 环境变量\n附近搜索需要配置高德 API Key（用于 IP 定位）"
      }
    ],
    "body": "🗺️ Map Search Skill\n\n多地图聚合搜索工具，支持高德、百度、腾讯。\n\n核心代码\n#!/usr/bin/env python3\n\"\"\"地图搜索工具\"\"\"\n\nimport os\nimport json\nimport requests\n\n# ========== 配置路径 ==========\nCONFIG_PATH = os.path.expanduser(\"~/.config/openclaw/map_config.json\")\n\n\n# ========== 读取配置函数 ==========\ndef get_config():\n    \"\"\"从配置文件读取所有配置（API Keys + 优先级）\"\"\"\n    if os.path.exists(CONFIG_PATH):\n        with open(CONFIG_PATH, 'r') as f:\n            config = json.load(f)\n            return {\n                \"api_keys\": {\n                    \"amap\": config.get(\"amap\", {}).get(\"api_key\", \"\"),\n                    \"baidu\": config.get(\"baidu\", {}).get(\"api_key\", \"\"),\n                    \"tencent\": config.get(\"tencent\", {}).get(\"api_key\", \"\")\n                },\n                \"priority\": config.get(\"priority\", [\"amap\", \"tencent\", \"baidu\"])\n            }\n    \n    # 回退到环境变量\n    return {\n        \"api_keys\": {\n            \"amap\": os.getenv(\"AMAP_API_KEY\", \"\"),\n            \"baidu\": os.getenv(\"BAIDU_MAP_API_KEY\", \"\"),\n            \"tencent\": os.getenv(\"TENCENT_MAP_API_KEY\", \"\")\n        },\n        \"priority\": [\"amap\", \"tencent\", \"baidu\"]\n    }\n\n\n# ========== 初始化全局变量 ==========\nCONFIG = get_config()           # 获取配置\nAPI_KEYS = CONFIG[\"api_keys\"]   # 提取 API Keys\nPRIORITY = CONFIG[\"priority\"]   # 提取优先级\n\nAMAP_KEY = API_KEYS[\"amap\"]\nBAIDU_KEY = API_KEYS[\"baidu\"]\nTENCENT_KEY = API_KEYS[\"tencent\"]\n\n\n# ========== 核心搜索函数 ==========\ndef search_maps(keyword, region=\"全国\", priority=None):\n    \"\"\"地图聚合搜索\"\"\"\n    if priority is None:\n        priority = PRIORITY  # 使用配置文件中的优先级\n    \n    results = {}\n    \n    # 高德搜索\n    if \"amap\" in priority and AMAP_KEY:\n        url = f\"https://restapi.amap.com/v3/place/text?key={AMAP_KEY}&keywords={keyword}&city={region}&output=json\"\n        r = requests.get(url, timeout=5).json()\n        if r.get(\"status\") == \"1\":\n            results[\"高德\"] = [{\"name\": p[\"name\"], \"address\": p[\"address\"], \"location\": p[\"location\"]}\n                              for p in r.get(\"pois\", [])[:5]]\n    \n    # 百度搜索\n    if \"baidu\" in priority and BAIDU_KEY:\n        url = f\"https://api.map.baidu.com/place/v2/search?query={keyword}&region={region}&ak={BAIDU_KEY}&output=json\"\n        r = requests.get(url, timeout=5).json()\n        if r.get(\"status\") == 0:\n            results[\"百度\"] = [{\"name\": p[\"name\"], \"address\": p.get(\"address\", \"\"), \"location\": p.get(\"location\", \"\")}\n                             for p in r.get(\"results\", [])[:5]]\n    \n    # 腾讯搜索\n    if \"tencent\" in priority and TENCENT_KEY:\n        url = f\"https://apis.map.qq.com/ws/place/v1/search?keyword={keyword}&region={region}&key={TENCENT_KEY}&output=json\"\n        r = requests.get(url, timeout=5).json()\n        if r.get(\"status\") == 0:\n            results[\"腾讯\"] = [{\"name\": p[\"name\"], \"address\": p.get(\"address\", \"\"), \"location\": p.get(\"location\", \"\")}\n                             for p in r.get(\"data\", [])[:5]]\n    \n    return results\n\n\n# ========== 主入口 ==========\nif __name__ == \"__main__\":\n    import sys\n    keyword = sys.argv[1] if len(sys.argv) > 1 else \"咖啡馆\"\n    region = sys.argv[2] if len(sys.argv) > 2 else \"上海\"\n    \n    results = search_maps(keyword, region)\n    \n    for source, items in results.items():\n        print(f\"\\n【{source}】\")\n        for i, item in enumerate(items, 1):\n            print(f\"  {i}. {item['name']}\")\n            print(f\"     地址: {item['address']}\")\n\n使用方式\n1. 通过 exec 调用\npython /root/.openclaw/workspace/skills/map-search/map_search.py \"咖啡馆\" \"上海\"\n\n2. 封装成 CLI 工具\n# 创建软链接\nln -s /root/.openclaw/workspace/skills/map-search/map_search.py /usr/local/bin/map-search\n\n# 直接使用\nmap-search \"火锅\" \"北京\"\nmap-search \"酒店\" \"深圳\"\n\n配置文件\n\n路径： ~/.config/openclaw/map_config.json\n\n{\n  \"amap\": {\n    \"api_key\": \"你的高德API Key\"\n  },\n  \"baidu\": {\n    \"api_key\": \"你的百度API Key\"\n  },\n  \"tencent\": {\n    \"api_key\": \"你的腾讯API Key\"\n  },\n  \"priority\": [\"amap\", \"tencent\", \"baidu\"]\n}\n\n设置优先级\n\"priority\": [\"amap\", \"tencent\", \"baidu\"]\n\n\"amap\" - 高德\n\"baidu\" - 百度\n\"tencent\" - 腾讯\n\n按数组顺序搜索，找到一个有效结果就停止。\n\n环境变量（备选）\n\n如果配置文件不存在，会回退到环境变量：\n\nexport AMAP_API_KEY=\"你的高德Key\"\nexport BAIDU_MAP_API_KEY=\"你的百度Key\"\nexport TENCENT_MAP_API_KEY=\"你的腾讯Key\"\n\nAPI Keys 申请\n平台\t地址\n高德\thttps://lbs.amap.com/\n百度\thttps://lbsyun.baidu.com/\n腾讯\thttps://lbs.qq.com/\n输出示例\n关键词搜索\n【高德】\n  1. 星巴克(人民广场店)\n     地址: 黄浦区南京西路123号\n  2. 瑞幸咖啡(来福士店)\n     地址: 黄浦区西藏中路268号\n\n附近搜索\n🔍 附近搜索: 咖啡馆 (半径 2000 米)\n正在获取当前位置...\n当前位置: 经度 121.47, 纬度 31.23\n\n【高德】\n  1. 星巴克(人民广场店)\n     地址: 黄浦区南京西路123号\n     距离: 520米\n  2. 瑞幸咖啡(来福士店)\n     地址: 黄浦区西藏中路268号\n     距离: 890米\n\n🆕 附近搜索功能\n自动获取当前位置（通过 IP 定位）\npython /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k \"咖啡馆\"\n\n指定经纬度\npython /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k \"咖啡馆\" --lat 31.230416 --lng 121.473701\n\n指定搜索半径\npython /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k \"火锅\" -r 1000\n\n命令行参数\n参数\t说明\t示例\n--nearby 或 -n\t启用附近搜索模式\t--nearby\n-k 或 --keyword\t搜索关键词\t-k \"咖啡馆\"\n--lat\t纬度\t--lat 31.230416\n--lng\t经度\t--lng 121.473701\n-r 或 --radius\t搜索半径（米，默认2000）\t-r 1000\n使用场景示例\n场景\t命令\n搜附近咖啡馆\tmap-search --nearby -k \"咖啡馆\"\n搜附近1公里的火锅\tmap-search --nearby -k \"火锅\" -r 1000\n搜指定位置附近的酒店\tmap-search --nearby -k \"酒店\" --lat 39.9 --lng 116.4\n注意事项\n需要安装 requests 库: pip install requests\n每个地图 API 有每日调用次数限制\n配置文件优先级 > 环境变量\n附近搜索需要配置高德 API Key（用于 IP 定位）"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/shoucangjia1qu/map-search",
    "publisherUrl": "https://clawhub.ai/shoucangjia1qu/map-search",
    "owner": "shoucangjia1qu",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/map-search",
    "downloadUrl": "https://openagent3.xyz/downloads/map-search",
    "agentUrl": "https://openagent3.xyz/skills/map-search/agent",
    "manifestUrl": "https://openagent3.xyz/skills/map-search/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/map-search/agent.md"
  }
}