こんにちは私はこれを使用しています:
curl -s "http://api.openweathermap.org/data/2.5/forecast?id=6361046&APPID=6be5e3a6e62680c28044791e8fc7b568&units=metric" -o ~/.cache/weather.json
キャッシュフォルダーにweather.jsonファイルを書き込む。出力は this です。問題は、それが1行だけであり、grepを使用して今日のアイコン値の出力を取得しようとしていることです。
{"cod":"200","message":0,"cnt":40,"list":[{"dt":1574629200,"main":{"temp":12.8,"temp_min":12.8,"temp_max":13.07,"pressure":1020,"sea_level":1020,"grnd_level":1012,"humidity":82,"temp_kf":-0.27},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}]
この場合は "04n"なので、次のように使用できます。
~/.weather-icons/$(grep "icon" ~/.cache/weather.json).png
これは~/.weather-icons/04n.png
を出力するため、アイコンの値と同じ名前のフォルダーのアイコンを使用して、$ imageを使用してconkyに表示できます。私の質問は、これをどのようにして行うことができるのですか?表示されているパラメーターを使用してfile.jsonを読み取るためのより良いコマンドがあるかどうかはわかりません here または、grepを使用してアイコンの値を出力する方法があるかどうかはわかりません。ありがとう
IMOこれを行う正しい方法( @ fedonkadifeli によるコメントで提案されている)は、JSON対応のツールを使用して、目的のタイムスタンプを持つリスト要素を選択することです。
たとえば、最初のタイムスタンプ1574629200
は本日2019年11月24日16:00 ESTを表し、保存されたweather.json
ファイルでjq
を使用します。
$ jq -r --arg dt "$(date +%s -d 'today 16:00:00 EST')" '
.list[] | select( .dt == ($dt | tonumber) ) | .weather[].icon
' weather.json
04n
他の目的で気象データが必要ない場合は、curl
出力をファイルに保存するのではなく、jq
コマンドに直接パイプすることを検討できます。
特定の時刻を気にしない場合は、firstアイコンをさらに簡単に取得できます
curl ... | jq -r '.list[0].weather[].icon'
より適切な答えは、おそらくjq
のようなツールを使用して作成できますが、ブルートフォースメソッドは次のようになります。
$ head -c400 ~/.cache/weather.xml
{"cod":"200","message":0,"cnt":40,"list":[{"dt":1574629200,"main":{"temp":12.8,"temp_min":12.8,"temp_max":13.07,"pressure":1020,"sea_level":1020,"grnd_level":1012,"humidity":82,"temp_kf":-0.27},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":92},"wind":{"speed":2.22,"deg":232},"sys":{"pod":"n"},"dt_txt":"2019-11-24 21:00:00"},{"dt":1574640000,"ma
これにより、ファイルの最初の400文字が表示されますが、情報は常にファイルの先頭にありますか?
$ head -c400 ~/.cache/weather.xml | sed 's/.*icon":"//g'
04n"}],"clouds":{"all":92},"wind":{"speed":2.22,"deg":232},"sys":{"pod":"n"},"dt_txt":"2019-11-24 21:00:00"},{"dt":1574640000,"ma
これにより、"icon":"
までのすべてが削除され、行の先頭にある04n
が残ります。
$ head -c400 ~/.cache/weather.xml | sed 's/.*icon":"//g' | sed 's/".*//'
04n
最後に、これはあなたが探していたすべてを提供します。
きれいではありませんが、うまくいきます。