Excel это не сложно

Основные форумы => Вопросы по Excel и VBA => Тема начата: Mike_B от 12.02.2021, 19:41:08



Название: Как сделать запросы на озоне?
Отправлено: Mike_B от 12.02.2021, 19:41:08
Добрый день всем!
Наверняка тема обсуждалась, поискал, не нашел. Ткните куда-то или подскажите.
У Озона есть API, описано на cb-api.ozonru.me/apiref/ru/
Искал и пробовал адаптировать примеры, но что-то не догоняю.
Например, авторизация в тестовую среду в документации описана так:

Код:
GET / HTTP/1.1
Host: cb-api.ozonru.me
Client-Id: 836
Api-Key: 0296d4f2-70a1-4c09-b507-904fd05567b9
Content-Type: application/json

Как это сделать из экселя?
Или вот запрос информации о товаре:

Код:
POST /v2/product/info HTTP/1.1
Host: api-seller.ozon.ru
Client-Id: 836
Api-Key: 0296d4f2-70a1-4c09-b507-904fd05567b9
Content-Type: application/json

{
  "offer_id": "item_6060091",
  "product_id": 7154396,
  "sku": 150583609
}

Как послать запрос? В ответ будет XML, чем его удобнее разбирать, кстати?
Что лучше использовать: WinHttpRequest, MSXML2.XMLHTTP60, MSXML2.ServerXMLHTTP ? Везде разное.
Понимаю, для здешних гуру это плевый вопрос, но вот пока лишь простой GET с параметрами в адресе использовал, и только.
Спасибо.


Название: Re:Как сделать запросы на озоне?
Отправлено: Дмитрий Щербаков(The_Prist) от 13.02.2021, 15:16:53
для здешних гуру это плевый вопрос
Интересное мнение. А на чем основано, если не секрет? Запросы к сайтам не бывают плевыми - в теме надо разбираться. И каждый сайт может подкинуть своих проблем. Вы сами пробовали хоть чуть-чуть разобраться с задачей? Не увидел в Вашем сообщении ни намека на собственные попытки хоть как-то решить вопрос. Даже элементарно кода обращения к сайту нет.
Как послать запрос?
А что в документации по этому поводу написано? Какой метод использовать? POST, GET? Какой формат указывать? json или иной?
В ответ будет XML, чем его удобнее разбирать, кстати?
тем, что написано специально для работы с XML узлами - XMLDOM. Только не очень понятно с чего Вы решили, что ответ получите именно в XML, если запрос посылается в формате json...В общем надо сначала документацию нормально покурить по OZON, прежде чем что-то начать делать.


Название: Re:Как сделать запросы на озоне?
Отправлено: Mike_B от 13.02.2021, 20:39:07
Уважаемый Дмитрий!
Знаю Вас по инету, как очень сведущего человека. Многими подсказками из Ваших сообщений на разных форумах пользовался и "мотал на ус". Спасибо!

Здесь сложность была в том, что в документации приведены примеры запросов, подходящие под php (как я понимаю), и преобразовать их в VBA - неясно, как.
Кроме того, не зря я подозревал, что есть разница в разных объектах. WinHttp.WinHttpRequest.5.1 делал перекордировку UTF -> 1252 и получалась каша.
После подсказки об этом получилось вот что (работает). Остается разбор JSON, это уже следующий этап (после кучи попыток вчера замотался и ошибочно написал, что XML).

Код:
Sub SendOzon()
   Const MULTIPART_BOUNDARY As String = "---------------------------0123456789012"
   Dim xhr As Object, myUrl As String, sURL As String, sMethod As String, sData As String, sHeaders As String
   Dim clientId As String, apiKey As String, ff As Integer

   Set xhr = CreateObject("Microsoft.XMLHTTP")
   If xhr Is Nothing Then Set xhr = CreateObject("MSXML2.ServerXMLHTTP")

   ' По https://cb-api.ozonru.me/apiref/ru/#t-title_products_info
   sURL = "https://cb-api.ozonru.me"      ' URL отладки
   sMethod = "/v1/category/attribute"
   sData = "{""category_id"": 17036076, ""language"": ""EN""}"
   clientId = "836"                    ' ID клиента (отладка)
   apiKey = "0296d4f2-70a1-4c09-b507-904fd05567b9" ' ключ (отладка)

   myUrl = sURL & sMethod

   xhr.Open "POST", myUrl, False
   xhr.setRequestHeader "User-Agent", "Mozilla 5.0"
   xhr.setRequestHeader "Content-Type", "application/json; charset=windows-1251"
   xhr.setRequestHeader "Content-Length", Len(sData)
   xhr.setRequestHeader "Client-Id", clientId
   xhr.setRequestHeader "Api-Key", apiKey
   xhr.send "" + sData  'postBody 'URLEncode(sEntityBody)

   Range("A2").Value = xhr.responseText   ' что получили
   Range("A3").Value = sData              ' что слали

   Set xhr = Nothing
End Sub