본문 바로가기

Apple/iOS Tips

[Shortcuts / 단축어] 시리에게 지하철 열차 도착시간 물어보기

안녕하세요 Underground 입니다. 오랜만에 글을 쓰네요. 사실 에어팟에 대해서도 할 말이 많은데, 오늘은 그것보다 더 중요하고 관심 많으실 것 같은 내용으로 글을 써보려고 합니다. 바로 단축어 어플 활용입니다. 

iOS 12에서 처음으로 소개된 단축어 어플은, 사실 그렇게 활용도가 높지는 않았습니다. 기껏해야 물을 언제 마셔야하는지 알려주는 용도 정도로 사용하고 있었는데, iOS 13으로 넘어오면서 자동화 기능과 같이 기능이 추가되었고 또한 기능도 더 많아져서 잠재 가능성이 커졌습니다. 그래서 이걸 어떻게 활용하면 좋을까에 대해서 고민했었습니다. 

 

 

어제 문득 들었던 생각은, 시리가 왜 이렇게 무식할까 입니다. 그 중 가장 필요했던 기능은, 지하철 도착시간을 알려주는 것이었습니다. 여담을 하자면, 제가 대학생인데, 아침에 지하철을 타고 통학을 합니다... 그래서 아침마다 엘리베이터를 타고 내려가며, 혹은 지하철역으로 걸어가며 카카오 지하철을 통해 열차 도착시간을 확인하곤 했습니다. 그러나 그게 너무나도 귀찮아서, 애플워치에 새로운 "지하철 시간"이라는 어플을 설치했습니다. 자주가는 어플로 등록해놓고 아침마다 확인하곤 했습니다. 사실 이정도만 해도 크게 불편하지 않았습니다. 그러나, 겨울이 다가오면서 이제는 시계를 들어올리는 행동조차 하기 싫어졌고, 어차피 에어팟 끼고 있는데, "Hey, Siri"로 시리를 부르고 물어보면 쉽지 않을까 생각했습니다. 

 

 

가장 먼저 선택했던 접근 방법은 딱 맞는 어플을 설치하는 것이었습니다. 검색이나 구글링을 통해서는 유의미한 정보가 나오지 않아 직접 하나씩 설치해보기 시작했습니다. 국산 어플들 중에는 단축어 어플을 지원하는게 많지 않았고 실패했습니다. 그래서 외국 어플들을 찾기 시작했습니다. Moovit과 같은 어플은 왜인지 지원해줄 것 같았는데 해주지 않았고, Citymapper라는 어플은 단축어를 지원하긴 하나 제공되는 정보가 유의미 하지 않았습니다. 

 

 

그래서 그냥 직접 스크립팅을 하는 쪽을 선택하게 되었습니다. 사실 평범한 어문계열 대학생이라 쉽지 않았고, 그나마도 동아리 활동? 취미 활동으로 루비와 파이썬을 조금 공부해 본 적이 있어서 도전해보게 되었습니다. (이쯤 설명하면 동아리가 멋쟁이사자처럼이라는 걸 눈치 채신 분들이 계실 수도 있겠네요 ㅎㅎ. 루비의 유일한 공급처이니) 그러던 와중 서울시에서 제공하는 지하철 실시간 도착 API가 있다는 사실을 알게 되었고, 오늘 아침 새벽 3시쯤 해당 API에 대한 Key를 신청했습니다. 감사하게도 굉장히 빠른 속도로 승인이 되어 아침에 일어나 확인해보니 이미 키가 발급되어 있었습니다. 

 

 

발급 받은 키를 가지고 URL을 통해 JSON 형식으로 실시간 정보를 받아 가공하여 단축어 어플을 통해 실시간 도착 정보를 구현하였습니다. 사실은 단순히 개인적으로 사용하기 위한 용도로 만들었기 때문에, 그리고 제가 전공자가 아니기 때문에 효율적인 프로그램은 아닐 것 입니다. 사실 파이썬으로 하면 금방 할 것 같은데, 오기가 생겨 단축어 어플 안에서 해결하려다보니 어려움이 많았습니다. 일단 용어나 구조가 익숙하지 않아 삽질을 많이하게 되었고, 개인적으로는 아직도 제가 만든 단축어 어플보다 훨씬 더 효율적으로 알고리즘을 만들 수 있을 것 같다고 생각 했습니다. 그러나 일단은, 크게 느리지 않은 속도로 작동하는 것에 만족하기로 했습니다. (능력자분들이 조금 도와주시면 참 감사하겠습니다.) 

 

 

결론을 말씀드리자면 오늘은 제가 만든 숏컷을 공유하고자 합니다. 많은 분들이 해당 단축어를 보시고 활용하셔서 발전 시켜주시면 삶이 더 윤택해지지 않을까 기대하고 있습니다. 일단은 제 API 키를 통해 작동하게 하였으며 해당 API 키는 일 1000번의 사용 제한이 있어서 대다수의 유저가 유입된다면 작동하지 않을 가능성도 있습니다. 그러나 일단은 그정도의 사람이 유입되지 않을 것으로 생각되고, 지금 서울시 공공데이터 포털에 정보공유를 해 놓았는데, 이게 승인이 되면 제한 없이 사용할 수 있다고 하니 혹시 변동이 생기면 글 수정 하겠습니다. (만약 제한이 계속 유지되고, 서비스 이용에 차질이 생긴다면 제 API 키는 삭제해야할 것 같고, 그렇게되면 API 취득 방법에 대한 글을 따로 올리겠습니다. 혹시 좋은 대안이 있으신 분이나, 혹시 단축어 어플 내에서 API키를 마스킹하는 방법을 아시는 분이 계시면 도움 부탁드립니다.)

 

일단 단축어 링크는 아래에 있습니다. 

https://www.icloud.com/shortcuts/70172ccf55aa4b6db5af30ec711b0668

 

 

해당 단축어를 열어보시면 아래와 같은 구조를 확인하실 수 있으실 것입니다.

 

가장 먼저, 첫 텍스트란에 현재 양재라고 적혀 있을 것입니다. 해당란에 정보를 받고 싶으신 역이름을 넣어주시면 됩니다. 정확한 역 이름을 입력해주셔야 하는 관계로, 아래 리스트에서 한번 확인해보시고 입력하시는 걸 추천드립니다. 다만 해당 API를 서울시에서 제공하다보니 경기도 지역 역들의 경우 열차도착 정보가 제공되지 않을 수 있음을 유의 부탁드립니다. 

더보기

건대입구, 구의, 강변, 잠실나루, 잠실, 신천, 종합운동장, 삼성, 선릉, 역삼, 강남, 교대, 서초, 방배, 사당, 낙성대, 서울대입구, 봉천, 신림, 신대방, 구로디지털단지, 대림, 신도림, 문래, 영등포구청, 당산, 합정, 홍대입구, 신촌, 이대, 아현, 충정로, 시청, 을지로입구, 을지로3, 을지로4, 동대문역사문화공원, 신당, 상왕십리, 왕십리, 한양대, 뚝섬, 성수, 까치산, 도림천, 용두, 신설동, 양천구청, 신정네거리, 용답, 신답, 길음, 명동, 신용산, 양평, 마포, 신금호, 길동, 동대문, 신사, 고속터미널, 교대, 상동, 공항시장, 양천향교, 국회의사당, 강남, 대곡, 능곡, 공덕, 회기, 도심, 양수, 망우, 평내호평, 청평, 백양리, 강촌, 호구포, 왕십리, 한티, 수서, 복정, 매탄권선, 수원시청, 수원, 화서, 병점, 남영, 부천, 양주, 창동, 녹천, 신창, 올림픽공원(한국체대), 마천, 역촌, 월드컵경기장(성산), 대흥(서강대앞), 청구, 동묘앞, 고려대, 석계, 공릉(서울산업대입구), 학동, 총신대입구(이수), 숭실대입구(살피재), 신대방삼거리, 부천종합운동장, 마두, 대곡, 삼송, 경마공원, 정부과천청사, 평촌, 수지구청, 노원, 쌍문, 동대문, 충무로, 이촌, 마곡, 목동, 신길, 공덕, 동대문역사문화공원, 군자(능동), 천호(풍납토성), 굽은다리(강동구민회관앞), 구파발, 홍제, 금호, 오금, 당고개, 신중동, 삼산체육관, 암사, 남한산성입구(성남법원,  검찰청), 증미, 홍대입구, 금촌, 일산, 풍산, 서강대, 중랑, 양원, 양정, 서울, 퇴계원, 가평, 달월, 송도, 선정릉, 선릉, 가천대, 청명, 석수, 안양, 성균관대, 서정리, 평택, 성환, 직산, 개봉, 역곡, 백운, 동두천중앙, 덕계, 구산, 장암, 도봉산, 태릉입구, 내방, 남성, 광명사거리, 까치울, 백석, 원당, 정왕, 동천, 효창공원앞, 창동, 미아, 사당, 방화, 송정, 오목교(목동운동장앞), 마장, 종로5, 종로3, 연신내, 불광, 을지로3, 매봉, 수서, 몽촌토성(평화의문), 산성, 개화, 신방화, 염창, 신목동, 당산, 신논현, 김포공항, 금릉, 홍대입구, 옥수, 청량리, 아신, 신촌(경의.중앙선), 대성리, 서현, 죽전, 군포, 두정, 신길, 동암, 간석, 제물포, 개롱, 거여, 망원, 녹사평, 버티고개, 마들, 중계, 중곡, 청담, 반포, 고속터미널, 선바위, 대야미, 고잔, 야당, 수유, 미아사거리, 혜화, 서울, 숙대입구, 삼각지, 화곡, 영등포시장, 애오개, 청구, 답십리, 제기동, 동묘앞, 종각, 독립문, 옥수, 잠원, 학여울, 경찰병원, 굴포천, 잠실, 가락시장, 문정, 장지, 단대오거리, 노량진, 흑석, 고속터미널, 공항화물청사, 운서, 공덕, 청계산입구, 수색, 이촌, 응봉, 덕소, 신원, 용문, 상봉, 신내, 사릉, 금곡, 굴봉산, 김유정, 서울숲, 강남구청, 모란, 정자, 상갈, 당정, 오산대, 오산, 영등포, 신도림, 구일, 온수, 도원, 가능, 월계, 둔촌동, 연신내, 증산(명지대앞), 신당, 월곡(동덕여대), 노원, 면목, 용마산, 어린이대공원(세종대), 상도(중앙대앞), 대림, 천왕, 온수, 정발산, 산본, 중앙, 초지, 오이도, 김포공항, 우장산, 신정(은행정), 영등포구청, 을지로4, 광나루(장신대), 신설동, 경복궁, 종로3, 동대입구, 남부터미널, 일원, 부평구청, 천호(풍납토성), 신흥, 김포공항, 노들, 동작, 서울, 판교, 월롱, 국수, 오빈, 인천논현, 압구정로데오, 개포동, 수내, 기흥, 금정, 세류, 진위, 노량진, 오류동, 소사, 부개, 도화, 도봉산, 도봉, 방학, 외대앞, 아산, 배방, 상일동, 독바위, 새절(신사), 상수, 보문, 상월곡(한국과학기술연구원), 돌곶이, 화랑대(서울여대입구), 수락산, 먹골, 강남구청, 철산, 원흥, 선정릉, 봉은사, 개화산, 발산, 서대문, 왕십리, 장한평, 서울, 지축, 녹번, 강동구청, 석촌, 가양, 선유도, 여의도, 양재, 정자, 문산, 운정, 탄현, 백마, 곡산, 행신, 망우, 운길산, 마석, 오이도, 연수, 대모산, 야탑, 구성, 가산디지털단지, 독산, 송탄, 지제, 용산, 구로, 소요산, 광운대, 신이문, 명일, 응암순환(상선), 불광, 디지털미디어시티, 합정, 공덕, 삼각지, 한강진, 태릉입구, 하계, 중화, 사가정, 군자(능동), 논현, 보라매, 신풍, 가산디지털단지, 수리산, 한대앞, 상현, 효창공원앞, 한성대입구, 동대문역사문화공원, 총신대입구(이수), 남태령, 여의나루, 충정로, 광화문, 시청, 무악재, 도곡, 대청, 가락시장, 상계, 복정, 수진, 모란, 마곡나루, 샛강, 인천국제공항, 양재시민의숲, 용산, 왕십리, 구리, 도농, 팔당, 양평, 원덕, 갈매, 소래포구, 원인재, 도곡, 태평, 이매, 오리, 영통, 매교, 명학, 의왕, 수원, 세마, 대방, 송내, 주안, 동인천, 인천, 동두천, 지행, 회룡, 석계, 봉명, 쌍용(나사렛대), 온양온천, 대화, 고덕, 방이, 마포구청, 약수, 창신, 상봉, 청라국제도시, 화정, 금정, 반월, 상록수, 안산, 신길온천, 삼성중앙, 성신여대입구, 회현, 동작, 까치산, 종로3, 행당, 아차산(어린이대공원후문), 강동, 청량리, 안국, 충무로, 약수, 압구정, 양재, 대치, 부천시청, 송파, 등촌, 구반포, 신반포, 사평, 검암, 계양, 디지털미디어시티, 파주, 화전, 디지털미디어시티, 가좌, 서빙고, 한남, 상봉, 별내, 천마산, 상천, 남춘천, 춘천, 월곶, 남동인더스파크, 구룡, 미금, 보정, 신갈, 망포, 금천구청, 관악, 천안, 중동, 부평, 보산, 덕정, 녹양, 의정부, 망월사, 회기, 주엽, 오금, 광흥창, 이태원, 안암(고대병원앞), 봉화산, 건대입구, 뚝섬유원지, 장승배기, 남구로, 춘의역, 강매, 대공원, 과천, 인덕원, 범계, 성복, 광교중앙, 광교, 언주, 종합운동장, 인천공항2터미널, 마곡나루, 영종

 

 

그 다음 칸은 아래와 같습니다. 

 

해당 번호는 지하철 호선 번호입니다. 1003의 경우 3호선을 말합니다. 해당 코드도 정확히 입력해주셔야하며, 1~9호선은 100x의 형태로 되어 있으며, 분당선의 경우 1075, 그외 경의선과 같은 곳들은 각자의 고유 코드를 가지고 있습니다. 해당 글 마지막 첨부파일에 가셔서 SUBWAY_ID에 대한 값을 보시면 호선 코드를 아실 수 있으실 것입니다. 

 

 

마지막으로 입력하셔야 하는 부분인 지하철의 방향입니다.

 

주어진 옵션은 상행 또는 하행 입니다. 지하철 노선도에 대한 개념이 잡혀 있으신 분이라면 쉽게 상행 하행 구분이 가능하시겠지만 어려우시다면 한번씩 해보시는게 제일 빠를 것 같습니다. 다만 2호선의 경우 상행 하행 개념이 없습니다. 2호선의 경우 내선순환은 0을, 외선순환은 1을 입력하시면 됩니다.

 

가령 양재역에서 남부터미널 방향을 원한다면 "양재 / 1003 / 상행" 을

도곡역에서 한티역 방면으로 가는 정보를 원하신다면 "도곡 / 1075 / 상행"을 입력하시면 되죠.

 

이제 해당 단축어의 이름을 원하시는대로 바꾸시고 시리에게 해당 단축어 이름을 말하시면, 열차 정보를 제공해 줄 것입니다. 

 

사실 완벽한 알고리즘이 아니고, API도 안정적이지 않다보니 오류가 가끔 발생할 수 있습니다. 너그러운 마음으로 사용해주시면 감사하겠습니다. 문의는 댓글로 부탁 드립니다.

 

 

서울시에서 제공하는 엑셀 파일로, 지하철 역에 따른 호선 코드를 알 수 있습니다.

실시간도착_역정보.xlsx
0.02MB

  • 조언 2020.01.09 19:04

    내용이 좋습니다
    역시 최고의 발명은 불편에서 부터 비롯되는 것 같네요

    어플 편의성 관련 하나 의견을 드리자면
    범용으로 사용하기 위해서는
    각 역별 코드를 넣는 것이 어떨까 싶네요
    예를들면
    상행 하행을 메뉴에서 선택하기로 넣고
    역이름을 ㄱ~ㅎ으로 메뉴 분류 후
    각 역 이름을 선택하면 역 코드가 자동으로 입력되게끔요

    아사모카페에서 보고 왔는데
    저도 한 번 수정해보고 공유드릴게요

    • Underg 2020.01.15 23:24 신고

      그러한 생각도 했으나, 코드별로 역 이름을 매칭 시키는 형태의 자료도 생각보다 구현이 어려울 것 같았습니다. 상행 하행을 선택하게 하는 것 또한 좋은 아이디어지만, 각 호선별로 가끔 이름이 상이한 부분을 정확히 해결하기가 어려울 것 같습니다... 더 발전시키는 것은 오히려 이용이 어려워 지는 것이라는 생각이 있어, 이정도에서 멈추게 되었는데 더 고민해보겠습니다. 감사합니다!

  • 달려야해 2020.02.16 12:34

    안녕하세요, 정말 필요한 단축어를 만들어주셔서 감사합니다 ㅠㅠ 어색한 시리 목소리만 견디면 몇 분까지 걸리는지도 알려주는게 정말 편리합니다! 하지만 몇가지 작은 정정이 필요한 내용이 있어 알아두셔야 할것 같아 댓글 남깁니다!

    1) 텍스트 오타
    -시간을 알려주는 텍스트 문구에 ‘위치’가 아닌 ‘위티’로 쓰여있습니다. 시리 발음이 이상한가 싶었는데 오타가 있었습니다 ㅋㅋ

    2) 2호선의 경우 Direction_input 변수를 말씀해주신 0,1이 아닌 외선,내선을 인식합니다
    - 처음엔 알려주신대로 0,1을 넣었는데 아무 결과가 출력되지 않아 외선/내선을 입력하였더니 정상출력되었습니다.

    멋진 단축어 만들어 주셔서 감사합니다