天気情報を表示する10(Weather Hacks編2)

前回から始まったWeather Hacksですが、地域idの確認と天気情報を取得するところまでやったので、とりあえず本日の天気予報を表示しようと思います。

取得した天気情報を確認する

取得した情報を見てみる

では、前回取得したXMLを見ておきましょう。

<telop>にあるのが、本日の天気予報で、今回の目的としている部分です。

ページトップへ

見やすくして確認する
<?xml ... >
<lwws version="livedoor ... >
 <author>livedoor Weather Team.</author>
 <location area="四国" pref="香川県" ... />
 <title>香川県 高松 - 今日の天気</title>
 <day>Tuesday</day>
 <telop>曇り</telop>
 <image>
  <url>http://image.weather.live ... </url>
 </image>
 <temperature>
  <max>
   <celsius>23</celsius>
  </max>
  <min>
   <celsius></celsius>
  </min>
 </temperature>
</lwws>

私のパソコン環境では、上のように整形されて表示されてしまうため、そのままでも良いのですが、iPhoneでの表示を基に書き直してみます。

今回の目的である、本日の天気予報部分の色を変えています。
おまけに、かなり省略しています。

天気予報の部分を確認していただくのはもちろんなのですが、「入れ子」構造も再確認しておいて下さい。

この情報を基に、本日の天気を表示するウィジェットを作ります。

ページトップへ

基本ファイルとその確認

サンプルファイル構成

今回作るサンプルウィジェットを含むテーマファイルの基本構成は、相変わらず右図の通りです。
ファイルのダウンロードはこちらーー>ダウンロード
LockBackground.htmlは、ロック画面で実行されるウィジェットです。
style.cssは見た目の設定をし、script.jsで天気情報を取得したり表示したりします。

では、ファイルを1つ1つ見ていきましょう。

サンプルHTML

HTMLから見ていきましょう。
以下に示すのが、LockBackground.htmlの中身(ソース)です。

<!DOCTYPE html>
<html>
 <head>
  <meta name="viewport" content="width=device-width,minimum-scale=0.5,initial-scale=0.5"/>
  <meta charset="UTF-8">
  <script src="./script.js" type="text/javascript"></script>
  <link href="./style.css" rel="stylesheet" type="text/css" />
 </head>
 <body onload="setWeather()">
  <div id="weather">
   <p id="city"></p>
   <p id="day"></p>
   <img id="image"/>
   <p id="text"></p>
   <p id="temp"></p>
  </div>
 </body>
</html>

サンプルHTMLソース1

今回のシリーズにおける基本ですね。
今回は、都市名と現在の天気と気温を取得・表示するので、必要十分なモノしか用意しておりません。
やはり、スタートはこの3つになりそうですね。

天気情報に関する表示は3つですので、それぞれpタグにidを割り当てています。
そして、それらをいつものようにdivタグで囲っています。
ソースが読み込まれたら、関数setWeatherを実行し、天気情報を書き換えるという流れです。

ページトップへ

サンプルJavaScript

では、JSファイルを見ていきましょう。
以下に示すのが、script.jsの中身(ソース)です。
と言っても、基本的なソースはすでに紹介&配信してあるので、天気情報を読み込んだあとに実行する関数xml_respondedのみを紹介します。

function xml_responded (request) {
 var lwws = findChild(request.responseXML, "lwws");
 var city = findChild(lwws, "title").textContent;
 var day = findChild(lwws, "day").textContent;
 var telop = findChild(lwws, "telop").textContent;
 var url = findChild(findChild(lwws, "image"),"url").textContent;
 var temp = findChild(lwws, "temperature");
 var max = findChild(findChild(temp, "max"),"celsius").textContent;
 var min = findChild(findChild(temp, "min"),"celsius").textContent;

 document.getElementById("city").innerText = city;
 document.getElementById("day").innerText = day;
 document.getElementById("image").src = url;
 document.getElementById("text").innerText = telop;
 document.getElementById("temp").innerText = max + " / " + min;
}

サンプルJavaScript1

私自身が分かりやすい記述をしております。
XMLと見比べると分かりやすいかと思います。

ページトップへ

サンプルスタイルシート
* {
   margin: 0px;
   padding: 0px;
   border: 0px;
}
body {
   width: 640px;
   height: 960px;
   background-color: white;
}
#weather {
   margin: 232px 0px;
}
p {
   font-size: 24px;
   color: black;
   text-shadow: 1px 1px 1px white;
}

サンプルスタイルシート1

次に、スタイルシート(style.css)を見ていきましょう。

こちらも相変わらずの書き方です。

ページトップへ

サンプル表示

今回は、Weather Hacksから本日の天気情報を取り出して表示することが目的なので、表示されていればそれでOKです。

上から順に、地域、曜日、天気アイコン、天気、気温が取り出せています。
今回は、最低気温が配信されていませんでしたので、表示もされていません。



今回のサンプルファイルのダウンロードは、こちらからどうぞーー>ダウンロード

ページトップへ

整形する

今回は、とても簡単な整形で済ませます。
見た目のみの変更ですが、地域情報にある「 - 今日の天気」を削除するために、スタイルシートだけでなく、JavaScriptも少し変更します。

サンプルJavaScript

では、JSファイルを見ていきましょう。
以下に示すのが、script.jsの中身(ソース)です。
と言っても、基本的なソースはすでに紹介&配信してあるので、天気情報を読み込んだあとに実行する関数xml_respondedのみを紹介します。

function xml_responded (request) {
 var lwws = findChild(request.responseXML, "lwws");
 var city = findChild(lwws, "title").textContent;
 city = city.substring(0, city.indexOf("-"));
 var day = findChild(lwws, "day").textContent;
 var telop = findChild(lwws, "telop").textContent;
 var url = findChild(findChild(lwws, "image"),"url").textContent;
 var temp = findChild(lwws, "temperature");
 var max = findChild(findChild(temp, "max"),"celsius").textContent;
 var min = findChild(findChild(temp, "min"),"celsius").textContent;

 document.getElementById("city").innerText = city;
 document.getElementById("day").innerText = "本日の天気";
 document.getElementById("image").src = url;
 document.getElementById("text").innerText = telop;
 document.getElementById("temp").innerText = max + " / " + min;
}

サンプルJavaScript2

cityの文字列編集をしています。
文字列の先頭から、"-"までを表示するようにしています。
せっかくなので、dayを取得しながらも、"本日の天気"にしてみました。

ページトップへ

サンプルスタイルシート
* {
   margin: 0px;
   padding: 0px;
   border: 0px;
}
body {
   width: 640px;
   height: 960px;
   background-color: white;
}
#weather {
   margin: 232px 0px;
   text-align: center;
}
p {
   font-size: 36px;
   color: black;
   text-shadow: 1px 1px 1px white;
}
#city {
   font-size: 72px;
}
#image {
   width: 150px;
}

サンプルスタイルシート2

では、スタイルシート(style.css)を紹介します。

今回は、すべての表示を中央寄せするため、#weatherに中央寄せの指定をしています。

文字の基本サイズを36ピクセルにし、地域の表示を72ピクセルにしています。
天気画像も、幅150ピクセルにしています。

ページトップへ

サンプル表示

今回は、簡単な整形ですので、とてもシンプルで面白くない表示になりました。




今回のサンプルファイルのダウンロードは、こちらからどうぞーー>ダウンロード

ページトップへ

2012/05/01