Метеоролог пытается создать прогноз страниц - PullRequest
1 голос
/ 29 октября 2019

Позвольте мне предварить это, сказав, что мой последний компьютерный класс был в средней школе 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
...