Back to Skills
    ๐Ÿฆž

    seoul-metro

    Seoul Metro assistant for real-time arrivals, route planning

    By @dukbong
    View on GitHub
    SKILL.md
    ---
    name: seoul-metro
    description: Seoul Metro assistant for real-time arrivals, route planning, and service alerts (Korean/English)
    metadata: {"moltbot":{"emoji":"๐Ÿš‡","requires":{"bins":["curl","jq"],"env":["SEOUL_OPENAPI_KEY","DATA_GO_KR_KEY"]},"primaryEnv":"SEOUL_OPENAPI_KEY"}}
    homepage: https://github.com/dukbong/seoul-metro
    user-invocable: true
    ---
    
    # Seoul Metro Skill
    
    Query real-time Seoul Metro information.
    
    ## Features
    
    | Feature | Description | Trigger Example (KO) | Trigger Example (EN) |
    |---------|-------------|----------------------|----------------------|
    | Real-time Arrival | Train arrival times by station | "๊ฐ•๋‚จ์—ญ ๋„์ฐฉ์ •๋ณด" | "Gangnam station arrivals" |
    | Station Search | Line and station code lookup | "๊ฐ•๋‚จ์—ญ ๋ช‡ํ˜ธ์„ ?" | "What line is Gangnam?" |
    | Route Search | Shortest path with time/fare | "์‹ ๋„๋ฆผ์—์„œ ์„œ์šธ์—ญ" | "Sindorim to Seoul Station" |
    | Service Alerts | Delays, incidents, non-stops | "์ง€ํ•˜์ฒ  ์ง€์—ฐ ์žˆ์–ด?" | "Any subway delays?" |
    
    ## Environment Variables
    
    | Variable | Usage | Provider |
    |----------|-------|----------|
    | `SEOUL_OPENAPI_KEY` | Arrival info, station search | data.seoul.go.kr |
    | `DATA_GO_KR_KEY` | Route search, alerts | data.go.kr |
    
    **How to get API keys:**
    1. **SEOUL_OPENAPI_KEY**: Sign up at [data.seoul.go.kr](https://data.seoul.go.kr), go to "My Page" > "API Key Management"
    2. **DATA_GO_KR_KEY**: Sign up at [data.go.kr](https://www.data.go.kr), search for the API service, and request access
    
    ---
    
    ## API Reference
    
    ### 1. Real-time Arrival Info
    
    **Endpoint**
    ```
    http://swopenAPI.seoul.go.kr/api/subway/{KEY}/json/realtimeStationArrival/{start}/{end}/{station}
    ```
    
    **Response Fields**
    
    | Field | Description |
    |-------|-------------|
    | `subwayId` | Line ID (1002=Line 2, 1077=Sinbundang) |
    | `trainLineNm` | Direction (e.g., "์„ฑ์ˆ˜ํ–‰ - ์—ญ์‚ผ๋ฐฉ๋ฉด") |
    | `arvlMsg2` | Arrival time (e.g., "4๋ถ„ 20์ดˆ ํ›„") |
    | `arvlMsg3` | Current location |
    | `btrainSttus` | Train type (์ผ๋ฐ˜/๊ธ‰ํ–‰) |
    | `lstcarAt` | Last train (0=No, 1=Yes) |
    
    ---
    
    ### 2. Station Search
    
    **Endpoint**
    ```
    http://openapi.seoul.go.kr:8088/{KEY}/json/SearchInfoBySubwayNameService/{start}/{end}/{station}
    ```
    
    **Response Fields**
    
    | Field | Description |
    |-------|-------------|
    | `STATION_CD` | Station code |
    | `STATION_NM` | Station name |
    | `LINE_NUM` | Line name (e.g., "02ํ˜ธ์„ ") |
    | `FR_CODE` | External station code |
    
    ---
    
    ### 3. Route Search
    
    **Endpoint**
    ```
    https://apis.data.go.kr/B553766/path/getShtrmPath
    ```
    
    **Parameters**
    
    | Parameter | Required | Description |
    |-----------|----------|-------------|
    | `serviceKey` | Yes | DATA_GO_KR_KEY |
    | `dptreStnNm` | Yes | Departure station |
    | `arvlStnNm` | Yes | Arrival station |
    | `searchDt` | Yes | Datetime (yyyy-MM-dd HH:mm:ss) |
    | `dataType` | Yes | JSON |
    | `searchType` | No | duration / distance / transfer |
    
    **Response Fields**
    
    | Field | Description |
    |-------|-------------|
    | `totalDstc` | Total distance (m) |
    | `totalreqHr` | Total time (seconds) |
    | `totalCardCrg` | Fare (KRW) |
    | `paths[].trainno` | Train number |
    | `paths[].trainDptreTm` | Departure time |
    | `paths[].trainArvlTm` | Arrival time |
    | `paths[].trsitYn` | Transfer flag |
    
    ---
    
    ### 4. Service Alerts
    
    **Endpoint**
    ```
    https://apis.data.go.kr/B553766/ntce/getNtceList
    ```
    
    **Parameters**
    
    | Parameter | Required | Description |
    |-----------|----------|-------------|
    | `serviceKey` | Yes | DATA_GO_KR_KEY |
    | `dataType` | Yes | JSON |
    | `pageNo` | No | Page number |
    | `numOfRows` | No | Results per page |
    | `lineNm` | No | Filter by line |
    
    **Response Fields**
    
    | Field | Description |
    |-------|-------------|
    | `noftTtl` | Alert title |
    | `noftCn` | Alert content |
    | `noftOcrnDt` | Timestamp |
    | `lineNmLst` | Affected line(s) |
    | `nonstopYn` | Non-stop flag |
    | `xcseSitnBgngDt` | Incident start |
    | `xcseSitnEndDt` | Incident end |
    
    ---
    
    ## Line ID Mapping
    
    | Line | ID | Line | ID |
    |------|----|------|----|
    | Line 1 | 1001 | Line 6 | 1006 |
    | Line 2 | 1002 | Line 7 | 1007 |
    | Line 3 | 1003 | Line 8 | 1008 |
    | Line 4 | 1004 | Line 9 | 1009 |
    | Line 5 | 1005 | Sinbundang | 1077 |
    | Gyeongui-Jungang | 1063 | Gyeongchun | 1067 |
    | Airport Railroad | 1065 | Suin-Bundang | 1075 |
    
    ---
    
    ## Station Name Mapping (English โ†’ Korean)
    
    ์ฃผ์š” ์—ญ ์ด๋ฆ„์˜ ์˜์–ด-ํ•œ๊ธ€ ๋งคํ•‘ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. API ํ˜ธ์ถœ ์‹œ ์˜์–ด ์ž…๋ ฅ์„ ํ•œ๊ธ€๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    
    ### Line 1 (1ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Seoul Station | ์„œ์šธ์—ญ | City Hall | ์‹œ์ฒญ |
    | Jonggak | ์ข…๊ฐ | Jongno 3-ga | ์ข…๋กœ3๊ฐ€ |
    | Jongno 5-ga | ์ข…๋กœ5๊ฐ€ | Dongdaemun | ๋™๋Œ€๋ฌธ |
    | Cheongnyangni | ์ฒญ๋Ÿ‰๋ฆฌ | Yongsan | ์šฉ์‚ฐ |
    | Noryangjin | ๋…ธ๋Ÿ‰์ง„ | Yeongdeungpo | ์˜๋“ฑํฌ |
    | Guro | ๊ตฌ๋กœ | Incheon | ์ธ์ฒœ |
    | Bupyeong | ๋ถ€ํ‰ | Suwon | ์ˆ˜์› |
    
    ### Line 2 (2ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Gangnam | ๊ฐ•๋‚จ | Yeoksam | ์—ญ์‚ผ |
    | Samseong | ์‚ผ์„ฑ | Jamsil | ์ž ์‹ค |
    | Sindorim | ์‹ ๋„๋ฆผ | Hongdae (Hongik Univ.) | ํ™๋Œ€์ž…๊ตฌ |
    | Hapjeong | ํ•ฉ์ • | Dangsan | ๋‹น์‚ฐ |
    | Yeouido | ์—ฌ์˜๋„ | Konkuk Univ. | ๊ฑด๋Œ€์ž…๊ตฌ |
    | Seolleung | ์„ ๋ฆ‰ | Samsung | ์‚ผ์„ฑ |
    | Sports Complex | ์ข…ํ•ฉ์šด๋™์žฅ | Gangbyeon | ๊ฐ•๋ณ€ |
    | Ttukseom | ๋š์„ฌ | Seongsu | ์„ฑ์ˆ˜ |
    | Wangsimni | ์™•์‹ญ๋ฆฌ | Euljiro 3-ga | ์„์ง€๋กœ3๊ฐ€ |
    | Euljiro 1-ga | ์„์ง€๋กœ์ž…๊ตฌ | City Hall | ์‹œ์ฒญ |
    | Chungjeongno | ์ถฉ์ •๋กœ | Ewha Womans Univ. | ์ด๋Œ€ |
    | Sinchon | ์‹ ์ดŒ | Sadang | ์‚ฌ๋‹น |
    | Nakseongdae | ๋‚™์„ฑ๋Œ€ | Seoul Nat'l Univ. | ์„œ์šธ๋Œ€์ž…๊ตฌ |
    | Guro Digital Complex | ๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€ | Mullae | ๋ฌธ๋ž˜ |
    
    ### Line 3 (3ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Gyeongbokgung | ๊ฒฝ๋ณต๊ถ | Anguk | ์•ˆ๊ตญ |
    | Jongno 3-ga | ์ข…๋กœ3๊ฐ€ | Chungmuro | ์ถฉ๋ฌด๋กœ |
    | Dongguk Univ. | ๋™๋Œ€์ž…๊ตฌ | Yaksu | ์•ฝ์ˆ˜ |
    | Apgujeong | ์••๊ตฌ์ • | Sinsa | ์‹ ์‚ฌ |
    | Express Bus Terminal | ๊ณ ์†ํ„ฐ๋ฏธ๋„ | Gyodae | ๊ต๋Œ€ |
    | Nambu Bus Terminal | ๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„ | Yangjae | ์–‘์žฌ |
    | Daehwa | ๋Œ€ํ™” | Juyeop | ์ฃผ์—ฝ |
    
    ### Line 4 (4ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Myeongdong | ๋ช…๋™ | Hoehyeon | ํšŒํ˜„ |
    | Seoul Station | ์„œ์šธ์—ญ | Sookmyung Women's Univ. | ์ˆ™๋Œ€์ž…๊ตฌ |
    | Dongdaemun History & Culture Park | ๋™๋Œ€๋ฌธ์—ญ์‚ฌ๋ฌธํ™”๊ณต์› | Hyehwa | ํ˜œํ™” |
    | Hansung Univ. | ํ•œ์„ฑ๋Œ€์ž…๊ตฌ | Mia | ๋ฏธ์•„ |
    | Mia Sageori | ๋ฏธ์•„์‚ฌ๊ฑฐ๋ฆฌ | Gireum | ๊ธธ์Œ |
    | Chongshin Univ. | ์ด์‹ ๋Œ€์ž…๊ตฌ | Sadang | ์‚ฌ๋‹น |
    
    ### Line 5 (5ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Gwanghwamun | ๊ด‘ํ™”๋ฌธ | Jongno 3-ga | ์ข…๋กœ3๊ฐ€ |
    | Dongdaemun History & Culture Park | ๋™๋Œ€๋ฌธ์—ญ์‚ฌ๋ฌธํ™”๊ณต์› | Cheonggu | ์ฒญ๊ตฌ |
    | Wangsimni | ์™•์‹ญ๋ฆฌ | Haengdang | ํ–‰๋‹น |
    | Yeouido | ์—ฌ์˜๋„ | Yeouinaru | ์—ฌ์˜๋‚˜๋ฃจ |
    | Mapo | ๋งˆํฌ | Gongdeok | ๊ณต๋• |
    | Gimpo Airport | ๊น€ํฌ๊ณตํ•ญ | Banghwa | ๋ฐฉํ™” |
    
    ### Line 6 (6ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Itaewon | ์ดํƒœ์› | Samgakji | ์‚ผ๊ฐ์ง€ |
    | Noksapyeong | ๋…น์‚ฌํ‰ | Hangang | ํ•œ๊ฐ•์ง„ |
    | Sangsu | ์ƒ์ˆ˜ | Hapjeong | ํ•ฉ์ • |
    | World Cup Stadium | ์›”๋“œ์ปต๊ฒฝ๊ธฐ์žฅ | Digital Media City | ๋””์ง€ํ„ธ๋ฏธ๋””์–ด์‹œํ‹ฐ |
    
    ### Line 7 (7ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Gangnam-gu Office | ๊ฐ•๋‚จ๊ตฌ์ฒญ | Cheongdam | ์ฒญ๋‹ด |
    | Konkuk Univ. | ๊ฑด๋Œ€์ž…๊ตฌ | Children's Grand Park | ์–ด๋ฆฐ์ด๋Œ€๊ณต์› |
    | Junggok | ์ค‘๊ณก | Ttukseom Resort | ๋š์„ฌ์œ ์›์ง€ |
    | Express Bus Terminal | ๊ณ ์†ํ„ฐ๋ฏธ๋„ | Nonhyeon | ๋…ผํ˜„ |
    | Hakdong | ํ•™๋™ | Bogwang | ๋ณด๊ด‘ |
    | Jangam | ์žฅ์•” | Dobongsan | ๋„๋ด‰์‚ฐ |
    
    ### Line 8 (8ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Jamsil | ์ž ์‹ค | Mongchontoseong | ๋ชฝ์ดŒํ† ์„ฑ |
    | Gangdong-gu Office | ๊ฐ•๋™๊ตฌ์ฒญ | Cheonho | ์ฒœํ˜ธ |
    | Bokjeong | ๋ณต์ • | Sanseong | ์‚ฐ์„ฑ |
    | Moran | ๋ชจ๋ž€ | Amsa | ์•”์‚ฌ |
    
    ### Line 9 (9ํ˜ธ์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Sinnonhyeon | ์‹ ๋…ผํ˜„ | Express Bus Terminal | ๊ณ ์†ํ„ฐ๋ฏธ๋„ |
    | Dongjak | ๋™์ž‘ | Noryangjin | ๋…ธ๋Ÿ‰์ง„ |
    | Yeouido | ์—ฌ์˜๋„ | National Assembly | ๊ตญํšŒ์˜์‚ฌ๋‹น |
    | Dangsan | ๋‹น์‚ฐ | Yeomchang | ์—ผ์ฐฝ |
    | Gimpo Airport | ๊น€ํฌ๊ณตํ•ญ | Gaehwa | ๊ฐœํ™” |
    | Olympic Park | ์˜ฌ๋ฆผํ”ฝ๊ณต์› | Sports Complex | ์ข…ํ•ฉ์šด๋™์žฅ |
    
    ### Sinbundang Line (์‹ ๋ถ„๋‹น์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Gangnam | ๊ฐ•๋‚จ | Sinsa | ์‹ ์‚ฌ |
    | Yangjae | ์–‘์žฌ | Yangjae Citizen's Forest | ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ |
    | Pangyo | ํŒ๊ต | Jeongja | ์ •์ž |
    | Dongcheon | ๋™์ฒœ | Suji District Office | ์ˆ˜์ง€๊ตฌ์ฒญ |
    | Gwanggyo | ๊ด‘๊ต | Gwanggyo Jungang | ๊ด‘๊ต์ค‘์•™ |
    
    ### Gyeongui-Jungang Line (๊ฒฝ์˜์ค‘์•™์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Seoul Station | ์„œ์šธ์—ญ | Hongdae (Hongik Univ.) | ํ™๋Œ€์ž…๊ตฌ |
    | Gongdeok | ๊ณต๋• | Hyochang Park | ํšจ์ฐฝ๊ณต์›์•ž |
    | Yongsan | ์šฉ์‚ฐ | Oksu | ์˜ฅ์ˆ˜ |
    | Wangsimni | ์™•์‹ญ๋ฆฌ | Cheongnyangni | ์ฒญ๋Ÿ‰๋ฆฌ |
    | DMC | ๋””์ง€ํ„ธ๋ฏธ๋””์–ด์‹œํ‹ฐ | Susaek | ์ˆ˜์ƒ‰ |
    | Ilsan | ์ผ์‚ฐ | Paju | ํŒŒ์ฃผ |
    
    ### Airport Railroad (๊ณตํ•ญ์ฒ ๋„)
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Seoul Station | ์„œ์šธ์—ญ | Gongdeok | ๊ณต๋• |
    | Hongdae (Hongik Univ.) | ํ™๋Œ€์ž…๊ตฌ | Digital Media City | ๋””์ง€ํ„ธ๋ฏธ๋””์–ด์‹œํ‹ฐ |
    | Gimpo Airport | ๊น€ํฌ๊ณตํ•ญ | Incheon Airport T1 | ์ธ์ฒœ๊ณตํ•ญ1ํ„ฐ๋ฏธ๋„ |
    | Incheon Airport T2 | ์ธ์ฒœ๊ณตํ•ญ2ํ„ฐ๋ฏธ๋„ | Cheongna Int'l City | ์ฒญ๋ผ๊ตญ์ œ๋„์‹œ |
    
    ### Suin-Bundang Line (์ˆ˜์ธ๋ถ„๋‹น์„ )
    | English | Korean | English | Korean |
    |---------|--------|---------|--------|
    | Wangsimni | ์™•์‹ญ๋ฆฌ | Seolleung | ์„ ๋ฆ‰ |
    | Gangnam-gu Office | ๊ฐ•๋‚จ๊ตฌ์ฒญ | Seonjeongneung | ์„ ์ •๋ฆ‰ |
    | Jeongja | ์ •์ž | Migeum | ๋ฏธ๊ธˆ |
    | Ori | ์˜ค๋ฆฌ | Jukjeon | ์ฃฝ์ „ |
    | Suwon | ์ˆ˜์› | Incheon | ์ธ์ฒœ |
    
    ---
    
    ## Usage Examples
    
    **Real-time Arrival**
    ```bash
    curl "http://swopenAPI.seoul.go.kr/api/subway/${SEOUL_OPENAPI_KEY}/json/realtimeStationArrival/0/10/๊ฐ•๋‚จ"
    ```
    
    **Station Search**
    ```bash
    curl "http://openapi.seoul.go.kr:8088/${SEOUL_OPENAPI_KEY}/json/SearchInfoBySubwayNameService/1/10/๊ฐ•๋‚จ"
    ```
    
    **Route Search**
    ```bash
    curl -G "https://apis.data.go.kr/B553766/path/getShtrmPath?serviceKey=${DATA_GO_KR_KEY}&dataType=JSON" \
      --data-urlencode "dptreStnNm=์‹ ๋„๋ฆผ" \
      --data-urlencode "arvlStnNm=์„œ์šธ์—ญ" \
      --data-urlencode "searchDt=$(date '+%Y-%m-%d %H:%M:%S')"
    ```
    
    **Service Alerts**
    ```bash
    curl "https://apis.data.go.kr/B553766/ntce/getNtceList?serviceKey=${DATA_GO_KR_KEY}&dataType=JSON&pageNo=1&numOfRows=10"
    ```
    
    ---
    
    ## Output Format Guide
    
    ### Real-time Arrival
    
    **Korean:**
    ```
    [๊ฐ•๋‚จ์—ญ ๋„์ฐฉ ์ •๋ณด]
    
    | ํ˜ธ์„  | ๋ฐฉํ–ฅ | ๋„์ฐฉ | ์œ„์น˜ | ์œ ํ˜• |
    |------|------|------|------|------|
    | 2ํ˜ธ์„  | ์„ฑ์ˆ˜ํ–‰ | 3๋ถ„ | ์—ญ์‚ผ | ์ผ๋ฐ˜ |
    ```
    
    **English:**
    ```
    [Gangnam Station Arrivals]
    
    | Line | Direction | Arrival | Location | Type |
    |------|-----------|---------|----------|------|
    | Line 2 | Seongsu-bound | 3 min | Yeoksam | Regular |
    ```
    
    ### Station Search
    
    **Korean:**
    ```
    [๊ฐ•๋‚จ์—ญ]
    
    | ํ˜ธ์„  | ์—ญ์ฝ”
    
    ... (truncated)