구글 맵 API를 사용하기 위해서는 Google Cloud에 가입한 뒤 API 키를 받아야 한다.
시작하기를 누르고 과정을 따라가며 입력하다 보면 프로젝트 생성과 함께 최종적으로 API 키가 발급되고 아래와 같은 화면이 보이게 될 것이다.
그다음으로 라이브러리에 들어와서 필요한 API를 추가해주어야 한다.
사용할 Places API를 검색해 주고 노란색 박스친 부분을 클릭해 주면 된다.('관리'가 아닌 '사용'이라고 나타남)
그다음 다시 사용자 인증 정보로 돌아와 API 키를 클릭해 준다.
API 제한사항에서 키 제한을 선택해 주고 방금 추가한 Places API를 선택하고 저장한다.
이제 설정할 것은 다 끝났으므로 API를 사용해 정보를 가져오는 코드를 작성하면 된다.
파이썬에서 API를 사용하는 코드는 다음과 같다.(url 마지막 YOUR_API_KEY에 발급받은 개인 API 키를 넣어주어야 한다!!)
이 코드는 '오스트레일리아 현대 미술관'에 대한 장소 정보를 formatted_address, name, rating, opening_houw, geometry 필드에 대한 정보를 제공하며, 코드를 실행시켜 보면 다음과 같이 결과가 출력된다.
import requests
url = "https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Museum%20of%20Contemporary%20Art%20Australia&inputtype=textquery&fields=formatted_address%2Cname%2Crating%2Copening_hours%2Cgeometry&key=YOUR_API_KEY"
payload={}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
이번에는 장소에 대한 정보가 아닌 장소 세부정보를 API를 이용해 출력해 볼 것이다.
장소 세부정보에는 전체 주소, 전화번호, 사용자 평가, 리뷰 등 표시된 장소에 대한 좀 더 포괄적인 정보가 포함되어 있다.
먼저, 아래 코드를 실행시켜 보면 다음과 같이 place_id에 해당하는 결과를 돌려준다.
import requests
url = "https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJN1t_tDeuEmsRUsoyG83frY4&fields=name%2Crating%2Cformatted_phone_number&key=YOUR_API_KEY"
payload={}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
url에서 /json? 뒷부분을 살펴보면 어떻게 정보를 가져오는지 알 수 있다.
place_id=ChIJN1t_tDeuEmsRUsoyG83frY4&fields=name%2Crating%2Cformatted_phone_number&key=YOUR_API_KEY
place_id에 대한 정보를 찾아 fields에 해당하는 값을 가져온다. place_id는 여기에서 찾을 수 있다.
fields는 %2C를 기준으로 name, rating, formatted_phone_number가 구분되어 있는 것을 알 수 있다.
place_id에 내가 보고 싶은 장소의 id를 찾아 넣어주고, fields에 해당 장소의 세부정보 중 출력할 내용을 적어주면 된다.
나는 안동하회마을에 대한 이름, 평점, 주소, 리뷰를 가져올 것이다.
import requests
url = "https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJ70lL5f4iZDURou4DxhPonPA&fields=name%2Crating%2Cformatted_address%2Creviews&key=YOUR_API_KEY"
payload={}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
여기에서 안동하회마을을 검색하여 place_id를 찾아 url에 적어주었다.
그리고 fields에 name, rating, formatted_address, reviews를 작성하여 정보를 불러온다.
다음과 같이 안동하회마을에 대한 정보 json 형태로 출력된다.
기본적으로 주소와 리뷰의 language를 봐도 영어 정보로 값을 가지고 오는 것을 알 수 있다.
그래서 한글로 가져오기 위해 language=ko 파라미터를 추가해 주었다. (파라미터는 &를 기준으로 구분되는 값이다. place_id, fields, key 등)
import requests
url = "https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJ70lL5f4iZDURou4DxhPonPA&fields=name%2Crating%2Cformatted_address%2Creviews&language=ko&key=YOUR_API_KEY"
payload={}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
review의 language를 보면 'ko'로 한글로 설정된 것은 분명했지만 아니러니 하게도 모두 깨져서 출력되었다.
어떻게 해야 정보를 불러올 때 온전하게 가져올 수 있는지 찾아봤지만 아직 명확한 해답을 얻지 못했다.
encoding은 utf-8로 되어있으나, 모두 유니코드로 나타나서 request를 통해 가져온 text를 가지고 encode, decode를 해주었다.
text = response.text
text = text.encode('euc-kr')
text = text.decode('unicode_escape')
text
유니코드였던 값들이 모두 한글로 돌아오기는 했으나 text가 str 형태이기 때문에 데이터로 사용하기 위해서는 추출하는데 시간이 많이 걸릴 것 같다..
혹시 방법을 아시는 분이 있으면 댓글로 알려주세요♡
+ 2023.05.26 수정)
reponse.text가 아닌 response.json()으로 가져오면 한글이 예쁘게 잘 보인다! 이모티콘까지!
구글맵 Places API에 대한 자세한 정보를 아래 링크에서 확인할 수 있다.