728x90
Naver Map API에서 Web Dynamic Map API 가이드와 예제를 다운로드 할 수 있도록 안내하는데,
GitHub에 있는 자료입니다만,
여기서 다운로드 한 후에 로컬 웹서버에서 열어보면 아래와 같이 인증실패로 표시됩니다.
https://github.com/navermaps/maps.js.ncp
기본으로 들어 있는 Client ID가 맞지 않아서 그런것으로 자신의 Client ID로 변경해 주면 됩니다.
해당되는 코드는 아래 부분으로 "clientID=xxxxxxx&" 이 부분을 수정해 줍니다.
현재는 clientID를 사용하지 않으므로 일반 사용자용 ncpClientId와 Naver API의 Client ID로 변경해 줍니다.
<script type="text/javascript" src="https://openapi.map.naver.com/openapi/v3/maps.js?clientId=orK7_YeBAdN64OJ8HUVz&submodules=panorama"></script>
변경후 코드는 아래와 같이 변경합니다.
<script type="text/javascript" src="https://oapi.map.naver.com/openapi/v3/maps.js?ncpClientId=xxxxxxxxxx&submodules=panorama"></script>
텍스트 파일을 열어서 해당 부분을 변경하는 매크로를 작성합니다.
FileSystemObject의 OpenTextFile을 사용하면 한글이 깨지는 문제가 있으므로,
ADODB.Stream을 이용해서 UTF-8 인코딩을 적용해서 수정합니다.
폴더내의 html 파일을 모두 수정하고, 하위 폴더에 대해서 재귀호출을 합니다.
Function ReplaceKeyNames(FolderPath As String, userKey As String)
Dim FSO As Object, oSubFolder As Object, oFolder As Object
Dim oFile As Object, oHTML As Object, Text As String
If Dir(FolderPath, vbDirectory) = "" Then Exit Function
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(FolderPath)
For Each oFile In oFolder.Files
If UCase(Right(oFile.Name, 5)) = ".HTML" Then
Set oHTML = CreateObject("ADODB.Stream")
With oHTML
.Charset = "utf-8"
.Open
.LoadFromFile oFile.Path
Text = .ReadText
.Close
If InStr(1, Text, "YeBAdN64OJ8HUVz", vbBinaryCompare) Then
Text = Replace(Text, "maps.js?clientId=orK7_YeBAdN64OJ8HUVz&submodules=panorama", "maps.js?ncpClientId=" & userKey & "&submodules=panorama")
.Type = 2
.Open
.WriteText Text
.SaveToFile oFile.Path, 2
Debug.Print oFile.Path, "OK"
End If
End With
End If
Next oFile
For Each oSubFolder In oFolder.subfolders
Call ReplaceKeyNames(oSubFolder.Path, userKey)
Next oSubFolder
Set FSO = Nothing: Set oSubFolder = Nothing: Set oFolder = Nothing: Set oFile = Nothing: Set oHTML = Nothing
End Function
이제 폴더를 선택하고 위에 작성한 매크로를 호출하는 메인 매크로를 작성합니다.
Sub ReplaceKey()
Dim userKey As String, FolderPath As String
userKey = "NaverAPIKey"
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.InitialFileName = Environ("UserProfile")
.Show
If .SelectedItems.Count = 0 Then Exit Sub
FolderPath = .SelectedItems.Item(1)
End With
Call ReplaceKeyNames(FolderPath, userKey)
End Sub
수정된 소스를 다시 로딩한 결과는 아래와 같습니다.
728x90
'Excel - VBA' 카테고리의 다른 글
Query문자열에서 출력할 필드명을 추출하는 GET_JSON_FIELDS 함수 (0) | 2025.01.18 |
---|---|
Naver Web Dynamic MAP이용한 VBA 지적도 (0) | 2024.06.18 |
Local Web Server 간단하게 실행하고 종료하기 (feat. Python) (0) | 2024.06.16 |
VBA Module Source Backup Tool (0) | 2024.06.08 |
VBA Project 소스코드 백업하기 (0) | 2024.05.18 |