困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

Unityの話~天気予報情報を取得してみた~

ポケモンGOについてのリサーチをしていた時、天気の状態によって能力が変化するというシステムが有る事を知り、

どのようにして、天気の情報とやらを取得しているのか気になり調べてみた。

※注意※
ポケモンGOが、以下のシステムを使っているという事を検証したわけではありませんので、その辺りの勘違い無きようよろしくお願いいたします。

ググってみた所、天気予報情報を取得できるサービスはいくつかあるようだった。

tonari-it.com

qiita.com

上記を参考にさせて頂いた。

ひとまず、簡単に出来そうな、livedoor天気のAPIを試してみることにした

weather.livedoor.com

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using UnityEngine;

public class TenkiAccess : MonoBehaviour {

    // JSONUtilityでデータを受け取る為のクラス群
    [Serializable]
    class TenkiClass {
        public string publicTime;
        public LocationClass location;
        public ForecastsClass[] forecasts;
        public PinpointLocationsClass[] pinpointLocations;
    }

    [Serializable]
    class PinpointLocationsClass {
        public string link;
        public string name;
    }

    [Serializable]
    class LocationClass {
        public string city;
        public string area;
        public string prefecture;
    }

    [Serializable]
    class ForecastsClass {
        public string dateLabel;
        public string telop;
        public string date;
        public TemperatureClass temperature;
    }

    [Serializable]
    class TemperatureClass {
        public TemperatureNumClass min;
        public TemperatureNumClass max;
    }

    [Serializable]
    class TemperatureNumClass {
        public float celsius;
        public float fahrenheit;
    }

    // Use this for initialization
    void Start () {
        StartCoroutine(CoStart());
    }


    IEnumerator CoStart() {
        // CITY番号130010が東京の情報らしい
        // これでとりあえずアクセス
        WWW www = new WWW("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010");
        while (www.isDone == false) {
            yield return null;
        }

        // 情報を受け取ると、諸々データが入ってくる
        // 今日の気温と明後日の気温と天気は、情報が無いのでNULLになっているくさい
        TenkiClass obj = JsonUtility.FromJson<TenkiClass>(www.text);

        string output = string.Format("{0}の天気は{1}\n", obj.location.city, obj.forecasts[0].telop);
        Debug.Log(output);
    }
}

これをすると、「東京の天気は晴れ」といった具合に情報が取れる。

どうやら、このような情報系のAPIは色々用意されているようなので、また今度時間がある時にでも調べてみようと思う。

ちなみに、JsonUtilityの使い方が知りたければ

qiita.com

ここを参考に試してみるといい。
Jsonのキー名のクラスを用意して、そのクラス型で受け取ればいいだけなので、クラスの用意がめんどくさいくらいで、簡単に扱えるはずだ。