Help us improve
Share bugs, ideas, or general feedback.
From k-skill
Provides Korean door-to-door public transit routing (subway, bus, walking) via ODsay LIVE API and Kakao geocoding. Use for transit directions between two Korean addresses.
npx claudepluginhub nomadamas/k-skill --plugin k-skillHow this skill is triggered — by the user, by Claude, or both
Slash command
/k-skill:korean-transit-routeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
한국 대중교통(지하철+버스+도보) 도어투도어 길찾기 스킬. ODsay LIVE API + Kakao Local geocoding.
Queries Kakao Local API for place search (keyword, category, coordinate↔address) and Kakao Mobility for driving directions (distance, time, toll, taxi fare) via proxy. No user API key required.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
한국 대중교통(지하철+버스+도보) 도어투도어 길찾기 스킬. ODsay LIVE API + Kakao Local geocoding.
ODSAY_API_KEY 가 있으면 사용. 없으면 ~/.config/k-skill/secrets.env 에서 로드.k-skill-proxy 경유로 호출하므로 사용자 쪽 KAKAO_REST_API_KEY 는 불필요하다. self-host proxy 운영자만 KAKAO_REST_API_KEY 를 서버에 설정한다.자연어 입력에서 출발/도착을 추출. 좌표가 없으면 반드시 geocoding 먼저 (ODsay는 좌표만 받음).
기본 hosted proxy를 사용한다. Proxy가 Kakao Local REST API 키를 서버에서만 주입하고, caller apiKey 는 무시한다.
https://k-skill-proxy.nomadamas.org/v1/kakao-local/geocode?q=<주소/장소명>address.json → 결과 없으면 keyword.json응답 documents[0].x(경도), .y(위도) 사용.
import os, urllib.parse, urllib.request, json
PROXY=os.environ.get('KSKILL_PROXY_BASE_URL','https://k-skill-proxy.nomadamas.org').rstrip('/')
def geocode(q):
url=PROXY+'/v1/kakao-local/geocode?q='+urllib.parse.quote(q)
with urllib.request.urlopen(url,timeout=10) as resp:
d=json.loads(resp.read())
if d.get('documents'):
doc=d['documents'][0]
return float(doc['x']), float(doc['y']), doc.get('place_name') or doc.get('address_name')
return None
지하철역명만 정확히 알 때는 ODsay searchStation 도 OK 하지만, 도어투도어 결과를 원하면 실제 출발지/도착지 좌표를 써야 첫/끝 도보 구간이 계산됨.
set -a; . ~/.config/k-skill/secrets.env; set +a
KEY=$(python3 -c "import os,urllib.parse;print(urllib.parse.quote(os.environ['ODSAY_API_KEY'],safe=''))")
curl -s "https://api.odsay.com/v1/api/searchPubTransPathT?apiKey=${KEY}&SX=${SX}&SY=${SY}&EX=${EX}&EY=${EY}&OPT=0&SearchPathType=${TYPE}"
Parameters:
SX,SY 출발 경도/위도, EX,EY 도착 경도/위도 (WGS84)OPT: 0 추천순(기본), 4 최소시간, 5 최소환승SearchPathType: 0 지하철+버스, 1 지하철만, 2 버스만result.path[] 배열, 각 path:
pathType: 1=지하철, 2=버스, 3=지하철+버스info.totalTime(분), info.payment(원), info.subwayTransitCount, info.busTransitCount, info.totalWalk(m), info.firstStartStation, info.lastEndStationsubPath[]: 구간별. trafficType 1=지하철 2=버스 3=도보. 지하철이면 lane[0].name, startName, endName, passStopList.stations[](경유역)subPath 의 각 구간을 trafficType 별로 표시. 첫/끝 도보 구간은 출발지·도착지에서 역까지 실제 도보를 의미하므로 반드시 포함.
🚇 범안로95번길 32 → SKT타워
경로 1: 54분 · 1,950원 · 환승 2회 · 도보 688m
🚶 도보 1분
🚌 19번 부천범박힐스테이트 → 역곡역 (9분)
🚶 도보 2분
🚇 1호선 역곡 → 종각 (15정거장, 35분)
🚶 도보 7분
3개 이내 경로 비교 권장. OPT=4(최소시간) / OPT=5(최소환승) 옵션을 사용자가 선호 표시하면 그쪽으로 호출.
좌표 모르고 역명만 아는 경우 — searchStation 으로 변환:
curl -s "https://api.odsay.com/v1/api/searchStation?apiKey=${KEY}&stationName=강남&CID=1000"
CID=1000 = 수도권. 결과 result.station[].x,y 가 좌표.
searchPubTransPathT + searchStation 호출이 합산되니 한 질문당 호출 최소화.error 키 있으면 즉시 사용자에게 표시(ApiKey/IP 문제 진단에 유용).error 응답: msg 필드를 그대로 사용자에게 표시하고, ApiKey 미등록 또는 IP 화이트리스트 누락 가능성을 안내한다.