Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
PowerShell skill for calling Kakao Local API to normalize addresses and search places with keyword, location, radius, and category filters.
PowerShell skill for calling Kakao Local API to normalize addresses and search places with keyword, location, radius, and category filters.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
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.
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.
OpenClaw Skill for Kakao Local (Places & Address) API
μΉ΄μΉ΄μ€ λ‘컬 APIλ₯Ό νΈμΆνμ¬ μ£Όμ μ κ·ν λ° μ₯μ κ²μμ μννλ OpenClaw Skillμ λλ€.
Windows PowerShell 5.0+ curl.exe (Windows 10+ κΈ°λ³Έ ν¬ν¨) Kakao Developers REST API Key
μ€μ: API Keyλ μ€ν¬ νλΌλ―Έν°λ‘ μ λ¬νμ§ μμ΅λλ€ (λ‘κ·Έ λ ΈμΆ λ°©μ§).
# μ¬μ©μ νκ²½λ³μλ‘ μꡬ μ€μ [Environment]::SetEnvironmentVariable("KAKAO_REST_API_KEY", "your_rest_api_key_here", "User") # λλ νμ¬ μΈμ μλ§ μμ μ€μ $env:KAKAO_REST_API_KEY = "your_rest_api_key_here"
skills/kakao-local/data/config.json (create this file) μμ±: { "api_key": "your_rest_api_key_here" } β οΈ μ£Όμ: config.jsonμ .gitignoreμ μΆκ°νμ¬ μ»€λ° κΈμ§
Kakao Developers μ μ λ΄ μ ν리μΌμ΄μ β μ± μΆκ° μ± ν€ β REST API ν€ λ³΅μ¬
μ¬μ©μκ° μ λ ₯ν μ£Όμλ₯Ό μ κ·ννμ¬ λλ‘λͺ /μ§λ² μ£Όμμ μ’νλ‘ λ³νν©λλ€. API μλν¬μΈνΈ: GET https://dapi.kakao.com/v2/local/search/address.json μ λ ₯ νλΌλ―Έν°: -Action "NormalizeAddress" (νμ) -Query "μ£Όμ λ¬Έμμ΄" (νμ) -Size 3 (μ ν, κΈ°λ³Έκ°: 3) μΆλ ₯ νμ: { "ok": true, "action": "NormalizeAddress", "query": "μμΈ κ°λ¨κ΅¬ ν ν€λλ‘ 152", "count": 2, "candidates": [ { "roadAddress": "μμΈ κ°λ¨κ΅¬ ν ν€λλ‘ 152", "jibunAddress": "μμΈ κ°λ¨κ΅¬ μμΌλ 737", "x": "127.036557561809", "y": "37.4985995780801", "region": { "region1": "μμΈ", "region2": "κ°λ¨κ΅¬", "region3": "μμΌλ" }, "buildingName": "κ°λ¨νμ΄λΈμ€μΌν°", "zoneNo": "06236" } ], "raw": {} } μ¬μ© μμ: .\scripts\kakao_local.ps1 -Action NormalizeAddress -Query "νκ΅μλ‘ 235" .\scripts\kakao_local.ps1 -Action NormalizeAddress -Query "μμΈ κ°λ¨κ΅¬" -Size 5
ν€μλλ‘ μ₯μλ₯Ό κ²μν©λλ€. μμΉ κΈ°λ° λ°κ²½ κ²μκ³Ό μΉ΄ν κ³ λ¦¬ νν°λ§μ μ§μν©λλ€. API μλν¬μΈνΈ: GET https://dapi.kakao.com/v2/local/search/keyword.json μ λ ₯ νλΌλ―Έν°: -Action "SearchPlace" (νμ) -Query "κ²μ ν€μλ" (νμ) -Size 5 (μ ν, κΈ°λ³Έκ°: 5, μ΅λ: 15) -Page 1 (μ ν, κΈ°λ³Έκ°: 1, μ΅λ: 45) -X "127.027" (μ ν, μ€μ¬ κ²½λ) -Y "37.498" (μ ν, μ€μ¬ μλ) -Radius 1000 (μ ν, κ²μ λ°κ²½(m), μ΅λ: 20000) -CategoryGroupCode "CE7" (μ ν, μΉ΄ν κ³ λ¦¬ κ·Έλ£Ή μ½λ) μΉ΄ν κ³ λ¦¬ κ·Έλ£Ή μ½λ: MT1: λνλ§νΈ CS2: νΈμμ PS3: μ΄λ¦°μ΄μ§, μ μΉμ SC4: νκ΅ AC5: νμ PK6: μ£Όμ°¨μ₯ OL7: μ£Όμ μ, μΆ©μ μ SW8: μ§νμ² μ BK9: μν CT1: λ¬Ένμμ€ AG2: μ€κ°μ μ PO3: κ³΅κ³΅κΈ°κ΄ AT4: κ΄κ΄λͺ μ AD5: μλ° FD6: μμμ CE7: μΉ΄ν HP8: λ³μ PM9: μ½κ΅ μΆλ ₯ νμ: { "ok": true, "action": "SearchPlace", "query": "λνμΉ΄ν", "count": 5, "totalCount": 128, "isEnd": false, "items": [ { "id": "8739036", "name": "μ€νλ² μ€ κ°λ¨μ ", "roadAddress": "μμΈ κ°λ¨κ΅¬ ν ν€λλ‘ 152", "jibunAddress": "μμΈ κ°λ¨κ΅¬ μμΌλ 737", "x": "127.036557561809", "y": "37.4985995780801", "phone": "02-1234-5678", "categoryName": "μμμ > μΉ΄ν", "placeUrl": "http://place.map.kakao.com/8739036", "distance": "245" } ], "raw": {} } μ¬μ© μμ: # κΈ°λ³Έ κ²μ .\scripts\kakao_local.ps1 -Action SearchPlace -Query "λνμΉ΄ν" # κ°μ μ§μ .\scripts\kakao_local.ps1 -Action SearchPlace -Query "λΈλ°μΉ λ§μ§" -Size 10 # μμΉ κΈ°λ° λ°κ²½ κ²μ .\scripts\kakao_local.ps1 -Action SearchPlace -Query "μΉ΄ν" -X "127.027" -Y "37.498" -Radius 1000 # μΉ΄ν κ³ λ¦¬ νν°λ§ .\scripts\kakao_local.ps1 -Action SearchPlace -Query "μΉ΄ν" -CategoryGroupCode "CE7" -Size 15 # νμ΄μ§λ€μ΄μ .\scripts\kakao_local.ps1 -Action SearchPlace -Query "μ£Όμ°¨ κ°λ₯ν μΉ΄ν" -Page 2 -Size 10
{ "ok": false, "errorType": "MissingApiKey", "message": "Set KAKAO_REST_API_KEY env var or create config.json", "setupGuide": "https://developers.kakao.com/" }
{ "ok": false, "errorType": "InvalidApiKey", "message": "Invalid or expired API key", "statusCode": 401 }
{ "ok": false, "errorType": "ApiError", "message": "Failed to call Kakao API", "details": "..." }
{ "ok": true, "action": "SearchPlace", "query": "μ‘΄μ¬νμ§μλμ₯μ12345", "count": 0, "items": [] }
# μ£Όμ μ κ·ν ν μ¦κ²¨μ°ΎκΈ° μ μ₯ $result = .\skills\kakao-local\scripts\kakao_local.ps1 -Action NormalizeAddress -Query "νλμ ꡬμ" $data = $result | ConvertFrom-Json if ($data.ok -and $data.count -gt 0) { $best = $data.candidates[0] # μ¦κ²¨μ°ΎκΈ°μ μΆκ° $places = Get-Content ".\skills\kakao-local\data\places.json" -Raw | ConvertFrom-Json $places | Add-Member -NotePropertyName "νλ" -NotePropertyValue @{ roadAddress = $best.roadAddress x = $best.x y = $best.y savedAt = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") } -Force $places | ConvertTo-Json -Depth 10 | Out-File ".\skills\kakao-local\data\places.json" -Encoding UTF8 Write-Host "β μ¦κ²¨μ°ΎκΈ° μ μ₯: νλ β $($best.roadAddress)" } # μ₯μ κ²μ ν μμ 3κ° μΆμ² $result = .\skills\kakao-local\scripts\kakao_local.ps1 -Action SearchPlace -Query "μ£Όμ°¨ κ°λ₯ν μΉ΄ν" -Size 10 $data = $result | ConvertFrom-Json if ($data.ok -and $data.count -gt 0) { Write-Host "`nπ μΆμ² μ₯μ TOP 3:" $top3 = $data.items | Select-Object -First 3 $index = 1 foreach ($place in $top3) { Write-Host "`n[$index] $($place.name)" Write-Host " π $($place.roadAddress)" Write-Host " π $($place.phone)" Write-Host " π $($place.placeUrl)" $index++ } # μΊμμ μ μ₯ (μ€λ³΅ κ²μ λ°©μ§) $cache = @{ query = $data.query timestamp = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") ttl = 3600 # 1μκ° results = $data.items } $cache | ConvertTo-Json -Depth 10 | Out-File ".\skills\kakao-local\data\cache.json" -Encoding UTF8 }
.\scripts\kakao_local.ps1 -Action NormalizeAddress -Query "μμΈ κ°λ¨κ΅¬ ν ν€λλ‘ 152" # κΈ°λ: λλ‘λͺ /μ§λ² μ£Όμμ μ’ν μΆλ ₯
.\scripts\kakao_local.ps1 -Action SearchPlace -Query "λνμΉ΄ν" -Size 5 # κΈ°λ: 5κ° μΉ΄ν λͺ©λ‘ μΆλ ₯
# νκ²½λ³μ μμ μ κ±° $backup = $env:KAKAO_REST_API_KEY $env:KAKAO_REST_API_KEY = $null .\scripts\kakao_local.ps1 -Action SearchPlace -Query "μΉ΄ν" # κΈ°λ: {"ok": false, "errorType": "MissingApiKey", ...} # 볡ꡬ $env:KAKAO_REST_API_KEY = $backup
$env:KAKAO_REST_API_KEY = "invalid_key_12345" .\scripts\kakao_local.ps1 -Action SearchPlace -Query "μΉ΄ν" # κΈ°λ: {"ok": false, "errorType": "InvalidApiKey", ...}
skills/kakao-local/ βββ SKILL.md # μ΄ νμΌ (μ€ν¬ λͺ μΈ) βββ README.md # Quick Start βββ .gitignore # config.json λ³΄νΈ βββ scripts/ β βββ kakao_local.ps1 # λ©μΈ μ€ν¬ μ€ν¬λ¦½νΈ βββ data/ βββ config.json.template # API Key μ€μ ν νλ¦Ώ βββ places.json # μ¦κ²¨μ°ΎκΈ° (μ ν) βββ cache.json # κ²μ μΊμ (μ ν)
MIT License
This registry upload is "text-only" compatible: script sources are embedded under references/ as Markdown. To use the skill locally: Copy references/kakao_local.ps1.md content into a file: scripts/kakao_local.ps1 Copy references/config.json.template.md content into: data/config.json.template Set API key via env var KAKAO_REST_API_KEY (recommended) or create data/config.json (gitignored).
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.