[Unity]気象庁の天気予報をWebAPIで取得してJsonUtilityでパースするサンプル

Unity

はじめに

Unityの(自分の)リハビリがてら、今回はUnityでの通信処理の実装を備忘録として残します。

環境

  • Unity 20201.1.24f1

どのように実装するのか?

基本的にはUnityWebRequestというクラスを利用して通信処理を実装します。

下記のUnity Script Referenceが一番参考になります。

Unity - Scripting API: Networking.UnityWebRequest.Get

サンプル

今回はUnityWebRequestを利用して気象庁のWebAPIからお天気データを取得して、特定のクラスにパースするという処理のサンプルです。

JsonUtilityの使い方は下記の記事を見てください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class SampleSceneController : MonoBehaviour
{
    [SerializeField] private Button button;

    // Start is called before the first frame update
    void Start()
    {
        button?.onClick.AddListener(OnClickedButton);
    }

    private void OnClickedButton()
    {
        StartCoroutine(GetRequest("https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json"));
    }

    private IEnumerator GetRequest(string uri)
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
        {
            // Request and wait for the desired page.
            yield return webRequest.SendWebRequest();

            if (webRequest.result != UnityWebRequest.Result.Success)
            {
                // Error.
                switch (webRequest.result)
                {
                    case UnityWebRequest.Result.ConnectionError:
                    case UnityWebRequest.Result.DataProcessingError:
                        Debug.LogError("Error: " + webRequest.error);
                        break;
                    case UnityWebRequest.Result.ProtocolError:
                        Debug.LogError("HTTP Error: " + webRequest.error);
                        break;
                    default:
                        // ここにはこない.
                        break;
                }
                yield break;
            }

            var response = JsonUtility.FromJson<Response>(webRequest.downloadHandler.text);
            Debug.Log("データ配信元: " + response.publishingOffice);
            Debug.Log("報告日時: " + response.reportDatetime);
            Debug.Log("対象の地域: " + response.targetArea);
            Debug.Log("ヘッドライン: " + response.headlineText);
            Debug.Log("詳細: " + response.text);
            yield return null;
        }
    }
}

[System.Serializable]
public class Response
{
    public string publishingOffice;
    public string reportDatetime;
    public string targetArea;
    public string headlineText;
    public string text;
}

結果

無事成功しました!

さいごに

コルーチンを使ったサンプルだけど、UniTaskを使ってもできそうな気がする。

おすすめ参考書

参考

気象庁の天気予報JSONファイルをWebAPI的に利用したサンプルアプリ | あんこエデュケーション
気象庁のWebサイトがリニューアルされ、天気予報情報がJSON形式で取得できるようになりました。こちらのデータをWebAPI的に取得して表示するサンプルアプリを解説付きで公開します。

コメント

タイトルとURLをコピーしました