헤더파일

자전거야 놀자 - Open API 를 사용한 파이썬 프로그램 본문

포트폴리오 정리

자전거야 놀자 - Open API 를 사용한 파이썬 프로그램

헤더파일 2019. 8. 20. 01:04

개발 환경

 

  • 파이썬 3.6
  • Pycharm
  • 공공 데이터 포털 API

프로그램 소개

 

  • 지명 검색으로 지도 사진을 볼 수 있습니다.
  • 현재 미세먼지, 날씨 정보를 검색할 수 있습니다.
  • 지도 사진과 날씨, 미세먼지 정보를 메일로 보낼 수 있습니다.
  • 자전거 도로 지도를 검색할 수 있습니다.

 

날씨, 미세먼지, 지도 정보

 

자전거 도로 정보

https://youtu.be/X-y5TfGFeq8

 

프로그램 특징

 

OpenAPI 사용


공공 데이터 포털의 OpenAPI를 활용하여 실시간으로 데이터를 얻어옵니다. 얻어온 XML형태의 데이터를 파싱 하여 원하는 정보를 얻어왔습니다.

def ForeCast():
    server = "www.kma.go.kr"
    url ="/weather/forecast/mid-term-rss3.jsp?stnId=108"
    conn = HTTPConnection(server)  # 서버에 연결
    conn.request("GET", url)  # 주소 뒷부분 더하기
    req = conn.getresponse()  # 성공적인 연결이 됬다면 req에 데이터와 상태정보가 들어간다.

    if (req.status == 200):  # req.status가 200이면 연결 완료!
        # cLen = req.getheader("Content-Length")  # 가져온 데이터 길이
        dataFromAPI = (req.read().decode('utf-8'))  # 데이터를 한글로 읽기

        tree = ET.fromstring(dataFromAPI)  # 가져온 데이터는 string 형태기 때문에 elemetal Tree형태의 xml로 파싱
        dataList = tree.getiterator("data")  # <row>.....</row>사이 값들을 리스트형태로 저장
        count = 0
        returnList = []
        for element in dataList:
            for data in element:
                count=count+1
                if (count<3):
                    returnList.append(element[2].text)
                else:
                    return returnList

 

지도 API


제작 당시 웹버전이 아닌 python application에서 쓸 수 있는 지도 API가 없었습니다. 지도를 웹페이지 상에서 띄우고 웹페이지에서 지도 사진을 얻어와 띄우는 방식으로 구현하였습니다.

def GetMap(coord=[35.213145, 129.1076011]):
    map_osm = folium.Map(location=[coord[0], coord[1]], zoom_start=15)
    # 마커 지정
    folium.Marker([coord[0], coord[1]], popup='Mt. Hood Meadows').add_to(map_osm)
    # html 파일로 저장\
    delay = 5
    fn = 'testmap.html'
    map_osm.save(fn)
    tmpurl = 'file://{path}/{mapfile}'.format(path=os.getcwd(), mapfile=fn)

    browser = webdriver.Chrome('C:/Users/didxo/Documents/GitHub/project/chromedriver.exe')
    browser.get(tmpurl)
    # Give the map tiles some time to load
    time.sleep(delay)
    browser.save_screenshot('SearchMap.gif')
    browser.quit()
Comments