HTTPS запрос из CALC BASIC

Автор quarantine85, 8 июня 2020, 10:35

0 Пользователи и 1 гость просматривают эту тему.

quarantine85

Добрый день!

Подскажите, пожалуйста, реализуемо ли следующее?
Из макроса BASIC сделать HTTPS запрос и получить оттуда XML или JSON.

sokol92

Достаточно долго провозились с этим и пришли к выводу, что оптимальным решением является вызов из LO утилиты curl . Эта утилита в настоящее время есть на всех платформах, включая Win10.
Владимир.

economist

Можно макросом вызвать py-скрипт на Python, разбор XML/JSON в нем реализован "из коробки"
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

quarantine85

Цитата: sokol92 от  8 июня 2020, 11:59
Достаточно долго провозились с этим и пришли к выводу, что оптимальным решением является вызов из LO утилиты curl . Эта утилита в настоящее время есть на всех платформах, включая Win10.
А можете чуть подробнее как вызвать curl?

rami

#4
Цитата: quarantine85 от  8 июня 2020, 10:35Из макроса BASIC сделать HTTPS запрос и получить оттуда XML или JSON.
Смотрите пример Парсинг валют.ods в этой теме (пример про XML, но JSON анологично)

sokol92

И пример вызова curl. Значение переменной url для GET-запроса, возвращающего текст в формате json, можно, естественно, менять.

Option Explicit
Sub CurlExample
  Dim  oPathSubstitution,  oSFA, url as String, fileJson as String, fileErr as String
 
  url="https://restcountries.eu/rest/v2/callingcode/372"  ' получение информации о стране ЕС по коду
 
  Set oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  Set oPathSubstitution=CreateUnoService("com.sun.star.util.PathSubstitution")
  fileJson=oPathSubstitution.substituteVariables("$(home)/curlExample.json", true)
  fileErr=oPathSubstitution.substituteVariables("$(home)/curlExample.err", true)
  If oSFA.exists(fileJson) Then oSFA.kill(fileJson)
  If oSFA.exists(fileErr) Then oSFA.kill(fileErr)
 
  Shell "curl", 0, url & " -s -S  -H ""Content-type: application/json""  --stderr """ & ConvertFromUrl(fileErr) & """"  & _
           " -o """ & ConvertFromUrl(fileJson) & """", true
           
  If  oSFA.exists(fileJson) Then
     Msgbox "Результат запроса в файле " &  ConvertFromUrl(fileJson)
  ElseIf oSFA.exists(fileErr) Then
     Msgbox "Файл Json не сформирован. См. файл " &  ConvertFromUrl(fileErr), MB_ICONEXCLAMATION
  Else
     Msgbox "Ошибка при вызове Curl", MB_ICONSTOP
  End If     
End Sub
Владимир.