본문 바로가기

API

[SK Open API] 검색 지역의 월간 추정 여행자수 가져오기

반응형

SK Open API의 국내여행을 이용해 검색하는 지역의 월간 추정 여행자수를 구해보겠습니다.

 

1. API 가져 올 환경 확인하기

2. 월간 추정 여행자수 가져오기

 

 

1. API 가져 올 환경 확인하기

https://yenpa.tistory.com/16

 

[SK Open API] 앱 등록 및 상품 구매 후 응답결과확인(무료)

SK Open API 사용을 위한 앱 등록 및 API 상품 구매를 진행해보겠습니다. 무료의 건수제한이 걸린 상품이 많이 있으니 활용하시면 될 것 같습니다. 1. 앱등록 및 앱키 Secret_key 확인 2. 상품 구매하기 3.

yenpa.tistory.com

 

2. 월간 추정 여행자수 가져오기

여행지 리스트와 검색어에 대한 월간 여행자수를 가져오는 함수를 작성합니다.

SK Open API의 예제를 수정해서 함수로 만들었습니다.

import requests
import pandas as pd


# 여행지 리스트 수집
def gettravellist(appkey):
    url = "https://apis.openapi.sk.com/puzzle/travel?type=sig"

    headers = {
        "accept": "application/json",
        "appkey": appkey
    }

    response = requests.get(url, headers=headers)

    result=response.json()

    return pd.DataFrame(result['contents'])


# 검색 지역의 월간 여행자수 구하기
def gettraveller_bymonth(appkey,districtCode,districtName,yearmonth):
    url = "https://apis.openapi.sk.com/puzzle/traveler-count/raw/monthly/districts/" + \
        districtCode + "?" + "yearMonth=" + yearmonth + \
        "&gender=all&ageGrp=all&companionType=all"

    headers = {
        "accept": "application/json",
        "appkey": appkey
    }

    response = requests.get(url, headers=headers)
    
    #
    result=response.json()
    
    travelerCount=result['contents']['raw']['travelerCount']
    yearMonth=result['contents']['raw']['yearMonth']
    
    df=pd.DataFrame({'districtCode':[districtCode],'districtName':[districtName],
                     'yearMonth':[yearMonth],'travelerCount':[travelerCount]})
    
    df['date']=pd.to_datetime(df['yearMonth'], format='%Y%m')
    
    return(df.set_index('date'))

결과를 Dictionary 형태로 저장하고 여행자수와 해당 년월을 가져옵니다.

result=response.json()
    
travelerCount=result['contents']['raw']['travelerCount']
yearMonth=result['contents']['raw']['yearMonth']

Return할 데이터를 DataFrame 으로 만들고,

'yearMonth'를 이용해 'date'의 datetime 형태로 column을 생성합니다.

df=pd.DataFrame({'districtCode':[districtCode],'districtName':[districtName],
                 'yearMonth':[yearMonth],'travelerCount':[travelerCount]})

df['date']=pd.to_datetime(df['yearMonth'], format='%Y%m')

'date'를 Index로 만들고 결과를 return합니다.

return(df.set_index('date'))

 

 

검색지역을 제주로 하고 2022년 9월 추정 여행자수를 확인합니다.

appkey는 본인의 데이터의 입력이 필요합니다.

appkey='YOUR_APPKEY'
#제주를 검색어로.
keyword='제주'
yearmonth='202209'

#여행지 리스트 가져오기
df_list=gettravellist(appkey)

#여행지에서 검색어를 포함한 지역들을 가져오기
districtName_df=df_list.loc[df_list['districtName'].str.contains(keyword),:]

#여행지가 여러개일 경우 하나의 DataFrame에 저장하기
result_all=pd.DataFrame()
for i, r in districtName_df.iterrows():
    districtCode = r['districtCode']
    districtName = r['districtName']
    
    result=gettraveller_bymonth(appkey,districtCode,districtName,yearmonth)
    
    result_all = pd.concat([result_all,result])

여행지 리스트에서 '제주'를 포함하는 지역을 가져옵니다.

#여행지에서 검색어를 포함한 지역들을 가져오기
districtName_df=df_list.loc[df_list['districtName'].str.contains(keyword),:]

여행지가 여러개일경우 하나의 DataFrame에 저장하기 위한 변수입니다.

'제주'의 경우 '제주특별자치시도 제주시'와 '제주특별자치시도 서귀포시'가 포함됩니다.

result_all=pd.DataFrame()

각 지역별 결과를 저장합니다.

for i, r in districtName_df.iterrows():
    districtCode = r['districtCode']
    districtName = r['districtName']
    
    result=gettraveller_bymonth(appkey,districtCode,districtName,yearmonth)
    
    result_all = pd.concat([result_all,result])

 

결과를 확인합니다.

2022년 9월에 제주시 약 36만명, 서귀포시 약 29만명이 방문했네요.

result_all

 

 

이상으로 검색하는 지역의 월간 추정 여행자수를 구해봤습니다.

반응형