For를 이용해 반복해서 쿼리를 생성해서 요청하고자 하는데 404 에러가 발생합니다

어제에 이어서 문제가 또 발생해서 여쭤봅니다.

엑셀에 저장된 지번주소 데이터(중간 중간에 NA가 있습니다. 이를 제거하거나 한쪽으로 몰아선 안됩니다.)

컬럼만을 뽑아서 루프문을 구성했습니다.

작업환경은 R이며, test_02$adr 에 지번주소(엑셀에서 한글로 타이핑된) 데이터가 들어있습니다.

for(i in 1:nrow(test_02)){
t_query = URLencode(enc2utf8(test_02$adr[i]))
t_query = paste0("?query=", t_query)
t_query
}

쿼리를 위와 같이 구성했는데 결과물이 ?query=NA로 나오더군요.

또한 이를 바탕으로 아래와 같이 요청을 하면 당연히 쿼리가 NA라서 404가 나오는건지 헷갈립니다.

t_api_url = “https://dapi.kakao.com/v2/local/search/address.json

t_result = httr::GET(paste0(t_api_url, t_query),
httr::add_headers(“Authorization” =
paste0("KakaoAK ", “REST API 키”)))

이렇게 하면 status: 404가 나오네요.

쿼리를 단순히 한글로 1건 타이핑해서 할때는 전혀 문제가 안되는데,

엑셀에 있는 데이터 인코딩이 문제인가 싶어서 utf-8로 인코딩도 실시했는데 문제가 반복되니 미칠지경입니다 ㅠㅠ…

고수님들의 고견을 부탁드립니다 ㅠㅠ…

library('httr')
list <- c('명동', '한남동', NA, NULL, '충무로')
for(addr in list){
  t_query = URLencode(enc2utf8(addr))
  t_query = paste0('?query=', t_query)

  t_api_url ='https://dapi.kakao.com/v2/local/search/address.json'

  print(paste0(t_api_url, t_query))
  t_result = httr::GET(paste0(t_api_url, t_query),
    httr::add_headers('Authorization' = paste0('KakaoAK ', 'XXXXXXXXXXXXXXXX')))

  print(t_result)
}

제가 테스트 해 본 코드인데, 로직 자체는 문제가 없어 보입니다.
결과도 잘 나오고요.

image

404가 나왔다는건 URL 접근 자체가 잘못되었을 경우입니다.
한 예로,

https://dapi.kakao.com/v2/local/search/addreSSS.json

path 자체가 잘 못 적힌 경우입니다.

그 외 클라이언트에서 파라메터나 URL이 잘 못 입력되었을 경우에는 400 혹은 415 에러 코드가 발생합니다. URL이 잘 못 된 문제는 아닌거죠.
키값을 잘 못 썼거나 인증 관련 헤더 값을 잘 못 입력했을 경우에는 401 에러 코드를 내려주므로 권한 문제도 아닙니다.

엑셀에서 가져오는 값 문제일 것이라 예상되긴 하지만
결론은… 해당 환경을 갖출 수 없기에 원인 파악이 힘들다는 겁니다.

인코딩 결과가 어떻게 나오는지 확인해 보시고
그 결과를 다른 HTTP 서비스(e.g curl)로 테스트 해 보세요.

리턴되는 에러를 확인해보시면 되는데요

@doji.doo 님이 말씀해주신대로 path 를 잘못 쓰신 것 같습니다.

‘GET /local-open/v2/search/address0.json’ is not matched
가 보이는데 아마 문의주신 쪽에서 호출하신 걸로 보입니다.

네. 확인했습니다.

경로 문제인줄 알았는데 아니었고 NA가 핸들링 작업 중에 문자열로 변환된 것으로 발생한 문제였습니다 ㅠㅠ…

2차적으로 발생한 문제는 루프를 돌리면서 나오는 결과물 중에서 x, y 좌표 값을 데이터프레임형태로 저장을 해야하는데… 이건 또 공부해봐야겠지요;

확인 감사합니다!

경로 문제는 아니고 데이터 형태를 제가 잘못 인식해서 발생한 문제였습니다. 해결했습니다~ 댓글 감사합니다.