>> デスクトップウィジェット
>> 携帯ウィジェット・その他
>> 機能分類
アップフロンティア株式会社のクロサキです。社内では主にウィジェットに表示させるデータを提供するために必要なWebアプリの作成及び運用を担当しています。
前回までのサンデープログラミングでは、Adobe AIRやYahoo! ウィジェットなど、どのプラットフォームでウィジェットを作るかをご紹介してきました。
しかし、実際にウィジェットを作ろうと思う時は、「AIRでウィジェットを作りたい!」というよりも、「twitterのタイムラインを表示させるブログパーツが欲しい!」とか、「iCalやGoogleカレンダーと連携するスケジューラーって無いかな?」のように、機能や表示させるコンテンツのことを考えていると思います。
そこでどのコンテンツを使うかが問題になりますが、Web APIと呼ばれる機能を利用して、他のサイトやコンテンツプロバイダーからデータを提供してもらうのが一番手っ取り早いと筆者は考えます。現在では、たくさんのデータがWeb APIとして、ユーザーに提供されています。
これを利用しないのはとてももったいない!
弊社も財団法人日本気象協会と共同で「天気予報API」というWeb APIを提供しています。
今回はこの天気予報APIでのコンテンツの実装方法を紹介したいと思います。
1. Web APIってどうよ?
天気予報APIの概要
天気予報APIは、天気予報や様々な指数情報をウィジェットやブログパーツ、Flashなどから利用するため、データをXMLで提供しているサービスです。データは47都道府県単位もしくは、全国142地域別単位で提供されていますので、ある特定の地域の情報だけを取得することもできますし、全国の気象データを県別に表示させることも可能です。
「天気予報」と名乗ってはいますが、このAPIの特徴は天気予報に加えて,ユニークかつ多種類の指数情報を提供していることにあります(詳しくはサイトをご参照ください)また,この後いくつかの指数についてご紹介したいと思います)。
みなさんもテレビの天気予報で、翌日の洗濯指数や花粉の飛散予測を紹介されているのを見たことがあると思います。そんな日々の生活に身近な気象情報を季節に合わせて提供しています。
通常は法人や各種団体を対象にデータの提供を行っているため、個人でAPIを利用することはできないのですが、今年の6月末から活用アプリコンテストを開催しており、みなさんもサイトからエントリー登録していただくと、期間限定でAPIを利用することができます。
2 天気予報APIの実装例
実装サンプルを紹介
では、天気予報APIを利用したサンプルプログラムを例に利用方法を紹介しましょう。
下図を見てください。
こちらは、明日の天気と洗濯指数のデータXMLをJavaScriptを使って表示しているプログラムです。
標準では東京のデータを表示していますが、プルダウンから都市名を選択して、Click!ボタンをクリックすると、全国10都市のデータを表示させることができます。
サンプルプログラムはページが呼び出されると、setting.jsのloadXml関数に設定されている情報をもとに天気予報と洗濯指数のデータを問い合わせます。データは以下のルールで取得する事が可能です。
http://w002.tenkiapi.jp/(ユーザアカウント)/(情報名)/?p1=(地域番号)(天気予報のみ、&p2=(予報日))
(例)東京の天気予報のXMLのアドレス
http://w002.tenkiapi.jp/9402cbe25a2e225ff55c9ed2cc784b80c22f8b39/daily/?p1=4410&p2=02
問い合わせたデータは、同じくsetting.jsのcallback関数でデータを読み込みます。
すると以下のようなXMLファイルを取得できます。
<forecast areaCode="4410" date="2009-08-21" time="17:00:00"> <daily dateName="tomorrow" date="2009-08-22"> <wDescription telop="200"><![CDATA[曇]]></wDescription> <temp min="26" max="32" /> <probPrecip time="00-06" precipCode="0" prob="10" /> <probPrecip time="06-12" precipCode="0" prob="10" /> <probPrecip time="12-18" precipCode="0" prob="30" /> <probPrecip time="18-24" precipCode="0" prob="30" /> </daily> </forecast>このファイルのポイントとなる部分は主に以下の部分です。
情報によってファイルの構造に違いはありますが、以下をおさえておけば、必要な情報の取得ができるようになると思います。
<forecast areaCode="地域番号(4桁の数字)" date="2009-08-21" time="17:00:00"> <daily dateName="いつの予報か(今日,明日,明後日)" date="予報日"> <wDescription telop="天候を表す番号(3桁100〜400番台の数字)"><![CDATA[天候]]></wDescription> <temp min="予想最低気温(表示がない場合有)" max="予想最高気温(表示がない場合有)" /> <probPrecip time="00-06" precipCode="0" prob="0時から6時の降水確率(0〜100)" /> <probPrecip time="06-12" precipCode="0" prob="6時から12時の降水確率(0〜100)" /> <probPrecip time="12-18" precipCode="0" prob="12時から18時の降水確率(0〜100)" /> <probPrecip time="18-24" precipCode="0" prob="18時から24時の降水確率(0〜100)" /> </daily> </forecast>あとはこのファイルを解析して必要なデータを取り出し、データの整形を行って、ページに書き出します。今回はファイルの解析用にKawa.netさんのXML.ObjTreeライブラリを利用しています。利用方法は省略しますが、JavaScriptでXMLの操作を行う際には非常に便利なライブラリです。
function loadXml(code){
var userid = "9402cbe25a2e225ff55c9ed2cc784b80c22f8b39"; // 事務局から配布されるユーザーID(APIキー)に差し替えてください
var areaid = code; // 4桁の地域番号
var domain = "http://w002.tenkiapi.jp/";
var urls = new Array();
urls[0] = domain + userid + "/daily/?p1=" + areaid + "&p2=02";
urls[1] = domain + userid + "/wash/?p1=" + areaid;
loadCrossOver("callback", urls);
}
JavaScriptでのXML読み込みTips
ご存知の方も多いとは思いますが、JavaScriptはセキュリティ仕様上、呼び出されたドメインとは別のドメインにあるXMLファイルからデータを読み込むことはできません。
このため、今回はfiregobyさんで公開されているCrossOverライブラリを利用させて頂きました。
CrossOverライブラリはFlashのデータ保持領域にXMLのデータを取り込んで、JavaScriptにデータを渡すことができます。読み込むのは天気情報と洗濯情報の2つのXMLなのですが、提供されているライブラリでは1度に1つのデータ保持領域を作成するため、1つのXMLしか読み込むことができませんでした。そこで、CrossOver.jsを改良して、1度に複数のデータ保持領域を作成し、それぞれJavaScriptにデータを渡すようにしました。
function loadCrossOver( callback, url ){
var cnt = url.length;
// urlの個数分、データ領域をページに書き出す。
for (i = 0; i < cnt; i++) {
document["crossover" + i].load( callback, url[i] );
}
}
3 コンテストを開催しています。
以上のように、天気予報APIではさまざまな指数や天気予報を提供していることを紹介してきました。前述の通り、現在天気予報APIのサイトにて天気予報API活用アプリコンテストを実施中です。コンテスト期間内については、エントリー登録していただくとAPIのデータを利用することができます。
ぜひコンテストにエントリー登録して多くの天気予報や指数情報に触れていただき、これらの情報を活用したアプリを作ってみてください。みなさんのアイディアにあふれたアプリをお待ちしています。
-
第2回 ウィジェットで独立したプログラマーのこだわり開発論
-
第1回 「フネログ」をちょっとだけ解体?!
-
第18回 mixi椙原誠氏インタビュー
mixiアプリが誘発する次世代のコミュニケーション
-
第17回 NTTドコモ山田和宏氏・加納出亜氏インタビュー
ボタンひとつで展開される新世界 docomo「iウィジェット」
-
第16回 リコー「quanp drop」
ウィジェット制作レポート
-
第15回 アスクル「ASKUL DESKTOP2」
ウィジェット制作レポート
-
第14回 ソニー熨斗谷泰司氏・岡本直也氏・小板秀昭氏インタビュー
テレビをさまざまな情報の窓口に“BRAVIA”「アプリキャスト」
-
第13回 ソフトバンクモバイル村山貴一郎氏・三木静思氏インタビュー
携帯にオープンなプラットフォームを 「モバイルウィジェット」
-
第12回 アスクル「ASKUL DESKTOP」
ウィジェット制作レポート
-
第11回 テレビ東京「てれとらんど」
ブログパーツ提供サイト制作レポート
-
第10回 KDDI 松原理氏・今川俊彦氏インタビュー
携帯電話の可能性を広げるau one ガジェット
-
第9回 ヤフー株式会社 菊地裕信氏インタビュー
Yahoo!ウィジェットがもたらすエコシステム
-
第8回 マイスペース株式会社 大蘿淳司氏・オジー井上氏インタビュー
MySpaceに広がる巨大なチャンスのプラットフォーム
-
第7回 アドビ システムズ株式会社 小島英揮氏・太田禎一氏インタビュー
その2 Adobe AIRで手軽にリッチなデスクトップ・アプリケーションを
-
第6回 アドビ システムズ株式会社 小島英揮氏・太田禎一氏インタビュー
その1 Adobe AIRで手軽にリッチなデスクトップ・アプリケーションを
-
第5回 野村不動産 「プラウドウォッチ」制作レポート
ウィジェット制作レポート
-
第4回 Opera 市川恵貴氏・Andreas Bovens氏インタビュー
その2 技術としてのOperaウィジェット
-
第3回 Opera 市川恵貴氏・Andreas Bovens氏インタビュー
その1 誰にでも「開かれた」Operaウィジェット
-
第2回 Google 高広伯彦氏・花村祐哉氏・安田政弘氏インタビュー
Googleガジェット広告が生み出す新しいビジネス
-
第1回 マイクロソフト 藤沢聡明氏インタビュー
Windows Vistaが切り拓くガジェットの未来
- ・ソフトバンクモバイルウィジェットコンテスト結果発表!
- ・気になるかわいい情報端末 chumbyウィジェット特集!
- ・次世代マーケティングの大本命! iPhoneアプリ特集!
- ・できるビジネスマンのための! 作業効率化ウィジェット!
- ・いつでもいっしょ!キャラクターウィジェット!
- ・今すぐはじめよう!ブログパーツでエコ特集
- ・ mixiアプリが誘発する次世代のコミュニケーション
- ・ ボタンひとつで展開される新世界 docomo「iウィジェット」
- ・ リコー「quanp drop」
- ・ アスクル「ASKUL DESKTOP2」
- ・ テレビをさまざまな情報の窓口に“BRAVIA”「アプリキャスト」
- ・ 携帯にオープンなプラットフォームを「モバイルウィジェット」
- ・ アスクル「ASKUL DESKTOP」
- ・ テレビ東京「てれとらんど」
- ・ 携帯電話の可能性を広げるau one ガジェット
- ・ Yahoo!ウィジェットがもたらすエコシステム
- ・MySpaceのMDPで広がる巨大なチャンス
- ・(その2)Adobe AIRで手軽にリッチなデスクトップ・アプリケーションを
- ・(その1)Adobe AIRで手軽にリッチなデスクトップ・アプリケーションを
- ・野村不動産「プラウドウォッチ」
- ・技術としてのOperaウィジェット
- ・誰にでも「開かれた」Operaウィジェット
- ・Googleガジェット広告が生み出す新しいビジネス
- ・Windows Vistaが切り拓くガジェットの未来
■ はじめての方へ
■ 開発者の方へ
■ 広告掲載お申し込み




