Новости:

Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ

Главное меню

Как сделать запросы на озоне?

Автор Mike_B, 12.02.2021, 19:41:08

« назад - далее »

Mike_B

Добрый день всем!
Наверняка тема обсуждалась, поискал, не нашел. Ткните куда-то или подскажите.
У Озона есть 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 с параметрами в адресе использовал, и только.
Спасибо.

Дмитрий Щербаков(The_Prist)

Цитата: Mike_B от 12.02.2021, 19:41:08для здешних гуру это плевый вопрос
Интересное мнение. А на чем основано, если не секрет? Запросы к сайтам не бывают плевыми - в теме надо разбираться. И каждый сайт может подкинуть своих проблем. Вы сами пробовали хоть чуть-чуть разобраться с задачей? Не увидел в Вашем сообщении ни намека на собственные попытки хоть как-то решить вопрос. Даже элементарно кода обращения к сайту нет.
Цитата: Mike_B от 12.02.2021, 19:41:08Как послать запрос?
А что в документации по этому поводу написано? Какой метод использовать? POST, GET? Какой формат указывать? json или иной?
Цитата: Mike_B от 12.02.2021, 19:41:08В ответ будет XML, чем его удобнее разбирать, кстати?
тем, что написано специально для работы с XML узлами - XMLDOM. Только не очень понятно с чего Вы решили, что ответ получите именно в XML, если запрос посылается в формате json...В общем надо сначала документацию нормально покурить по OZON, прежде чем что-то начать делать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453

Mike_B

#2
Уважаемый Дмитрий!
Знаю Вас по инету, как очень сведущего человека. Многими подсказками из Ваших сообщений на разных форумах пользовался и "мотал на ус". Спасибо!

Здесь сложность была в том, что в документации приведены примеры запросов, подходящие под 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