Страницы: 1
RSS
Формирование запросов HTTP из Excel/VBA
 
В корпоративной сети есть сервис поиска материалов через web/https.
Я ввожу наименование материалы и сервис выдает список наиболее подходящих МТР, в виде таблицы.
Возможно ли из excel/vba формировать запросы к этому сервису и обрабатывать полученные результаты?
Обработка полученных результатов и выбор наиболее подходящего из найденных - это другой вопрос.
Какие условия для этого необходимы, например поддержка HHTP API и др?
Дело в том, что список позиций/наименований которым нужно подобрать из НСИ исчисляется тысячами, и в ручную это оооочень долго.
 
Цитата
Иван Ган написал:
Какие условия для этого необходимы
все зависит от самого сайта. Точнее от того, как он обрабатывает запрос и в каком виде возвращает результат. Тема на самом деле не такая уж простая и к разным сайтам могут быть совершенно разные подходы.
Попробуйте использовать Power Query. Подобные примеры есть в сети и здесь на сайте.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Есть специализированные решения, но у меня была необходимость обойтись исключительно vba для API вайлдберриз, это на вход, 2 параметра, на случай, если понадобиться данные посылать, так что com = "GET" всегда,  url - это запрос отчёта (например: https://advert-api.wildberries.ru/adv/v1/promotion/count?par1=1&par2=2), key - это токен доступа, его я потёр
Код
Function RequestAPI(url As String, Com As String) As String
    Dim objHTTP As Object, key As String
    key = "***"
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Call objHTTP.Open(Com, url)
    Call objHTTP.setRequestHeader("Content-Type", "application/json")
    Call objHTTP.setRequestHeader("Authorization", key)
    Call objHTTP.send
    RequestAPI = objHTTP.responseText
End Function

Так что в целом ничего невозможного нет, но нужно почитать апи данного сервиса.
Изменено: Nart1ny - 13.01.2025 18:44:15
 
Цитата
Nart1ny написал:
на случай, если понадобиться данные посылать, так что com = "GET" всегда
так GET это как раз в основном именно получение, нет? А посылать данные - это чаще как раз POST. Но возможно, я не так понял написанное - весь текст в одном предложении и что к чему относится сложно понять на 100% :)
Конечно, при помощи GET тоже можно получать данные, указывая параметры в теле запроса. Но там есть ограничения на кол-во символов и еще по мелочи(кеширование и т.п.).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я туплю, просто не весь блок копировал. Для Post не тестил. Должно работать, но нужно не забыть ввести внешнюю задержку, т.к. достаточно серьёзное ограничение на кол-во запросов.

Проверил, в текущем апи нет возможности параметрами править, только телом, так что как минимум, чтоб заработало для Post, Patch и Del нужно после send добавить это тело. В песочнице сработало, но глубоко не тестил.

Код
Function RequestAPI(url As String, Com As String, Optional reqBody As String = "") As String
    Dim objHTTP As Object, key As String
    key = "***"
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Call objHTTP.Open(Com, url)
    Call objHTTP.setRequestHeader("Content-Type", "application/json")
    Call objHTTP.setRequestHeader("Authorization", key)
    Call objHTTP.send(reqBody)
    RequestAPI = objHTTP.responseText
End Function
Изменено: Nart1ny - 13.01.2025 19:39:41
 
Строка url выглядит так
https://esm.адрессервера.local/?h=5y2Z6B

где 5y2Z6B каждый раз разные, я так понял это идентификатор запроса
 
Ну для этого и нужно описание АПИ. Как формируется  этот идентификатор? На каком языке формируется запрос/ответ? Какие параметры и как должны быть переданы?...

Но на Ваш первоначальный запрос ответ: Да, excel без каких либо доп прог и надстроек может посылать и принимать запросы.

Вот пример макросов с заполнением полей на сайте, соответственно можно и без всяких апи что-то придумать, но нужно более чёткое ТЗ.
 
Посмотрел в отладчике браузера, что html текст запроса включает ссылку на main.ab3aeb36.js.
А main.ab3aeb36.js включает в себя более 96000 строк кода, а кроме него есть файлы ts, tsx, папки с подпапками.

Текст url запроса:
Код
<!doctype
html>

<html
lang="en">

    <head>

        <meta charset="utf-8"/>

        <meta
http-equiv="X-UA-Compatible" content="IE=edge"/>

        <link rel="icon"
href="/favicon.ico"/>

        <meta name="viewport"
content="width=device-width,initial-scale=1"/>

        <meta name="theme-color"
content="#000000"/>

        <script nomodule>

            var DOMAIN_LOCAL =
".domainname.local"

              , UTM_SOURCE_REDIRECT_FROM_IE =
"utm_source=IE"

              , addSearchPath =
window.location.search ? window.location.search + "&" +
UTM_SOURCE_REDIRECT_FROM_IE : window.location.pathname + "?" +
UTM_SOURCE_REDIRECT_FROM_IE

              , addDomain = -1 !==
window.location.href.indexOf(DOMAIN_LOCAL) ? "" : DOMAIN_LOCAL

              ,
redirectToEdge = "microsoft-edge:https://" + window.location.host +
addDomain + addSearchPath

              ,
approve = confirm("Поиск по НСИ больше не доступен в Internet Explorer.
Открыть в Microsoft Edge?");

            approve
&& (window.location.href = redirectToEdge)

       
</script>

       
<title>Поиск по НСИ</title>

        <script
defer="defer"
src="/static/js/main.ab3aeb36.js"></script>

        <link
href="/static/css/main.99ac92e2.css" rel="stylesheet">

    </head>

    <body>

       
<noscript>You need to enable JavaScript to run this
app.</noscript>

        <div
id="root"></div>

    </body>

</html>

 
Цитата
Иван Ган написал:<noscript>You need to enable JavaScript to run this
app.</noscript
Это ключевой кусок html, а он говорит о том, что без выполнения скриптов работать не будет
Страницы: 1
Наверх