Почему я получаю разные результаты для поиска мест API Google в веб-браузере и в Excel VBA? - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь использовать Google Places API для поиска мест в электронной таблице Excel, возвращая их идентификатор места, долготу и широту.

Когда я использую API из своего браузера с этим URL,

https://maps.googleapis.com/maps/api/place/findplacefromtext/xml?key=MYKEY&input=%22saint%20mary,%20reading%20berkshire%22&inputtype=textquery&fields=place_id,geometry/location

Я получаю следующие результаты:

<FindPlaceFromTextResponse>
<candidates>
<geometry>
<location>
<lat>51.4544683</lat>
<lng>-0.9739627</lng>
</location>
</geometry>
<place_id>ChIJC-64rxabdkgRxjqxVE0q21k</place_id>
</candidates>
<status>OK</status>
</FindPlaceFromTextResponse>

Однако при выполнении того же запроса из модуля Excel VBA возвращается следующее: ChIJByZmrxabdkgR96wuqh0HTN0

Близко, но не совсем то же самое. Я думаю, что первая - это церковь, а вторая - это близлежащий бизнес. Есть ли способ, которым я могу заставить их вернуть те же результаты? Или какая-либо причина, почему результаты отличаются?

Вот мой VBA-код для отправки http-запроса. Функция "ConcatenateRow" просто объединяет диапазон ячеек, которые я передаю функции, разделяя их пробелами. В этих ячейках содержатся «Святой Марии, Чтение» и «Беркшир».

Function GMapsGeocode(address As Range) As Variant
    'returns the Google place id, latitude and longitude
    If myKey = "" Then myKey = InputBox("What's your Google API Key?")
    Dim addressConcat As String: addressConcat = ConcatenateRow(address, " ")
    Dim strAddress As String
    Dim strQuery As String
    'strAddress = URLEncode(addressConcat)
    Dim Returns(2) As Variant

    'Assemble the query string
    strQuery = "https://maps.googleapis.com/maps/api/place/findplacefromtext/xml?"
    strQuery = strQuery & "key=" & myKey
    strQuery = strQuery & "&input=" & addressConcat
    strQuery = strQuery & "&inputtype=textquery&fields=place_id,geometry/location"

    'define XML and HTTP components
    Dim googleResult As New MSXML2.DOMDocument
    Dim googleService As New MSXML2.XMLHTTP
    Dim firstResult As MSXML2.IXMLDOMNodeList
    Dim oNodes As MSXML2.IXMLDOMNodeList
    Dim oNode As MSXML2.IXMLDOMNode

    googleService.Open "GET", strQuery, False
    googleService.send
    googleResult.LoadXML (googleService.responseText)

По сути, оба запроса должны быть одинаковыми. Я в недоумении, почему они этого не делают. Помогите добро пожаловать.

...