Google API запрос .send терпит неудачу - PullRequest
0 голосов
/ 01 мая 2020

Не удалось установить соединение с сервером. Ошибка времени выполнения '-2147012867 (80072efd)'

У меня есть список из нескольких сотен адресов, которые я хочу получить в «правильном формате адресов», поскольку они были заполнены вручную. Я хотел набрать sh адрес для Google, чтобы он правильно отформатировал его, чтобы я мог выполнять дальнейшую обработку, например, удаление повторяющихся адресов и так далее.

Я использую код из ответа здесь , обновил URL-ссылки для своих нужд и смог получить свой собственный ключ API и все остальное. К сожалению, я получаю сообщение об ошибке, как только он пытается вывести sh запрос на строку "xhrRequest.send", говоря, что:

Run-time error '-2146697211 (800c0005)':
The system cannot locate the resource specified. 

Это с Microsoft XML 6.0 импортировано в ссылках.

После дальнейшего поиска некоторые предложили изменить XMLHTTP60 на объект и вручную создать его. Вместо этого я использовал CreateObject («MSXML2.ServerXMLHTTP») для xHrRequest, но получил другой код ошибки:

Run-time error '-2147012867 (80072efd)':
The connection to the server could not be established

Не уверен, что делать дальше, я хочу проверить, что-то блокирует мое соединение , Итак, я затем пытаюсь загрузить VBA-Web с github и попробовать их пример файла, но только выдает ошибку без каких-либо кодов или чего-либо еще.

Есть ли что-то еще, что я мог бы попробовать, чтобы я мог 1026 * запрос? Мой ключ API работает - я знаю, потому что я вставил тот же URL в браузер и получил ожидаемый ответ.

См. Код ниже:

Sub myTest()
'Dim xhrRequest As XMLHTTP60 'original ver
Dim xhrRequest As Object 'edited ver
Dim domDoc As DOMDocument60
Dim domDoc2 As DOMDocument60
Dim placeID As String
Dim query As String
Dim nodes As IXMLDOMNodeList
Dim node As IXMLDOMNode

'you have to replace spaces with +
query = "2211%20Rockerfeller%20Apt%20B" 'test address
fld = "&fields=formatted_address"

'You must acquire a google api key and enter it here
Dim googleKey As String
googleKey = "XXXXXXXXXXXXXXXXXX" 'your api key here

'Send a "GET" request for place/textsearch
'Set xhrRequest = New XMLHTTP60 'original ver, getting resource error
Set xhrRequest = CreateObject("MSXML2.ServerXMLHTTP") 'edited ver, getting connection error
If xhrRequest Is Nothing Then
    Debug.Print "FAIL"
    Exit Sub
End If

'xmlhttpRequest.Open "GET", "https://maps.googleapis.com/maps/api/geocode/xml?" & "&address=" & Application.EncodeURL(address) & "&key=" & apiKey, False
URL = "https://maps.googleapis.com/maps/api/place/findplacefromtext/xml?input=" & query & "&inputtype=textquery" & fld & "&key=" & googleKey
xhrRequest.Open "Get", URL, False
'xhrRequest.Open "GET", "https://maps.googleapis.com/maps/api/place/findplacefromtext/xml?input=" _
& query & "&inputtype=textquery" & fld & "&key=" & googleKey, False
xhrRequest.send 'this is where the code stops working.

'Save the response into a document
Set domDoc = New DOMDocument60
domDoc.LoadXML xhrRequest.responseText

'Find the first node that is called "place_id" and is the child of the "result" node
placeID = domDoc.SelectSingleNode("//candidates/formatted_ddress").Text

'recycling objects (could just use new ones)
Set domDoc = Nothing
Set xhrRequest = Nothing

'Send a "GET" request for place/details
'Set xhrRequest = New XMLHTTP60
'xhrRequest.Open "GET", "https://maps.googleapis.com/maps/api/place/details/xml?placeid=" & placeID & _
'"&key=" & googleKey, False
'xhrRequest.send

'Save the response into a document
'Set domDoc = New DOMDocument60
'domDoc.LoadXML xhrRequest.responseText

Dim output As String
Dim s As String

'hacky way to get postal code, you might want to rewrite this after learning more
'Set nodes = domDoc.SelectNodes("//result/address_component/type")
'For Each node In nodes
'    s = node.Text
'    If s = "postal_code" Then
'        'this is bad, you should search for "long_name", what i did here was assume that "long_name was the first child"
'        output = vbNewLine & "Postal Code: " & node.ParentNode.FirstChild.Text
'    End If
'Next node

'output
MsgBox "Formatted Address: " & domDoc.SelectSingleNode("//result/formatted_address").Text & output
End Sub
...