티스토리 뷰

"""

안녕하세요, doriri입니다.

이 글에서는 '서울 열린데이터 광장'에 등록 된 지하철 역별 승하차 정보를 xml형태로 가져와서
출력하는 작업을 진행합니다.

"""



1. 서울 열린데이터 광장 apiKey를 준비해주세요. ( 참고 )


2. 저희가 사용할 API는 서울시 지하철호선별 역별 승하차 인원 사이트에서 확인이 가능하며, 요청 인자 및 출력인자는 다음과 같습니다.
( 샘플URL 실행 후 자신에게 맞는 API인지 확인 후에 진행하시는게 좋아요 )



승하차 API 경우에 URL에서 설정해야하는 부분은 'USE_DT'인 것이 확인됩니다.



3. 요청인자를 확인하였으니 Python 개발 작업을 진행합니다. 우선, API URL에 접속하여 xml을 가져오는 작업을 진행합니다.


Python

#-*- coding: utf-8 -*-

import xml.etree.ElementTree as ET
import urllib2

def subper(sub) :
    url = 'http://openapi.seoul.go.kr:8088/{apiKey}/xml/CardSubwayStatsNew/1/549/'+'20160101'

    tree = ET.ElementTree(file=urllib2.urlopen(url))
    root = tree.getroot()
    
    return root

if __name__ == "__main__" :
    print subper(u'중앙선 회기')

Result




4. URL에 정상적으로 접속되는 것이 확인되었으니, 이제 xml에서 원하는 정보를 출력해보겠습니다.


Python

#-*- coding: utf-8 -*-

import xml.etree.ElementTree as ET
import urllib2

def subper(sub) :
    LINE_NUM = sub.split(' ')[0]
    subName = sub.split(' ')[1]
    url = 'http://openapi.seoul.go.kr:8088/{apiKey{/xml/CardSubwayStatsNew/1/549/'+'20160101'

    tree = ET.ElementTree(file=urllib2.urlopen(url))
    root = tree.getroot()
    
    for data in root.iter("row") :
        if data.findtext("LINE_NUM").find(LINE_NUM) != -1 :
            if data.findtext("SUB_STA_NM").find(subName) != -1 :
                string = "승차 : {0}\n하차 : {1}".format(data.findtext("RIDE_PASGR_NUM"), data.findtext("ALIGHT_PASGR_NUM"))
                return string

if __name__ == "__main__" :
    print subper(u'중앙선 회기')

Result

findtext의 경우 xml에서 해당하는 태그를 찾고 태그에 둘러싸인 값을 가져옵니다. 후에 find를 통하여 원하는 호선 및 역 이름을 찾는 코드입니다. ( 출력인자 참고 )

정상적인 출력결과 ( 숫자 값은 다를 수 있습니다. )





5. 다음으로는 API가 업데이트되는 9일+넉넉하게 1일 잡아 10일전 데이터를 동적으로 가져오도록 datetime 모듈을 사용하면 완료!


Python

#-*- coding: utf-8 -*-

import xml.etree.ElementTree as ET
import urllib2
import datetime, time
from datetime import timedelta

def subper(sub) :
    LINE_NUM = sub.split(' ')[0]
    subName = sub.split(' ')[1]

    today = str(datetime.date.today() + timedelta(days = -10))
    url = 'http://openapi.seoul.go.kr:8088/{apiKey{/xml/CardSubwayStatsNew/1/549/'+today.replace('-','')

    tree = ET.ElementTree(file=urllib2.urlopen(url))
    root = tree.getroot()
    
    for data in root.iter("row") :
        if data.findtext("LINE_NUM").find(LINE_NUM) != -1 :
            if data.findtext("SUB_STA_NM").find(subName) != -1 :
                string = "승차 : {0}\n하차 : {1}".format(data.findtext("RIDE_PASGR_NUM"), data.findtext("ALIGHT_PASGR_NUM"))
                return string

if __name__ == "__main__" :
    print subper(u'중앙선 회기')

Result





6. 이제 작업을 모두 마쳤으니 다음과 같이 결과만 조금 꾸며주는정도로 해주시면 될 것 같아요!





"""

감사합니다!

궁금점 및 피드백 사항은 댓글로 달아주세요~

"""

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함