次はこのゲームを思い付いたきっかけである、天気情報サイト「wttr.in」から情報を取得し、それをゲーム内容に反映させる。
これがいろいろと大変だった。
wttr.inでは、どこの天気を取得するかをURLのパラメータで指定できる。
まず試したのはエリアコードと呼ばれるもの。これは数値で指定したらそのエリアコードに合致する地点の天気予報を取得できる。
例えば、https://wttr.in/628とすれば、東京都板橋区の天気が取得できる。もちろん日本だけでなく、世界中の天気予報を取得できる。
これなら、乱数でエリアコードを発生させ、いろんな国の天気を取得できる!と思っていたのだが…
まず、このエリアコード、番号がどの地点の天気予報なのか一覧表がない。何かを元にしているのだろうけど、参考サイトを見ても載っていない…
そして、1から100,000以上のコードがありそう。で、連番じゃない。
存在しないエリアコードを指定すると、毎回、ベトナムの天気が返ってくる。これだとほとんどベトナムの天気専用ゲームになってしまうww
しらみつぶしにエリアコードを調べて、存在する地点だけのデータベースを作ろうとやってみたが、スピードも遅いし、途中でアクセスが不安定になったりするので断念した。
次に目を付けたのは、空港を表す「空港コード」を使って指定する方法。空港コードには、IATAによるラテン文字3文字のコードと、ICAOによる英数4文字のコードがある。IATAのほうは、飛行機に乗る方なら一度は目にする、羽田ならHND、成田ならNRTなどのコードになる。
いざ使ってみる。https://wttr.in/HND…インドの天気が出てくるよ…
githubのwttr.inのサイトを見て、不具合情報を検索すると、IATAのコード使えない!っていう情報があり、ICAOのコードを使えよ!という返信があった。
これも一覧がWikiなどにあるので、あらかじめデータベースに一覧を作ってそのうちの1つを抽出して使おうと考えたのだが…
なんか微妙に違うところの天気になったり、相変わらずのベトナムの天気になってしまう。
ということで、次の手は首都名。もともと訪問国の国旗グラフィックを表示しようと考えていたので、首都名ならいいでしょ。とまずは東京を調べる。
なんか、妙に気温が高い。場所の情報を見る。Shikinejima、ん?どこ?
ということで、ここ!式根島!(ゴー☆ジャス風にww)
首都名も無理。Japanはどうか。Omama。どこじゃ!大間々…群馬県かよ!(群馬県の方、すみません)
しょーがないので、国旗を表示する国の一覧を作って、全部wttr.inのURLを叩いて、総当たりでチェックすることに。
国旗の画像は、もう画像を見ない日はないというぐらいの有名どころ、「いらすとや」さんに国旗シリーズがあるのよ。
これを片っ端からダウンロードして、ファイル名をリスト化。こいつの国名を使ってアクセス。
出てきた緯度、経度をGoogleマップにコピー。表示された地点がよほど変じゃなければそのまま。ちょっとだめだと思ったらその国の地名などで表示を試みて、大丈夫な地名を見つける。これをリクエストクエリーのテキストとしてデータベースに格納。
この作業だけで、1週間掛かってしまった…でもおかげさまで確実に1国ごとの天気予報が取得できるようになった。
あ、今回も使用しているDBは、SQLiteで、HSP3からはsqlele(スクレレ)経由でアクセスしている。
ただ、初期データをいちいちSQLを書いて流し込むのはつらかったので、SQLiteにGUIでアクセスできるアプリを使って、CSVを流し込んだ。