Excel - VBA

Naver API Sample Code 인증 실패 수정 (GitHub)

EGTools 2024. 6. 16. 10:23
728x90

Naver Map API에서 Web Dynamic Map API 가이드와 예제를 다운로드 할 수 있도록 안내하는데,

GitHub에 있는  자료입니다만,

여기서 다운로드 한 후에 로컬 웹서버에서 열어보면 아래와 같이 인증실패로 표시됩니다.

 

 

https://github.com/navermaps/maps.js.ncp

 

GitHub - navermaps/maps.js.ncp: NAVER CLOUD PLATFORM Maps JavaScript API v3

NAVER CLOUD PLATFORM Maps JavaScript API v3. Contribute to navermaps/maps.js.ncp development by creating an account on GitHub.

github.com

 

 

 

기본으로 들어 있는 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&amp;submodules=panorama"></script>

 

변경후 코드는 아래와 같이 변경합니다.

<script type="text/javascript" src="https://oapi.map.naver.com/openapi/v3/maps.js?ncpClientId=xxxxxxxxxx&amp;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&amp;submodules=panorama", "maps.js?ncpClientId=" & userKey & "&amp;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