少し前にM5Stackで2足歩行ロボットを作っていまして、歩くだけでは少し物足りなくなったので前面のボタンで天気予報でも表示してみるかとなったのですが、少々手こずったのでその時のメモ。
BeautifulSoupが使えれば苦労しないのですが、micropythonでは使えないので、その辺でハマりました。
なんとか解決はしましたが、タイトルにあるとおり少々強引(かなりかも。。)になっております。
ですので、なにとぞ一つ優しい目でご覧になってやってあげて下さい。
Requestsライブラリは使えるが。。
Requestsライブラリで気象庁の天気予報情報をXMLで参照できるが、 BeautifulSoupが使えないのでタグの指定が出来ず、全体の情報の中から「当日の天気用情報」だけを抜き取る必要がありました。
気象庁の天気予報情報 は、当日から1週間分用意されていて、下部に行くにつれて日付が新しくなっています。
この中から当日の天気予報だけを抜き取るには、日付を使うしかありません。↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
<weatherforecast> <title>weather forecast xml</title> <link>http://www.drk7.jp/weather/xml/27.xml</link> <description>気象庁の天気予報情報を XML で配信。1日1回 AM 6:00 ごろ更新。</description> <pubDate>Mon, 29 Aug 2022 06:00:01 +0900</pubDate> <author>気象庁</author> <managingEditor>drk7.jp</managingEditor> <pref id="大阪府"> <area id="大阪府"> <geo> <long/> <lat/> </geo> <info date="2022/08/29"> <weather>曇時々晴</weather> <img>http://www.drk7.jp/MT/images/MTWeather/201.gif</img> <weather_detail>くもり 時々 晴れ</weather_detail> <wave>0.5メートル</wave> <temperature unit="摂氏"> <range centigrade="max">33</range> <range centigrade="min">22</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">-</period> <period hour="06-12">10</period> <period hour="12-18">10</period> <period hour="18-24">10</period> </rainfallchance> </info> <info date="2022/08/30"> <weather>曇</weather> <img>http://www.drk7.jp/MT/images/MTWeather/200.gif</img> <weather_detail>くもり</weather_detail> <wave>0.5メートル</wave> <temperature unit="摂氏"> <range centigrade="max">32</range> <range centigrade="min">25</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">10</period> <period hour="06-12">10</period> <period hour="12-18">20</period> <period hour="18-24">20</period> </rainfallchance> </info> <info date="2022/08/31"> <weather>曇時々雨</weather> <img>http://www.drk7.jp/MT/images/MTWeather/203.gif</img> <temperature unit="摂氏"> <range centigrade="max">33</range> <range centigrade="min">26</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">70</period> <period hour="06-12">70</period> <period hour="12-18">70</period> <period hour="18-24">70</period> </rainfallchance> </info> <info date="2022/09/01"> <weather>曇時々雨</weather> <img>http://www.drk7.jp/MT/images/MTWeather/203.gif</img> <temperature unit="摂氏"> <range centigrade="max">30</range> <range centigrade="min">25</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">80</period> <period hour="06-12">80</period> <period hour="12-18">80</period> <period hour="18-24">80</period> </rainfallchance> </info> <info date="2022/09/02"> <weather>曇一時雨</weather> <img>http://www.drk7.jp/MT/images/MTWeather/202.gif</img> <temperature unit="摂氏"> <range centigrade="max">30</range> <range centigrade="min">24</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">70</period> <period hour="06-12">70</period> <period hour="12-18">70</period> <period hour="18-24">70</period> </rainfallchance> </info> <info date="2022/09/03"> <weather>曇一時雨</weather> <img>http://www.drk7.jp/MT/images/MTWeather/202.gif</img> <temperature unit="摂氏"> <range centigrade="max">29</range> <range centigrade="min">24</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">70</period> <period hour="06-12">70</period> <period hour="12-18">70</period> <period hour="18-24">70</period> </rainfallchance> </info> <info date="2022/09/04"> <weather>曇一時雨</weather> <img>http://www.drk7.jp/MT/images/MTWeather/202.gif</img> <temperature unit="摂氏"> <range centigrade="max">30</range> <range centigrade="min">24</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">60</period> <period hour="06-12">60</period> <period hour="12-18">60</period> <period hour="18-24">60</period> </rainfallchance> </info> </area> </pref> </weatherforecast> |
日付を指定してみるも。。
とりあえず、下記のように抜き取りたいXMLのデータと一致する文字列を用意しましたが、うまく行かず。
1 2 3 4 5 6 |
kumori_t_ame = "<info date=" + '"' + datetime + '"' + "><weather>" + "曇時々雨" kumori_t_hare = "<info date=" + '"' + datetime + '"' + "><weather>" + "曇時々晴" kumori_iti_ame = "<info date=" + '"' + datetime + '"' + "><weather>" + "曇一時雨" kumori_t_ame = "<info date=" + '"' + datetime + '"' + "><weather>" + "曇時々雨" kumori = "<info date=" + '"' + datetime + '"' + "><weather>" + "曇" hare = "<info date=" + '"' + datetime + '"' + "><weather>" + "晴" |
改行を入れてみるも。。
XMLのページを見てみると、info dateタグの後に改行が入っているので、改行を入れてみました。
ページの通り、インデントも合わせてみました。しかしうまく行かず。。
1 2 3 |
kumori_t_ame = "<info date=" + '"' + datetime + '"' + ">\n <weather>" + "曇時々雨" ・・・ |
ページを見る限り、改行後のインデントは6スペース。
ここで半分諦めていた時にたまたま気づきました。
リプルに取得したxmlのデータを表示させてみると、
インデントのスペースが変わってる。。
1 2 |
<info date="2022/08/29"> <weather>曇時々晴</weather> |
改行後のインデントが8スペースになっているじゃないですか。。
最後の望みを託します。
成功!
1 2 3 4 5 6 |
kumori_t_ame = " <info date=" + '"' + datetime + '"' + ">\n <weather>" + "曇時々雨" kumori_t_hare = " <info date=" + '"' + datetime + '"' + ">\n <weather>" + "曇時々晴" kumori_iti_ame = " <info date=" + '"' + datetime + '"' + ">\n <weather>" + "曇一時雨" kumori_t_ame = " <info date=" + '"' + datetime + '"' + ">\n <weather>" + "曇時々雨" kumori = " <info date=" + '"' + datetime + '"' + ">\n <weather>" + "曇" hare = " <info date=" + '"' + datetime + '"' + ">\n <weather>" + "晴" |
再度スペースの数を変更した所、上手く当日の天気予報を取得する事が出来ました。
やや強引(かなりか。。)かもしれませんが、micropythonでもWEBスクレイピングで天気予報をゲット出来ました。
下の動画は、ボタン押下で当日の天気予報をWEBスクレイピングで取得し、映像で表示するようにしたものです。