Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   cmd скрипт получения ежеминутных данных в json (http://forum.oszone.net/showthread.php?t=336713)

kontox 16-09-2018 15:11 2831582

cmd скрипт получения ежеминутных данных в json
 
Подскажите, пожалуйста, как написать cmd скрипт, который с этого сайта берет данные?
https://api.coindesk.com/v1/bpi/currentprice/USD.json
Код:

{"time":{"updated":"Sep 16, 2018 09:31:00 UTC","updatedISO":"2018-09-16T09:31:00+00:00","updateduk":"Sep 16, 2018 at 10:31 BST"},"disclaimer"
:"This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org","bpi":
{"USD":{"code":"USD","rate":"6,487.3100","description":"United States Dollar","rate_float":6487.31}}}

Тут показано как изменяется курс BTC/USD по- минутно. Когда вы откроете ссылку у вас уже будет другая информация, не как у меня, а в то время (ту минуту)как вы открыли. Информация обновляется каждую минуту
Как создать bat скрипт, который регулярно каждую минуту, заходит сюда https://api.coindesk.com/v1/bpi/currentprice/

т.е. на выходе должна быть папка
C:/myfolder
а в ней jsonc примерно такой маркировки
16.09.2018 11:35. json
через минуту зашел
16.09.2018 11:36.json
через минуту зашел
16.09.2018 11:37.json
...

alpap 16-09-2018 15:35 2831585

если временнАя точность не важна и плевать на нагрузку на процессор, то запуск (json ясное дело, bat все время запущен) каждую минуту в течение часа:
Код:

@echo off
setlocal enabledelayedexpansion
 for /l %%a in (1 1 60) do (
  >nul ping -n 61 127.0.0.1
  >>file.txt (echo !date!_!time:~,8!& echo Запуск json с выводом в файл& echo:)
 )
endlocal
pause


kontox 17-09-2018 12:24 2831738

alpap,
а где в скрипте путь к https://api.coindesk.com/v1/bpi/currentprice/

json ясное дело, bat все время запущен
поясните, что значит это фраза? Как это все время запущен? Он сам себя все время запускает, или я на него должен кликать?

Iska 17-09-2018 13:32 2831750

Цитата:

Цитата kontox
а где в скрипте путь к https://api.coindesk.com/v1/bpi/currentprice/ »

Пока нигде. Вы же не указали, чем Вы будете брать — wget, curl, або ещё чем.

Цитата:

Цитата kontox
что значит это фраза? Как это все время запущен? »

Цитата:

Цитата alpap
каждую минуту в течение часа:
Код:

for /l %%a in (1 1 60) do (
  >nul ping -n 61 127.0.0.1

»


kontox 17-09-2018 18:21 2831798

Iska, я хотел брать методом сURL. Как это сделать?

Iska 18-09-2018 02:24 2831846

Например, таким:
Код:

for /f "usebackq delims=" %%i in (`2^>nul "C:\Program Files (x86)\curl\curl.exe" --url "https://api.coindesk.com/v1/bpi/currentprice/USD.json"`) do echo %%i

Serguei Kouzmine 18-09-2018 05:58 2831848

@iska по моему если вы использете уже curl
https://curl.haxx.se/dlwiz/?type=bin

почему не предлагаете и jq ??
https://stedolan.github.io/jq/download/

https://stedolan.github.io/jq/manual/

например

Код:

curl -# -k https://api.coindesk.com/v1/bpi/currentprice/USD.json -o - | /c/tools/jq-win64.exe  '.bpi[] | select(.code == "USD")|.rate_float'
##############
6246.2438

- это было запущено из git bash msys console

Serguei Kouzmine 18-09-2018 06:33 2831849

да, в cmd пример будет в двойных кавычках а в аргументах надо будет ее экранировать например
Код:

c:\tools\curl.exe  -o - -# -k https://api.github.com/repos/mozilla/geckodriver/releases | /c/tools/jq-win64.exe '.[] | .assets[] |select(.name | match(\"^geckodriver.*\")) | .name,.url,.browser_download_url'
даст
Код:

"geckodriver-v0.8.0-win32.zip"
"https://api.github.com/repos/mozilla/geckodriver/releases/assets/1820334"
"https://github.com/mozilla/geckodriver/releases/download/v0.8.0/geckodriver-v0.
8.0-win32.zip"


Busla 18-09-2018 10:49 2831861

Serguei Kouzmine, curl штатно идёт с современной виндой
ну и вообще - это всё костыли. Есть WSH и PoSh

kontox 18-09-2018 12:34 2831875

Iska, Serguei Kouzmine, а можете показать, как в полной версии будет выглядеть cmd скрипт, готовый для работы?
т.е.
for /f "usebackq delims=" %%i in (`2^>nul "C:\Program Files (x86)\curl\curl.exe" --url "https://api.coindesk.com/v1/bpi/currentprice/USD.json"`) do echo %%i

и

@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 60) do (
>nul ping -n 61 127.0.0.1
>>file.txt (echo !date!_!time:~,8!& echo Запуск json с выводом в файл& echo:)
)
endlocal
pause

как их объединить

Iska 18-09-2018 13:28 2831882

Цитата:

Цитата Serguei Kouzmine
почему не предлагаете и jq ?? »

Serguei Kouzmine, у меня есть два варианта — Крупский и Делчев то ли потому, что я узнал о существовании jq только из Вашего сообщения, то ли потому (что более вероятно), что у автора даже и намёка на разбор получаемого json-содержимого пока что не было.

Цитата:

Цитата kontox
а можете показать, как в полной версии будет выглядеть cmd скрипт, готовый для работы? »

Можем, можем. Только Вы объясните, зачем Вам собственное дата-время в файле, когда оно и так уже есть в UTC в самом json?

Serguei Kouzmine 18-09-2018 16:41 2831912

а куда денешься - вообше "весной без него никак"
https://eax.me/consul/
https://habr.com/company/otus/blog/413567/
https://www.consul.io/docs/connect/ca/consul.html

у jq синтаксис своебразный - приходится привыкать
https://www.youtube.com/watch?v=NzqBhHVJMDI

Iska 18-09-2018 16:51 2831914

Serguei Kouzmine, страшно далёк я от народа этих вещей ;).

kontox 18-09-2018 18:05 2831924

Цитата:

Цитата Iska
Можем, можем. Только Вы объясните, зачем Вам собственное дата-время в файле, когда оно и так уже есть в UTC в самом json? »

а так это я для примера, мне все равно как json будет называться, хоть
1.json
2.json

хоть,
а.json
b.json

Iska 18-09-2018 18:16 2831925

kontox, тогда я перестал понимать, что Вы хотите получить в результате. Ибо изначально речь шла про один файл, в который периодически пишется дата-время и полученное json-содержимое очередного запроса.

Поясните.

YuS_2 18-09-2018 21:11 2831943

Цитата:

Цитата kontox
скрипт, который с этого сайта берет данные »

Цитата:

Цитата kontox
т.е. на выходе должна быть папка
C:/myfolder
а в ней jsonc примерно такой маркировки
16.09.2018 11:35. json
через минуту зашел
16.09.2018 11:36.json
через минуту зашел
16.09.2018 11:37.json »

powershell
Код:

$fld = 'C:\MyFolder'
if(!(test-path $fld)){md $fld|out-null}
$tmp = (get-date).minute
do {
        if ((get-date).addminutes(-1).minute -eq $tmp){
                $u = iwr https://api.coindesk.com/v1/bpi/currentprice/USD.json
                $tmp = (get-date).minute
                $u.content|convertto-json|out-file $(
                        $fld + '\' + (get-date -f yyyy-MM-dd_HH-mm (
                                $u.content|convertfrom-json
                        ).time.updatediso) + '.json'
                )
        }
        sleep -m 1000
} until ([console]::keyavailable)

- скрипт работает в цикле. Выход из цикла/скрипта по нажатию любой кнопки в консоли powershell...

PS
Одно непонятно - зачем плодить такую кучу файлов, которые генерируются ежеминутно?


Время: 07:45.

Время: 07:45.
© OSzone.net 2001-