Компакт getHTTP
функция
Ниже представлена компактная и универсальная функция, которая будет возвращать HTTP-ответ с указанного URL, например:
- возвращает
HTML
Источник веб-страницы,
JSON
ответ от URL API,
- парсинг текстового файла по URL и т. Д.
Это не требует каких-либо ссылок VBA, поскольку MSXML2
используется как объект с поздней привязкой.
Public Function getHTTP(ByVal url As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False: .Send
getHTTP = StrConv(.responseBody, vbUnicode)
End With
End Function
Обратите внимание, что эта базовая функция не имеет проверки или обработки ошибок, поскольку это те части, которые могут значительно различаться в зависимости от того, какой URL вы нажимаете.
При желании проверьте значение .Status
после .Send
), чтобы проверить коды успеха, такие как 0
или 200
, а также вы можете настроить ловушку ошибок с помощью On Error Goto...
(никогда Resume Next
!)
Пример использования:
Эта процедура очищает эту страницу переполнения стека для текущей оценки этого вопроса.
Sub demo_getVoteCount()
Const answerID$ = 2522760
Const url_SO = "https://stackoverflow.com/a/" & answerID
Dim html As String, startPos As Long, voteCount As Variant
html = getHTTP(url_SO) 'get html from url
startPos = InStr(html, "answerid=""" & answerID) 'locate this answer
startPos = InStr(startPos, html, "vote-count-post") 'locate vote count
startPos = InStr(startPos, html, ">") + 1 'locate value
voteCount=Mid(html,startPos,InStr(startPos,html,"<")-startPos) 'extract score
MsgBox "Answer #" & answerID & " has a score of " & voteCount & "."
End Sub
Конечно, в действительности есть гораздо лучшие способы получить оценку ответа, чем в примере выше, например, этот способ.)