Widget Example‎ > ‎

Weather Widget


GPSの座標をつかった簡単な天気予報アプリを作成します。

World Weather OnlineのDeveloper Keyの発行

無料で使用可能な天気予報API としてWorld Weather OnlineのAPIがあります。下記URLよりKeyを発行します。


次にJSON用のFeedを生成するためのURLをGenerateします。





http://www.worldweatheronline.com/feed/weather.ashx?q=0.00,0.00&format=json&num_of_days=2&key=取得したキー

新規プロジェクトの作成

Eclipseのメニューから[New]-[Project]を選択し、[New Project]ダイアログボックスで、"Droidget Wizard"-"project"を選択する。

GPSを使用したWidgetを開発するには、FeatureでGPSの設定をおこない、AccessでWeb APIに接続する際に使用するURIを指定します。

World Weather OnlineのWeb APIを使用するには、

http://worldweatheronline.com/

にアクセス許可をおろす必要があります。

まず、GPSの使用を可能にするために、Featureの右手の[Add]ボタンを選択します。



次に、Access設定をおこないます。Accessの右手にある[Add]ボタンを選択します。






config.xml
<?xml version="1.0" encoding="UTF-8"?>
<widget id="WeatherSample_1279509637280" version="1.0" width="400" height="200">
    <content src="index.html" type="text/html"/>
    <name>WeatherSample</name>
    <description>The sample of Weather</description>
    <author url="http://www.gclue.jp">GClue</author>
    <icon src="icon.png"/>
    <license></license>
    <feature name="http://bondi.omtp.org/api/geolocation" />
    <access uri="http://worldweatheronline.com" subdomains="true" />
</widget>

JavaScriptファイルの作成
src/jsフォルダを作成し、script.jsを新規で作成します。

src/js/script.js
// call init
function init()
  bondi.geolocation.getCurrentPosition(onPositionSuccessonPositionError{timeout:40000});
}

// this function will handle each position updates
function onPositionSuccess(position{
  lat position.coords.latitude;
  lon position.coords.longitude;
  var url "http://www.worldweatheronline.com/feed/weather.ashx?q="+lat+","+lon+"&format=json&num_of_days=5&key=取得したキー";

  json(resultJsonurl);
}

// this function will handle each error in position updates
function onPositionError(error{
  document.getElementById("divMsg").innerHTML "Error";
}

 
// callback of JSON
function resultJson(json){
  
  var resultHtml "<table>";
  var resultDayHtml "";
  var resultIconHtml "";
  var resultHighHtml "";
  var resultMinHtml "";
  
   for(var 0json.data.weather.lengthi++){
     alert("day="+json.data.weather[i].date);
     resultDayHtml   += "<td><font color=white>" json.data.weather[i].date "</td>";
     resultIconHtml   += "<td><img src=" json.data.weather[i].weatherIconUrl[0].value " height=70></td>";
     resultHighHtml   += "<td><font color=red><center>" json.data.weather[i].tempMaxC "</center></font></td>";
     resultMinHtml   += "<td><font color=blue><center>" json.data.weather[i].tempMinC "</center></font></td>";
   }
   resultHtml += "<tr>" resultDayHtml "</tr>";
   resultHtml += "<tr>" resultIconHtml "</tr>";
   resultHtml += "<tr>" resultHighHtml "</tr>";
   resultHtml += "<tr>" resultMinHtml "</tr></table>";
   
   document.getElementById("divMsg").innerHTML resultHtml;
}
 
// JSON
function json(callbackurl){
     
  var http_connect new XMLHttpRequest();
  http_connect.open("GET"urltrue);

  http_connect.onreadystatechange function({
    
    if (http_connect.readyState == 4{
      if(http_connect.status == 200){    
        callback(eval("("+http_connect.responseText+")"));
      }else{
        alert("Can't connect");
      }
    }
  }
  http_connect.send();
}

index.htmlファイルの編集


index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <title></title>
  <script type="text/javascript" src="js/script.js"></script>
</head>
<body onload="init()">
  <div id="divMsg"></div>
</body>
</html>

パッケージング

次に、パッケージングをおこないます。Eclipseの[Droidget]-[Packaging]を選択します。

USB経由での転送

USBで開発機と実機を接続し、Eclipseの[Droidget]-[Packaging Install]を選択します。

Web経由での転送

完成したSlideshowSample.wgtをWeb経由で実機に転送するためには、download用のhtmlファイルを作成します。

Download.html
<html>
<head>
    <title>Download</title>
</head>
<body>
    <a href="droidget://www.example.com/WeatherSample.wgt">WeatherSample</a><br>
</body>
</html>


実行結果



※ 本チュートリアルで使用している画面は、KDDI/auのIS01の待ち受け画面を使用しています。
Comments