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
처리 중인 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"]
},
[...]
]
또는 물론 축소된 버전(이스케이프 문자 필요 없음):
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)}"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다