Я пытаюсь использовать 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 возвращается следующее:
Близко, но не совсем то же самое. Я думаю, что первая - это церковь, а вторая - это близлежащий бизнес. Есть ли способ, которым я могу заставить их вернуть те же результаты? Или какая-либо причина, почему результаты отличаются?
Вот мой 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)
По сути, оба запроса должны быть одинаковыми. Я в недоумении, почему они этого не делают. Помогите добро пожаловать.