Войти

Показать полную графическую версию : cmd скрипт получения ежеминутных данных в json


kontox
16-09-2018, 15:11
Подскажите, пожалуйста, как написать 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
если временнАя точность не важна и плевать на нагрузку на процессор, то запуск (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
alpap,
а где в скрипте путь к https://api.coindesk.com/v1/bpi/currentprice/

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

Iska
17-09-2018, 13:32
а где в скрипте путь к https://api.coindesk.com/v1/bpi/currentprice/ »
Пока нигде. Вы же не указали, чем Вы будете брать — wget, curl, або ещё чем.

что значит это фраза? Как это все время запущен? »
каждую минуту в течение часа:
for /l %%a in (1 1 60) do (
>nul ping -n 61 127.0.0.1
… »

kontox
17-09-2018, 18:21
Iska, я хотел брать методом сURL. Как это сделать?

Iska
18-09-2018, 02:24
Например, таким:
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
@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
да, в 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
Serguei Kouzmine, curl штатно идёт с современной виндой
ну и вообще - это всё костыли. Есть WSH и PoSh

kontox
18-09-2018, 12:34
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
почему не предлагаете и jq ?? »
Serguei Kouzmine, у меня есть два варианта — Крупский и Делчев то ли потому, что я узнал о существовании jq только из Вашего сообщения, то ли потому (что более вероятно), что у автора даже и намёка на разбор получаемого json-содержимого пока что не было.

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

Serguei Kouzmine
18-09-2018, 16:41
а куда денешься - вообше "весной без него никак"
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
Serguei Kouzmine, страшно далёк я от народа этих вещей ;).

kontox
18-09-2018, 18:05
Можем, можем. Только Вы объясните, зачем Вам собственное дата-время в файле, когда оно и так уже есть в UTC в самом json? »
а так это я для примера, мне все равно как json будет называться, хоть
1.json
2.json

хоть,
а.json
b.json

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

Поясните.

YuS_2
18-09-2018, 21:11
скрипт, который с этого сайта берет данные »
т.е. на выходе должна быть папка
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
Одно непонятно - зачем плодить такую кучу файлов, которые генерируются ежеминутно?




© OSzone.net 2001-2012