TourAPI 사용하기 - 한국관광공사국문 관광정보

seongmin0302·2025년 4월 9일
0

plango 프로젝트

목록 보기
1/10

한국관광공사_국문 관광정보 서비스_GW

오픈API 상세

참고문서를 잘 이용하자

전체적인 흐름은 아래와 같다

  • 지역 정보 (예: 서울 > 강남구 등)
  • 타입 정보 (예: 관광, 문화, 행사 등)
  • 분류 정보 (예: 자연> 자연관광지> 산 등)

이때 지역정보는 지역코드 조회 서비스를 통해 화면에 표시된다.
타입정보는 타입코드표를 통해 화면에 표시된다.
분류정보는 서비스분류코드조회를 통해 화면에 표시된다.


파라미터를 조합해서 다양한 방식으로 관광 정보를 조회할 수 있다

나는 이중 키워드 검색을 사용하려고 한다.


상세정보화면

내가 가장 주의깊게 봐야될 상세정보 화면이다. 상세정보에는 아래와 같은 정보가 포함되어 있다.

상세정보는 공통정보, 소개정보, 반복정보, 이미지정보의 4개 api로 제공된다.

주의 사항

  • 응답표준은 XML 이며, JSON을요청할경우 “&_type=json” 을 추가하여 요청합니다.
  • 2015년 1월 이후에 공공데이터포털에서 받은 인증키 경우, 인코딩불필요

  • MobileApp 파라미터는 서비스(웹,앱등) 별로 활용통계를 산출하기 위한 항목입니다. URL요청시 반드시 기재


사용 할수 있는 서비스와 코드표

사용 할수 있는 서비스들

지역코드조회
관광지 검색 시 필요한 지역코드(예: 서울, 부산 등) 또는
특정 지역 내 시군구코드(예: 강남구, 강서구 등) 목록을 조회하는 기능을 제공

서비스분류코드조회
관광지, 숙박 등 콘텐츠 유형(contentTypeId) 에 따른 대분류, 중분류, 소분류 코드 및 명칭 조회.

지역기반관광정보조회
지역(시/도 + 시군구) 기반으로 관광정보 목록을 조회
이떄 contentTypeId, 대중소 분류로 필터링도 가능하다!

위치기반관광정보조회
내주변 좌표를 기반으로 관광정보 목록을 조회

키워드검색조회
키워드를 이용해 관광정보를 검색하는 기능
Plango에서 사용자가 “시장”, “폭포”, “궁궐” 등 특정 키워드를 입력했을 때 관광지를 찾아주는 데 사용할수 있겠다!
이때 지역(시/도 + 시군구), contentTypeId, 대중소 분류로 필터링도 가능하다!

행사정보조회
행사/공연/축제정보를 날짜로 조회하는 기능

숙박정보조회
숙박 정보 목록을 조회

공통정보조회
관광지 ID(contentId)를 이용해 제목, 주소, 연락처, 개요, 이미지, 좌표 등 상세 정보를 조회
contentId는 각 관광지를 고유하게 식별하는 ID 값

소개정보조회
특정 관광지의 상세 소개 정보(예: 운영시간, 주차시설, 축제 기간, 관람 연령 등)를 관광 타입에 따라 다르게 조회할 수 있는 기능.
관광지, 숙박, 음식점, 축제 등 타입에 따라 다르게 제공되는 상세 소개 정보 조회.

반복정보조회
관광지 유형에 따라 반복되는 상세 정보(예: 숙박의 객실 목록, 축제의 프로그램 리스트 등)를 조회

  • 숙박 (contentTypeId=32)
    객실 정보 반복
    roomtitle, roomintro, roomimg1, roombasecount, roomaircondition 등

  • 여행코스 (contentTypeId=25)
    코스 구간 정보 반복
    subname, subdetailoverview, subdetailimg 등

  • 그 외 (관광지, 축제, 문화시설 등)
    제목-내용 쌍 정보 반복
    입장료, 관람료, 주차요금 등

이미지정보조회
이미지URL 목록을 조회하는기능.


따라서 나는 장소소개 페이지를 만들기 위해 아래의 서비스를 사용하기로 결정했다

개발 하다 보니 추가적으로 키워드검색조회가 필요하다는것을 알게 되었다.


코드표

  • 국문콘텐츠타입(ContentTypeId) 코드표

  • 공공데이터포털에러코드

  • 제공 기관 에러코드

공통정보조회

  • Call Back URL: 사용자가 API 요청을 보낼 때 호출해야 하는 엔드포인트 URL

Request Parameter는 아래와 같다

다) 응답메시지 (Response Message)

예를들어 컨텐츠ID가 “126508”인 관광정보의 “기본정보”, “주소”, “개요” 정보를 조회하고 싶다면 아래와 같이 요청하면 된다.

http://apis.data.go.kr/B551011/KorService1/detailCommon1?serviceKey=인증키&contentId=126508&defaultYN=Y&addrinfoYN=Y&overviewYN=Y&MobileOS=ETC&MobileApp=AppTest

위와 같이 요청을 하면 아래와 같은 정보를 받아 볼 수 있다.

또는 json으로 요청한다면


요청하기

따라서 나는 아래와 같이 호출할 예정이다.

numOfRows (한페이지결과수) = 1
pageNo (페이지번호) = 1
MobileOS (OS 구분) = ETC
MobileApp (서비스명) = plango
serviceKey (인증키(서비스키)) = 내 인증키
_type (응답메세지 형식) = Json
contentId (콘텐츠ID) = 키워드 기반 조회를 통해 얻은 콘텐츠ID
contentTypeId (관광타입 ID) = 키워드 기반 조회를 통해 얻은 관광타입 ID
defaultYN (기본정보조회) = Y
firstImageYN (대표이미지조회) = Y
areacodeYN (지역코드조회) = N
catcodeYN (서비스분류코드조회) = N
addrinfoYN (주소조회) = Y
mapinfoYN (좌표조회) = Y
overviewYN (개요조회) = Y


따라서 나는 아래와 같이 요청을 할 예정이다!

https://apis.data.go.kr/B551011/KorService1/detailCommon1
?numOfRows=1
&pageNo=1
&MobileOS=ETC
&MobileApp=plango
&serviceKey=
&_type=Json
&contentId=126508
&contentTypeId=15
&defaultYN=Y
&firstImageYN=Y
&areacodeYN=N
&catcodeYN=N
&addrinfoYN=Y
&mapinfoYN=Y
&overviewYN=Y

브라우져 상에서 테스트한 결과 아래와 같이 성공적으로 데이터를 얻을 수 있었다!

{
  "response": {
    "header": {
      "resultCode": "0000",
      "resultMsg": "OK"
    },
    "body": {
      "items": {
        "item": [
          {
            "contentid": "2674675",
            "contenttypeid": "15",
            "title": "수원화성의 비밀",
            "createdtime": "20201006015851",
            "modifiedtime": "20240111152040",
            "tel": "031-290-3563",
            "telname": "수원문화재단",
            "homepage": "\u003Ca href=\"https://www.swcf.or.kr/?p=74&viewMode=view&idx=192\" target=\"_blank\" title=\"새창: 홈페이지로 이동\"\u003Ehttps://www.swcf.or.kr/\u003C/a\u003E",
            "booktour": "",
            "firstimage": "http://tong.visitkorea.or.kr/cms/resource/74/2674674_image2_1.jpg",
            "firstimage2": "http://tong.visitkorea.or.kr/cms/resource/74/2674674_image2_1.jpg",
            "cpyrhtDivCd": "Type3",
            "addr1": "경기도 수원시 팔달구 행궁로 11",
            "addr2": "(남창동)",
            "zipcode": "16261",
            "mapx": "127.0152812635",
            "mapy": "37.2810769133",
            "mlevel": "6",
            "overview": "스마트폰으로 수원화성 일원에서 진행하는 방탈출 게임 형식의 콘텐츠로 증강현실 등 다양한 정보통신기술과 역사를 직접 체험할 수 있는 관광 콘텐츠"
          }
        ]
      },
      "numOfRows": 1,
      "pageNo": 1,
      "totalCount": 1
    }
  }
}

파이썬 간단하게 호출 테스트

import requests

service_key = "비밀"

url = f"http://apis.data.go.kr/B551011/KorService1/detailCommon1?serviceKey={service_key}"

params = {
    "MobileApp": "plango",
    "MobileOS": "ETC",
    "numOfRows": 1,
    "pageNo": 1,
    "contentId": 2674675,
    "contentTypeId": 15,
    "defaultYN": "Y",
    "firstImageYN": "Y",
    "addrinfoYN": "Y",
    "mapinfoYN": "Y",
    "overviewYN": "Y",
    "areacodeYN": "N",
    "catcodeYN": "N",
    "_type": "json"
}

response = requests.get(url, params=params)
print(response.status_code)
print(response.json())

위 코드를 실행 시키면


소개정보조회

앞으로 api.visitkorea.or.kr 이 페이지에 있는 아래의 정보를 가져와 보겠다!

하나

항목내용
우편번호16261
전화명수원문화재단
전화번호031-290-3563
주소경기도 수원시 팔달구 행궁로 11 (남창동)

개요:
스마트폰으로 수원화성 일원에서 진행하는 방탈출 게임 형식의 콘텐츠로 증강현실 등 다양한 정보통신기술과 역사를 직접 체험할 수 있는 관광 콘텐츠


항목내용
주최자 정보수원문화재단
주최자 연락처031-290-3563
주관사 정보경기관광공사, 수원문화재단
행사 시작일2022-01-01
행사 종료일2024-12-31
공연 시간연중 (밤 10시 이후 제한)
행사 장소수원화성 일원
진행 형태선택안함
축제 형태상시



이제 가져오는 과정을 살펴보자

응답메시지




요청하기

나는 아래와 같이 호출할 예정이다.

  • numOfRows (한페이지결과수) = 1
  • pageNo (페이지번호) = 1
  • MobileOS (OS 구분) = ETC
  • MobileApp (서비스명) = plango
  • serviceKey (인증키(서비스키)) = 내 인증키
  • _type (응답메세지 형식) = Json
  • contentId (콘텐츠ID) = 조회한 콘텐츠 id
  • contentTypeId (관광타입 ID) = 조회한 관광타입 ID

따라서

http://apis.data.go.kr/B551011/KorService1/detailIntro1
?numOfRows=1
&pageNo=1
&MobileOS=ETC
&MobileApp=plango
&serviceKey=내 인증키
&_type=Json
&contentId=2674675
&contentTypeId=15

결과는 아래와 같다!

{
  "response": {
    "header": {
      "resultCode": "0000",
      "resultMsg": "OK"
    },
    "body": {
      "items": {
        "item": [
          {
            "contentid": "2674675",
            "contenttypeid": "15",
            "sponsor1": "수원문화재단",
            "sponsor1tel": "031-290-3563",
            "sponsor2": "경기관광공사, 수원문화재단",
            "sponsor2tel": "",
            "eventenddate": "20241231",
            "playtime": "연중(밤 10시 이후 제한)",
            "eventplace": "수원화성 일원",
            "eventhomepage": "",
            "agelimit": "",
            "bookingplace": "",
            "placeinfo": "",
            "subevent": "",
            "program": "",
            "eventstartdate": "20220101",
            "usetimefestival": "7,500원",
            "discountinfofestival": "",
            "spendtimefestival": "",
            "festivalgrade": ""
          }
        ]
      },
      "numOfRows": 1,
      "pageNo": 1,
      "totalCount": 1
    }
  }
}

파이썬 간단하게 호출 테스트

import requests

service_key = "비밀"

url = f"http://apis.data.go.kr/B551011/KorService1/detailIntro1?serviceKey={service_key}"

params = {
    "MobileApp": "plango",
    "MobileOS": "ETC",
    "numOfRows": 1,
    "pageNo": 1,
    "contentId": 2674675,
    "contentTypeId": 15,
    "_type": "json"
}

response = requests.get(url, params=params)
print(response.status_code)
print(response.json())

위 코드를 실행 시키면


반복정보조회

응답메시지


요청하기

나는 아래와 같이 호출할 예정이다.

  • numOfRows (한페이지결과수) = 1
  • pageNo (페이지번호) = 1
  • MobileOS (OS 구분) = ETC
  • MobileApp (서비스명) = plango
  • serviceKey (인증키(서비스키)) = 내 인증키
  • _type (응답메세지 형식) = Json
  • contentId (콘텐츠ID) = 조회한 콘텐츠 id
  • contentTypeId (관광타입 ID) = 조회한 관광타입 ID

따라서

http://apis.data.go.kr/B551011/KorService1/detailInfo1
?numOfRows=1
&pageNo=1
&MobileOS=ETC
&MobileApp=plango
&serviceKey=내 인증키
&_type=Json
&contentId=2674675
&contentTypeId=15

결과는 아래와 같다!

{
  "response": {
    "header": {
      "resultCode": "0000",
      "resultMsg": "OK"
    },
    "body": {
      "items": {
        "item": [
          {
            "contentid": "2674675",
            "contenttypeid": "15",
            "serialnum": "0",
            "infoname": "행사소개",
            "infotext": "스마트폰으로 수원화성 일원에서 진행하는 방탈출 게임 형식의 콘텐츠로 증강현실 등 다양한 정보통신기술과 역사를 직접 체험할 수 있는 관광 콘텐츠",
            "fldgubun": "2"
          }
        ]
      },
      "numOfRows": 1,
      "pageNo": 1,
      "totalCount": 1
    }
  }
}


추가적으로 컨텐츠ID가 2504510이고, 타입이 32(숙박)인 상세반복정보(객실정보) 조회(한페이지에 10개씩, 첫페이지 조회)를 해보자.

http://apis.data.go.kr/B551011/KorService1/detailInfo1
?numOfRows=10
&pageNo=1
&MobileOS=ETC
&MobileApp=plango
&serviceKey=내 인증키
&_type=Json
&contentId=2504510
&contentTypeId=32

파이썬 간단하게 호출 테스트

import requests

service_key = ""

url = f"http://apis.data.go.kr/B551011/KorService1/detailInfo1?serviceKey={service_key}"

params = {
    "MobileApp": "plango",
    "MobileOS": "ETC",
    "numOfRows": 10,
    "pageNo": 1,
    "contentId": 2674675,
    "contentTypeId": 15,
    "_type": "json"
}

response = requests.get(url, params=params)
print(response.status_code)
print(response.json())


이미지정보조회

응답메시지

요청하기

나는 아래와 같이 호출할 예정이다.

  • numOfRows (한페이지결과수) = 10
  • pageNo (페이지번호) = 1
  • MobileOS (OS 구분) = ETC
  • MobileApp (서비스명) = plango
  • serviceKey (인증키(서비스키)) = 내 인증키
  • _type (응답메세지 형식) = Json
  • contentId (콘텐츠ID) = 조회한 콘텐츠 id
  • imageYN(이미지조회1) = Y
  • subImageYN(이미지조회2) = Y

따라서

http://apis.data.go.kr/B551011/KorService1/detailImage1
?numOfRows=10
&pageNo=1
&MobileOS=ETC
&MobileApp=plango
&serviceKey=내 인증키
&_type=Json
&contentId=2674675
&imageYN=Y
&subImageYN=Y

결과는 아래와 같다!

{
  "response": {
    "header": {
      "resultCode": "0000",
      "resultMsg": "OK"
    },
    "body": {
      "items": {
        "item": [
          {
            "contentid": "2674675",
            "originimgurl": "http://tong.visitkorea.or.kr/cms/resource/05/2674805_image2_1.jpg",
            "imgname": "수원화성의 비밀 2020(2)",
            "smallimageurl": "http://tong.visitkorea.or.kr/cms/resource/05/2674805_image2_1.jpg",
            "cpyrhtDivCd": "Type3",
            "serialnum": "2674805_2"
          },
          {
            "contentid": "2674675",
            "originimgurl": "http://tong.visitkorea.or.kr/cms/resource/06/2674806_image2_1.jpg",
            "imgname": "수원화성의 비밀 2020(1)",
            "smallimageurl": "http://tong.visitkorea.or.kr/cms/resource/06/2674806_image2_1.jpg",
            "cpyrhtDivCd": "Type3",
            "serialnum": "2674806_3"
          },
          {
            "contentid": "2674675",
            "originimgurl": "http://tong.visitkorea.or.kr/cms/resource/07/2674807_image2_1.jpg",
            "imgname": "수원화성의 비밀 2020(3)",
            "smallimageurl": "http://tong.visitkorea.or.kr/cms/resource/07/2674807_image2_1.jpg",
            "cpyrhtDivCd": "Type3",
            "serialnum": "2674807_1"
          }
        ]
      },
      "numOfRows": 3,
      "pageNo": 1,
      "totalCount": 3
    }
  }
}

이미지 링크 들어가보면 잘 나온다!



파이썬 간단하게 호출 테스트

import requests

service_key = ""

url = f"http://apis.data.go.kr/B551011/KorService1/detailImage1?serviceKey={service_key}"

params = {
    "MobileApp": "plango",
    "MobileOS": "ETC",
    "numOfRows": 10,
    "pageNo": 1,
    "contentId": 2674675,
    "imageYN": "Y",
    "subImageYN": "Y",
    "_type": "json"
}

response = requests.get(url, params=params)
print(response.status_code)
print(response.json())


‼️키워드검색조회도 해야된다‼️

공통정보, 소개정보, 반복정보, 이미지정보를 조회하기 위해서는 contentidcontenttypeid가 필요하다.

  • 지역기반관광정보조회(areaBasedList1) - 특정 지역 내 관광지 리스트 조회
  • 키워드검색조회(searchKeyword1) - 키워드로 관광지 검색

으로 얻을 수 있다.

둘중 키워드검색조회(searchKeyword1) 을 아용하기로 결정했다!

처음부터 공통정보, 소개정보, 반복정보, 이미지정보를 아르떼뮤지엄과 같이 검색해서 얻을 수 있으면 참 좋을텐데

키워드검색조회(searchKeyword1)를 거쳐
contentidcontenttypeid를 얻어낸후
이거를 통해서 공통정보, 소개정보, 반복정보, 이미지정보 얻을 수 있다는게 참 아쉽다!


따라서 결론적으로
Plango에서 관광지 이름(예: “아르떼뮤지엄”)을 입력받고, 해당 관광지의 상세한 정보를 화면에 표시하려면 아래와 같이 총 5개 TourAPI 서비스를 사용 해야 된다.

  1. 사용자 입력: 아르떼뮤지엄

  2. searchKeyword1(키워드검색조회) → contentId, contentTypeId 획득

  3. detailCommon1(공통정보조회) → 이름, 주소, 개요, 위치
    detailIntro1(소개정보조회) → 운영시간, 휴무일, 요금 등
    detailInfo1(반복정보조회) → 안내/객실/프로그램 등의 반복 정보
    detailImage1(이미지정보조회) → 이미지 리스트



응답메시지


요청하기

나는 아래와 같이 호출할 예정이다.

  • numOfRows (한페이지결과수) = 10
  • pageNo (페이지번호) = 1
  • MobileOS (OS 구분) = ETC
  • MobileApp (서비스명) = plango
  • serviceKey (인증키(서비스키)) = 내 인증키
  • _type (응답메세지 형식) = Json
  • listYN (목록구분) = Y
  • arrange (정렬구분) = A
  • contentTypeId (관광타입 ID) = 필요x
  • areaCode (지역코드) = 필요x
  • sigunguCode (시군구코드) = 필요x
  • cat1 (대분류) = 필요x
  • cat2 (중분류) = 필요x
  • cat3 (소분류) = 필요x
  • keyword (요청키워드) = 시장

따라서

http://apis.data.go.kr/B551011/KorService1/searchKeyword1
?numOfRows=10
&pageNo=1
&MobileOS=ETC
&MobileApp=plango
&serviceKey=내 인증키
&_type=Json
&listYN=Y
&arrange=A
&keyword=시장

{
  "response": {
    "header": {
      "resultCode": "0000",
      "resultMsg": "OK"
    },
    "body": {
      "items": {
        "item": [
          {
            "addr1": "충청북도 청주시 흥덕구 가경동",
            "addr2": "1438",
            "areacode": "33",
            "booktour": "",
            "cat1": "A04",
            "cat2": "A0401",
            "cat3": "A04010200",
            "contentid": "1433504",
            "contenttypeid": "38",
            "createdtime": "20111111014944",
            "firstimage": "",
            "firstimage2": "",
            "cpyrhtDivCd": "",
            "mapx": "127.4341171334",
            "mapy": "36.6286485111",
            "mlevel": "6",
            "modifiedtime": "20250311152005",
            "sigungucode": "10",
            "tel": "",
            "title": "가경 터미널시장"
          }
        ]
      },
      "numOfRows": 1,
      "pageNo": 1,
      "totalCount": 790
    }
  }
}

파이썬 간단하게 호출 테스트

import requests

service_key = "비밀"

url = f"http://apis.data.go.kr/B551011/KorService1/searchKeyword1?serviceKey={service_key}"

params = {
    "MobileApp": "plango",
    "MobileOS": "ETC",
    "numOfRows": 1,
    "pageNo": 1,
    "listYN": "Y",
    "arrange": "A",
    "keyword": "시장",
    "_type": "json"
}

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

print(response.status_code)    
print(response.json())         

위 코드를 실행 시키면

profile
컴튜터공학과 재학중

0개의 댓글