Я хочу получить данные с нескольких веб-сайтов, используя curl с пакетным файлом, а затем сохранить результаты curl в текстовый файл.
синтаксис, который я знаю, таков:
curl "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587492&lon=125.952764" >> output.txt
curl "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587493&lon=125.952765" >> output.txt
curl "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587494&lon=125.952766" >> output.txt
curl "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587495&lon=125.952767" >> output.txt
curl "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587496&lon=125.952768" >> output.txt
Я изменил завиток выше на цикл, и он отлично работает. Я установил LF, чтобы следующий результат мог перейти на следующую строку, но это не сработало. Вот мой скрипт:
@echo off
set setlocal EnableDelayedExpansion
set url1 = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587492&lon=125.952764"
set url2 = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587493&lon=125.952765"
set url3 = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587494&lon=125.952766"
set url4 = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587495&lon=125.952767"
set url5 = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587496&lon=125.952768"
(set LF=^
%=EMPTY=%
)
echo %url1%
for %%x in (set) do (
curl %url1%%LF%
curl %url2%%LF%
curl %url3%%LF%
curl %url4%%LF%
curl %url5%%LF%
)> output.txt
Откройте окно командной строки, введите for /?, нажмите клавишу [ENTER] и прочитайте информацию об использовании. Из своих новых знаний вы должны отметить, что вы вообще не должны использовать for /L в опубликованном вами сценарии. Также ни одна из переменных %LF% не требуется. Как насчет того, чтобы вы точно объяснили, в чем заключается задача, потому что нет веской причины устанавливать все эти URL-адреса в такие переменные, а затем ссылаться на каждый из них в цикле, чтобы делать именно то, что делали ваши исходные пять строк!
Кажется, вы угадываете синтаксис; введите for /? и прочитайте справку; вы обнаружите, что вам не нужно /L; также «это не работает» — это не описание неисправности; пожалуйста, прочитайте минимальный воспроизводимый пример…
Я снова изменил свой сценарий, и он работает. Но они объединяют выходы в один, я хочу, чтобы следующий вывод переместился на следующую строку. Кстати, заранее спасибо за совет и участие.
Я добавил «LF», чтобы разбить результат на новую строку, но это не сработало.
вы добавили LF как часть параметра к curl. Вместо этого вы хотите echo %LF%: curl %url1% & echo %LF% и т. д.
ваша петля for %%x in (set) do ... не имеет смысла. См. for /? для правильного использования.
Сколько мест вы планируете использовать? Все ли они последовательные координаты, как в вашем примере («идти по диагонали через ландшафт»)?
чтобы повторить перевод строки, вам не нужно %LF%. Просто echo( достаточно.
я добавил curl %url1% и echo %LF%. Результаты вывода могут быть перемещены на следующую строку. Но вывод говорит, что «эхо отключено» в конце строки. ... ["- 23.509751", "- 19.5", "120.064128", "126.001296"]} ЭХО выключено. ... ["- 5.4138916", "- 1.3024076", "113.9911308", "117.900953"]} ЭХО выключено.
Потому что ваш %LF% не работает должным образом. Забудьте о %LF% и используйте только echo(.





Мне кажется очень странным, что вы хотите иметь обычный текстовый файл в качестве вывода, в то время как обрабатываемые вами URL-адреса на самом деле являются объектами JSON. Чтобы правильно сохранить несколько объектов JSON как действительный JSON, вы должны поместить их в массив JSON.
Я бы сказал, что вам лучше использовать такой инструмент, как xidel, чтобы решить эту проблему.
Вы можете вручную ввести 5 URL-адресов, которые вы упомянули:
xidel -se ^"^
array{^
json-doc('https://nominatim.openstreetmap.org/reverse?format=jsonv2^&lat=-19.587492^&lon=125.952764'),^
json-doc('https://nominatim.openstreetmap.org/reverse?format=jsonv2^&lat=-19.587493^&lon=125.952765'),^
json-doc('https://nominatim.openstreetmap.org/reverse?format=jsonv2^&lat=-19.587494^&lon=125.952766'),^
json-doc('https://nominatim.openstreetmap.org/reverse?format=jsonv2^&lat=-19.587495^&lon=125.952767'),^
json-doc('https://nominatim.openstreetmap.org/reverse?format=jsonv2^&lat=-19.587496^&lon=125.952768')^
}^
"
... но вы также можете создавать их динамически:
xidel -se ^"^
let $json: = {'format':'jsonv2','lat':-19.587492,'lon':125.952764} return^
map:merge(^
($json,{'lat':$json/lat - 0.000001},{'lon':$json/lon + 0.000001}),^
{'duplicates':'use-last'}^
)^
" --printed-json-format=compact
{"format": "jsonv2", "lat": -19.587493, "lon": 125.952765}
xidel -s --xquery ^"^
let $json: = {'format':'jsonv2','lat':-19.587492,'lon':125.952764}^
for $x in 0 to 4^
return^
map:merge(^
(^
$json,^
{'lat':$json/lat - ($x * 0.000001)},^
{'lon':$json/lon + ($x * 0.000001)}^
),^
{'duplicates':'use-last'}^
)^
" --printed-json-format=compact
{"format": "jsonv2", "lat": -19.587492, "lon": 125.952764}
{"format": "jsonv2", "lat": -19.587493, "lon": 125.952765}
{"format": "jsonv2", "lat": -19.587494, "lon": 125.952766}
{"format": "jsonv2", "lat": -19.587495, "lon": 125.952767}
{"format": "jsonv2", "lat": -19.587496, "lon": 125.952768}
xidel -s --xquery ^"^
let $json: = {'format':'jsonv2','lat':-19.587492,'lon':125.952764}^
for $x in 0 to 4^
return^
request-combine(^
'https://nominatim.openstreetmap.org/reverse',^
map:merge(^
(^
$json,^
{'lat':$json/lat - ($x * 0.000001)},^
{'lon':$json/lon + ($x * 0.000001)}^
),^
{'duplicates':'use-last'}^
)^
)/url^
"
https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587492&lon=125.952764
https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587493&lon=125.952765
https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587494&lon=125.952766
https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587495&lon=125.952767
https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587496&lon=125.952768
xidel -s --xquery ^"^
array{^
let $json: = {'format':'jsonv2','lat':-19.587492,'lon':125.952764}^
for $x in 0 to 4^
return^
request-combine(^
'https://nominatim.openstreetmap.org/reverse',^
map:merge(^
(^
$json,^
{'lat':$json/lat - ($x * 0.000001)},^
{'lon':$json/lon + ($x * 0.000001)}^
),^
{'duplicates':'use-last'}^
)^
)/json-doc(url)^
}^
"
[
{
"place_id": 259803148,
"licence": "Data c OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
"osm_type": "relation",
"osm_id": 11690317,
"lat": "-21.5177325",
"lon": "123.52595630504817",
"place_rank": 20,
"category": "boundary",
"type": "administrative",
"importance": 0.25,
"addresstype": "suburb",
"name": "Telfer",
"display_name": "Telfer, Shire Of East Pilbara, Western Australia, Australia",
"address": {
"suburb": "Telfer",
"municipality": "Shire Of East Pilbara",
"state": "Western Australia",
"country": "Australia",
"country_code": "au"
},
"boundingbox": ["-23.509751", "-19.5", "120.064128", "126.001296"]
},
[...]
]
Или, конечно, уменьшенная версия (без escape-символов):
xidel -s --xquery "array{let $json: = {'format':'jsonv2','lat':-19.587492,'lon':125.952764} for $x in 0 to 4 return request-combine('https://nominatim.openstreetmap.org/reverse',map:merge(($json,{'lat':$json/lat - ($x * 0.000001)},{'lon':$json/lon + ($x * 0.000001)}),{'duplicates':'use-last'}))/json-doc(url)}"
Я хочу, чтобы завиток был сделан вот так gist.github.com/shrop/5da5d831f571d19f0be6e9183b1ebf55