Позвольте мне предварить это, сказав, что мой последний компьютерный класс был в средней школе 1968-69. Я уверен, что я не использую лучшие практики, и я всегда ценю помощь там. Все, что я делаю, самообучается, и это первый действительно оригинальный фрагмент кода, который я написал.
В этом случае я пытаюсь создать страницы прогноза погоды. Вот образцы для Гонолулу . Данные поступают из NWS NDFD (национальной базы данных цифрового прогноза) через api.weather.gov в json. Я собираю эти переменные и вставляю их в ImageMagick.
Две проблемы. Единственный способ, которым я мог приспособиться к прогнозу, каждый раз с разной длиной, - это использовать команду заголовка. Но СОЛНЕЧНО, рядом с трех или четырьмя строчками, прогноз звучит ужасно. Есть ли лучший способ или хотя бы способ ограничить верхний размер шрифта?
Кроме того, это занимает намного больше времени, чем я ожидал. Есть ли способ для меня ускорить процесс?
Заранее спасибо за вашу помощь. Я многому учусь здесь.
#!/bin/bash
#process forecast json
#8Oct2019
#@geofffox
cd /tmp/json
#curl -o kofk https://api.weather.gov/gridpoints/OAX/31,93/forecast
#curl -o kofk https://api.weather.gov/gridpoints/AFG/381,359/forecast
#curl -o kofk https://api.weather.gov/gridpoints/APX/36,23/forecast
#curl -o kofk https://api.weather.gov/gridpoints/HFO/153,144/forecast
curl -o kofk https://api.weather.gov/gridpoints/OKX/66,65/forecast
counter=0
while [ $counter -le 13 ]
do
number["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].number')
name["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].name')
start["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].startTime')
end["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].endTime')
swch["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].isDaytime')
temp["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].temperature')
wind["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].windSpeed')
wdir["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].windDirection')
shrt["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].shortForecast')
long["$counter"]=$(cat kofk | jq -r '.properties.periods['$counter'].detailedForecast')
echo $counter
((counter++))
done
innerLoop=0
rm /var/www/html/output/json/kofk/*.png
while [ $innerLoop -le 13 ]
do
echo $innerLoop
convert -size 1920x1080 xc:blue PNG32:/var/www/html/output/json/kofk/kofk.png
convert -background rgba\(0,0,0,0.001\) -fill white -stroke black -strokewidth 3 -gravity west -font Open-Sans-Extrabold -size 700x400 caption:"${shrt["$innerLoop"]^^}" \( +clone -shadow 70x12+5+5 \) +swap \
-flatten -trim +repage /var/www/html/output/json/kofk/shrt["$innerLoop"].png
convert /var/www/html/output/json/kofk/kofk.png -gravity northwest -pointsize 50 -fill white -font Open-Sans-Bold -stroke black -strokewidth 2 -draw "text 950,115 '${name["$innerLoop"]^^}'" /var/www/html/output/json/kofk/kofk["$innerLoop"].png
if ${swch["$innerLoop"]} == false; then
convert /var/www/html/output/json/kofk/kofk["$innerLoop"].png -pointsize 50 -fill white -font Open-Sans-Bold -stroke black -strokewidth 2 -draw "text 950 700 'DAYTIME HIGH:'" /var/www/html/output/json/kofk/kofk["$innerLoop"].png
else
convert /var/www/html/output/json/kofk/kofk["$innerLoop"].png -pointsize 50 -fill white -font Open-Sans-Bold -stroke black -strokewidth 2 -draw "text 950 700 'OVERNIGHT LOW:'" /var/www/html/output/json/kofk/kofk["$innerLoop"].png
fi
convert /var/www/html/output/json/kofk/kofk["$innerLoop"].png -pointsize 200 -fill black -font Open-Sans-Extrabold -draw "text 1405 705 '${temp["$innerLoop"]^^}°'" -fill white -stroke black -strokewidth 5 -draw "text 1400 700 '${temp["$innerLoop"]^^}°'" /var/www/html/output/json/kofk/kofk["$innerLoop"].png
convert /var/www/html/output/json/kofk/kofk["$innerLoop"].png -pointsize 50 -fill white -font Open-Sans-Bold -stroke black -strokewidth 2 -draw "text 950 750 'WIND: ${wdir["$innerLoop"]}"" ${wind["$innerLoop"]^^}'" /var/www/html/output/json/kofk/kofk["$innerLoop"].png
convert -composite -gravity west -geometry +950-175 /var/www/html/output/json/kofk/kofk["$innerLoop"].png /var/www/html/output/json/kofk/shrt["$innerLoop"].png /var/www/html/output/json/kofk/kofk["$innerLoop"].png
rm /var/www/html/output/json/kofk/shrt["$innerLoop"].png
((innerLoop++))
done
exit