【WebAPI】OpenWeatherMapAPIのweatherとfindの違いについて

   


OpenWeatherMapAPIの現在の気象状況を取得する方法についての補足です。

現在の気象状況を「都市名」で取得する方法として、weatherによる1都市の情報取得とfindによる複数都市の情報取得を試してみました。

都市一覧(city.list.json)ファイルについて

都市一覧(city.list.json)ファイルは、都市コードや都市名、国名コード、緯経度等が載っているファイル。
※ファイルはこのページでダウンロード可能

今回、都市名「London」で検索を試してみようと思い、
まず、city.list.jsonファイル より、都市名が「London」を含む都市を調べてみた。
すると、該当数は全部で27件もあった。

都市名に「London」を含む都市を抜粋(全27件)
			{"_id":2643743,"name":"London","country":"GB","coord":{"lon":-0.12574,"lat":51.50853}}
			{"_id":2648110,"name":"Greater London","country":"GB","coord":{"lon":-0.16667,"lat":51.5}}
			{"_id":1006984,"name":"East London","country":"ZA","coord":{"lon":27.911619,"lat":-33.015289}}
			{"_id":2643734,"name":"Londonderry County Borough","country":"GB","coord":{"lon":-7.30917,"lat":54.997211}}
			{"_id":2643744,"name":"City of London","country":"GB","coord":{"lon":-0.08901,"lat":51.51334}}
			{"_id":5056033,"name":"London","country":"US","coord":{"lon":-95.234978,"lat":40.445}}
			{"_id":6058560,"name":"London","country":"CA","coord":{"lon":-81.23304,"lat":42.983391}}
			{"_id":4839420,"name":"New London County","country":"US","coord":{"lon":-72.066193,"lat":41.483429}}
			{"_id":7535661,"name":"London Borough of Harrow","country":"GB","coord":{"lon":-0.33333,"lat":51.566669}}
			{"_id":6058563,"name":"Londonderry","country":"CA","coord":{"lon":-63.598701,"lat":45.483452}}
			{"_id":3489741,"name":"Little London","country":"JM","coord":{"lon":-78.216408,"lat":18.248301}}
			{"_id":2643741,"name":"City of London","country":"GB","coord":{"lon":-0.09184,"lat":51.512791}}
			{"_id":4839416,"name":"New London","country":"US","coord":{"lon":-72.099518,"lat":41.355652}}
			{"_id":1644003,"name":"Glondong","country":"ID","coord":{"lon":111.891602,"lat":-6.7924}}
			{"_id":4030939,"name":"London Village","country":"KI","coord":{"lon":-157.475021,"lat":1.98487}}
			{"_id":4119617,"name":"London","country":"US","coord":{"lon":-93.25296,"lat":35.328972}}
			{"_id":4298960,"name":"London","country":"US","coord":{"lon":-84.08326,"lat":37.128979}}
			{"_id":4361094,"name":"Londontowne","country":"US","coord":{"lon":-76.549408,"lat":38.933449}}
			{"_id":4400423,"name":"New London","country":"US","coord":{"lon":-91.400978,"lat":39.58532}}
			{"_id":4517009,"name":"London","country":"US","coord":{"lon":-83.44825,"lat":39.886452}}
			{"_id":4868768,"name":"New London","country":"US","coord":{"lon":-91.399597,"lat":40.926979}}
			{"_id":5039111,"name":"New London","country":"US","coord":{"lon":-94.944183,"lat":45.301079}}
			{"_id":5088905,"name":"Londonderry","country":"US","coord":{"lon":-71.373947,"lat":42.865089}}
			{"_id":5090189,"name":"New London","country":"US","coord":{"lon":-71.985077,"lat":43.41396}}
			{"_id":5164352,"name":"New London","country":"US","coord":{"lon":-82.399887,"lat":41.085049}}
			{"_id":5264455,"name":"New London","country":"US","coord":{"lon":-88.73983,"lat":44.392761}}
			{"_id":5367815,"name":"London","country":"US","coord":{"lon":-119.443176,"lat":36.476059}}
		

Londonを含む都市がこんなにたくさんあるとは・・・

このうち、都市名が「London」と完全一致するものは7件。

			{"_id":2643743,"name":"London","country":"GB","coord":{"lon":-0.12574,"lat":51.50853}}
			{"_id":5056033,"name":"London","country":"US","coord":{"lon":-95.234978,"lat":40.445}}
			{"_id":6058560,"name":"London","country":"CA","coord":{"lon":-81.23304,"lat":42.983391}}
			{"_id":4119617,"name":"London","country":"US","coord":{"lon":-93.25296,"lat":35.328972}}
			{"_id":4298960,"name":"London","country":"US","coord":{"lon":-84.08326,"lat":37.128979}}
			{"_id":4517009,"name":"London","country":"US","coord":{"lon":-83.44825,"lat":39.886452}}
			{"_id":5367815,"name":"London","country":"US","coord":{"lon":-119.443176,"lat":36.476059}}
		

weatherで情報を取得する(都市名を使用)

それではweatherを使用して都市名が「London」の情報を取得してみる。

※weatherでは1件の情報しか取得できないと思うので、該当する27件のうちどの都市IDの情報が取得されるのかわからない。

都市名を完全一致か、部分一致かをtypeで指定できるので、それぞれ試す。

type省略(type=accurateと同様っぽい)
http://api.openweathermap.org/data/2.5/weather?q=London&mode=xml&&appid={APIKEY}

type=accurate(完全一致)
http://api.openweathermap.org/data/2.5/weather?q=London&type=accurate&mode=xml&&appid={APIKEY}

type=like(部分一致)
http://api.openweathermap.org/data/2.5/weather?q=London&type=like&mode=xml&&appid={APIKEY}

取得結果は以下のとおり。いずれも同じ結果だったので、一つのみ掲載した。
1件の情報が取得されており、「city id」をみると、「2643743」になっている。都市名が一致した情報の中で、都市一覧の一番上の情報を取ってくる仕様なのか? 偶然か?

取得結果
			<current>
			    <city id="2643743" name="London">
			        <coord lon="-0.13" lat="51.51">
			            <country>
			                GB
			            </country>
			            <sun rise="2016-07-26T04:16:47" set="2016-07-26T19:56:20">
			            </sun>
			        </coord>
			    </city>
			    <temperature value="294.55" min="292.15" max="297.04" unit="kelvin">
			        <humidity value="49" unit="%">
			            <pressure value="1020" unit="hPa">
			                <wind>
			                    <speed value="4.6" name="Gentle Breeze">
			                        <gusts>
			                            <direction value="240" code="WSW" name="West-southwest">
			                            </direction>
			                        </gusts>
			                    </speed>
			                </wind>
			                <clouds value="40" name="scattered clouds">
			                    <visibility value="10000">
			                        <precipitation mode="no">
			                            <weather number="802" value="scattered clouds" icon="03d">
			                                <lastupdate value="2016-07-26T14:45:33">
			                                </lastupdate>
			                            </weather>
			                        </precipitation>
			                    </visibility>
			                </clouds>
			            </pressure>
			        </humidity>
			    </temperature>
			</current>
		

weatherで情報を取得する(都市名と国名コードを使用)

念のため、都市名と国名コードの2つをキーにして取得してみる。

都市名が「London」で、国名コードが「US」を試す。
該当するのは以下の5件なので、その内のどれか1件が取得できるはず。

			{"_id":5056033,"name":"London","country":"US","coord":{"lon":-95.234978,"lat":40.445}}
			{"_id":4119617,"name":"London","country":"US","coord":{"lon":-93.25296,"lat":35.328972}}
			{"_id":4298960,"name":"London","country":"US","coord":{"lon":-84.08326,"lat":37.128979}}
			{"_id":4517009,"name":"London","country":"US","coord":{"lon":-83.44825,"lat":39.886452}}
			{"_id":5367815,"name":"London","country":"US","coord":{"lon":-119.443176,"lat":36.476059}}
		

type省略(type=accurateと同様っぽい)
http://api.openweathermap.org/data/2.5/weather?q=London,US&mode=xml&&appid={APIKEY}

type=accurate(完全一致)
http://api.openweathermap.org/data/2.5/weather?q=London,US&type=accurate&mode=xml&&appid={APIKEY}

type=like(部分一致)
http://api.openweathermap.org/data/2.5/weather?q=London,US&type=like&mode=xml&&appid={APIKEY}

取得結果は以下のとおり。いずれも同じ結果だったので、一つのみ掲載した。
1件の情報が取得できており、「city id」をみると、「4517009」になっている。

都市名が一致した情報の中で、一番上の情報というわけではなさそう。

取得結果
			<current>
			    <city id="4517009" name="London">
			        <coord lon="-83.45" lat="39.89">
			            <country>
			                US
			            </country>
			            <sun rise="2016-07-26T10:28:07" set="2016-07-27T00:51:58">
			            </sun>
			        </coord>
			    </city>
			    <temperature value="301.61" min="299.15" max="303.71" unit="kelvin">
			        <humidity value="65" unit="%">
			            <pressure value="1017" unit="hPa">
			                <wind>
			                    <speed value="2.6" name="Light breeze">
			                        <gusts>
			                            <direction value="342.5" code="NNW" name="North-northwest">
			                            </direction>
			                        </gusts>
			                    </speed>
			                </wind>
			                <clouds value="1" name="clear sky">
			                    <visibility value="16093">
			                        <precipitation mode="no">
			                            <weather number="800" value="clear sky" icon="01d">
			                                <lastupdate value="2016-07-26T16:55:07">
			                                </lastupdate>
			                            </weather>
			                        </precipitation>
			                    </visibility>
			                </clouds>
			            </pressure>
			        </humidity>
			    </temperature>
			</current>
		

findで情報を取得する

続いてfindを試してみる。

type省略(type=accurateと同様っぽい)
http://api.openweathermap.org/data/2.5/find?q=London&mode=xml&&appid={APIKEY}

type=accurate(完全一致)
http://api.openweathermap.org/data/2.5/find?q=London&type=accurate&mode=xml&&appid={APIKEY}

type=like(部分一致)
http://api.openweathermap.org/data/2.5/find?q=London&type=like&mode=xml&&appid={APIKEY}

取得結果は以下のとおり。

完全一致(type=accurate)の場合は、7件取得できると予想していたが、結果は2件しか取得できていなかった。(countタグが2)

部分一致(type=like)の場合は、27件すべて取得できると予想していたのが、結果は4件しか取得できていなかった。(countタグが4)

なぜ・・??(T_T)

type省略、type=accurate(完全一致)での取得結果
			<cities>
			    <calctime>
			        0.0687
			    </calctime>
			    <count>
			        2
			    </count>
			    <mode>
			        name
			    </mode>
			    <list>
			        <item>
			            <city id="2643743" name="London">
			                <coord lon="-0.12574" lat="51.50853">
			                    <country>
			                        GB
			                    </country>
			                    <sun rise="2016-07-26T04:16:59" set="2016-07-26T19:57:05">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="294.45" min="292.15" max="296.48" unit="kelvin">
			                <humidity value="49" unit="%">
			                    <pressure value="1020" unit="hPa">
			                        <wind>
			                            <speed value="5.1" name="Gentle Breeze">
			                                <direction value="210" code="SSW" name="South-southwest">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="20" name="few clouds">
			                            <precipitation mode="no">
			                                <weather number="801" value="few clouds" icon="02d">
			                                    <lastupdate value="2016-07-26T14:53:32" unix="1469544812">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			        <item>
			            <city id="6058560" name="London">
			                <coord lon="-81.23304" lat="42.983391">
			                    <country>
			                        CA
			                    </country>
			                    <sun rise="2016-07-26T10:10:56" set="2016-07-27T00:51:59">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="298.44" min="297.15" max="299.82" unit="kelvin">
			                <humidity value="64" unit="%">
			                    <pressure value="1018" unit="hPa">
			                        <wind>
			                            <speed value="2.6" name="Light breeze">
			                                <direction value="350" code="" name="">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="20" name="few clouds">
			                            <precipitation mode="no">
			                                <weather number="801" value="few clouds" icon="02d">
			                                    <lastupdate value="2016-07-26T14:53:36" unix="1469544816">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			    </list>
			</cities>
		
type=like(部分一致)での取得結果
			<cities>
			    <calctime>
			        0.0123
			    </calctime>
			    <count>
			        4
			    </count>
			    <mode>
			        name
			    </mode>
			    <list>
			        <item>
			            <city id="2643734" name="Londonderry County Borough">
			                <coord lon="-7.30917" lat="54.997211">
			                    <country>
			                        GB
			                    </country>
			                    <sun rise="2016-07-26T04:29:35" set="2016-07-26T20:41:57">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="286.734" min="286.734" max="286.734" unit="kelvin">
			                <humidity value="100" unit="%">
			                    <pressure value="1021.32" unit="hPa">
			                        <wind>
			                            <speed value="1.33" name="Calm">
			                                <direction value="265.502" code="W" name="West">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="100" name="overcast clouds">
			                            <precipitation value="1.72" mode="rain" unit="3h">
			                                <weather number="500" value="light rain" icon="10d">
			                                    <lastupdate value="2016-07-26T14:34:27" unix="1469543667">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			        <item>
			            <city id="2643743" name="London">
			                <coord lon="-0.12574" lat="51.50853">
			                    <country>
			                        GB
			                    </country>
			                    <sun rise="2016-07-26T04:16:59" set="2016-07-26T19:57:05">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="294.45" min="292.15" max="296.48" unit="kelvin">
			                <humidity value="49" unit="%">
			                    <pressure value="1020" unit="hPa">
			                        <wind>
			                            <speed value="5.1" name="Gentle Breeze">
			                                <direction value="210" code="SSW" name="South-southwest">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="20" name="few clouds">
			                            <precipitation mode="no">
			                                <weather number="801" value="few clouds" icon="02d">
			                                    <lastupdate value="2016-07-26T14:53:32" unix="1469544812">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			        <item>
			            <city id="7535661" name="London Borough of Harrow">
			                <coord lon="-0.33333" lat="51.566669">
			                    <country>
			                        GB
			                    </country>
			                    <sun rise="2016-07-26T04:17:34" set="2016-07-26T19:58:09">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="294.48" min="292.15" max="296.48" unit="kelvin">
			                <humidity value="52" unit="%">
			                    <pressure value="1020" unit="hPa">
			                        <wind>
			                            <speed value="4.1" name="Gentle Breeze">
			                                <direction value="260" code="W" name="West">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="75" name="broken clouds">
			                            <precipitation mode="no">
			                                <weather number="803" value="broken clouds" icon="04d">
			                                    <lastupdate value="2016-07-26T14:45:33" unix="1469544333">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			        <item>
			            <city id="6058560" name="London">
			                <coord lon="-81.23304" lat="42.983391">
			                    <country>
			                        CA
			                    </country>
			                    <sun rise="2016-07-26T10:10:56" set="2016-07-27T00:51:59">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="298.44" min="297.15" max="299.82" unit="kelvin">
			                <humidity value="64" unit="%">
			                    <pressure value="1018" unit="hPa">
			                        <wind>
			                            <speed value="2.6" name="Light breeze">
			                                <direction value="350" code="" name="">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="20" name="few clouds">
			                            <precipitation mode="no">
			                                <weather number="801" value="few clouds" icon="02d">
			                                    <lastupdate value="2016-07-26T14:53:36" unix="1469544816">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			    </list>
			</cities>
		

findで情報を取得する(都市名と国名コードを使用)

念のためfindでも同様に、都市名と国名コードの2つをキーにして取得してみた。

都市名が「London」で、国名コードが「US」を試す。
該当するのは以下の5件なので、そのすべての情報が取得できるはず。

			{"_id":5056033,"name":"London","country":"US","coord":{"lon":-95.234978,"lat":40.445}}
			{"_id":4119617,"name":"London","country":"US","coord":{"lon":-93.25296,"lat":35.328972}}
			{"_id":4298960,"name":"London","country":"US","coord":{"lon":-84.08326,"lat":37.128979}}
			{"_id":4517009,"name":"London","country":"US","coord":{"lon":-83.44825,"lat":39.886452}}
			{"_id":5367815,"name":"London","country":"US","coord":{"lon":-119.443176,"lat":36.476059}}
		

type省略(type=accurateと同様っぽい)
http://api.openweathermap.org/data/2.5/find?q=London,US&mode=xml&&appid={APIKEY}

type=accurate(完全一致)
http://api.openweathermap.org/data/2.5/find?q=London,US&type=accurate&mode=xml&&appid={APIKEY}

type=like(部分一致)
http://api.openweathermap.org/data/2.5/find?q=London,US&type=like&mode=xml&&appid={APIKEY}

取得結果は以下のとおり。いずれも同じ結果だったので、一つのみ掲載した。

5件すべて取得できると予想していたが、結果は1件しか取得できていなかった。(countタグが1)

なぜ・・??(T_T)

取得結果
			<cities>
			    <calctime>
			        0.0669
			    </calctime>
			    <count>
			        1
			    </count>
			    <mode>
			        name
			    </mode>
			    <list>
			        <item>
			            <city id="4298960" name="London">
			                <coord lon="-84.0838" lat="37.1272">
			                    <country>
			                        United States of America
			                    </country>
			                    <sun rise="2016-07-27T10:38:12" set="2016-07-28T00:47:29">
			                    </sun>
			                </coord>
			            </city>
			            <temperature value="296.79" min="296.15" max="297.15" unit="kelvin">
			                <humidity value="100" unit="%">
			                    <pressure value="1017" unit="hPa">
			                        <wind>
			                            <speed value="0.71" name="Calm">
			                                <direction value="263.509" code="W" name="West">
			                                </direction>
			                            </speed>
			                        </wind>
			                        <clouds value="1" name="clear sky">
			                            <precipitation mode="no">
			                                <weather number="800" value="Sky is Clear" icon="01n">
			                                    <lastupdate value="2016-07-27T06:52:04" unix="1469602324">
			                                    </lastupdate>
			                                </weather>
			                            </precipitation>
			                        </clouds>
			                    </pressure>
			                </humidity>
			            </temperature>
			        </item>
			    </list>
			</cities>
		

まとめ

weatherに関して
 該当する都市が複数ある場合でも都市名(または都市名+国名コード)で取得はできるが、どの情報を取得するかわからないので、なるべく都市コードを使用したほうがよさそう。

findに関して
 都市名(または都市名+国名コード)で検索しても、該当する情報すべてが取得できるわけではなさそう。

 - OpenWeatherMap , , , , ,