툴/유니티

우주전파센터 OPEN API 유니티에서 활용하기

스튜디오 오버그래픽스 2023. 11. 24. 17:39

우주전파센터 OPEN API

https://spaceweather.rra.go.kr/openpotal/datasetInfo/openApiList.do

 

우주전파환경 빅데이터 플랫폼

전체 9건(1/1페이지) 10개씩 보기 20개씩 보기 30개씩 보기 40개씩 보기 50개씩 보기 100개씩 보기 JSON 3일간의 우주전파환경 상황을 실시간으로 제공합니다. 등록일 2022-04-26 수정일 2022-05-04 JSON 예보

spaceweather.rra.go.kr

 

 

ACE 관측 데이터

(ACE 위성에서 관측하는 태양풍의 속도, 밀도, 온도 정보를 제공)

http://spaceweather.rra.go.kr/api/ace/sw 

 

 

지구자기장 지수

(지구자기장 데이터이며 미국에서 측정한 Kp 지수 값과 국내에서 측정한 Kk지수 값을 제공)

http://spaceweather.rra.go.kr/api/kindex  

 


유니티 HTTP 요청

HTTP요청 방법 중 WWW는 이제 권장하지 않으므로 WebRequest를 사용

https://docs.unity3d.com/kr/2022.3/Manual/UnityWebRequest.html

 

UnityWebRequest - Unity 매뉴얼

UnityWebRequest는 HTTP 요청을 구성하고 HTTP 리스폰스를 처리하기 위한 모듈식 시스템을 제공합니다. UnityWebRequest 시스템의 주요 목표는 Unity 게임이 최신 웹 브라우저 백 엔드와 상호작용할 수 있도

docs.unity3d.com

 

참고자료

https://sensol2.tistory.com/13

 

[Unity] 공공데이터 API (REST) 연동하는 방법 - (2)

1편에 이어 글을 계속 이어나간다. 지난번 포스팅에서는 공공데이터포털에 가입해 승인신청을 받는 과정까지를 다루었다. 승인신청이 정상적으로 완료되었다면 다음과 같은 화면을 볼 수 있을

sensol2.tistory.com

요청한 문자열 전체를 받아와서 필요한 부분만 찾고 문자열을 잘라서 사용할수도 있지만 복잡함.

JSON 구조 파싱을 해서 원하는 데이터를 Key값으로 불러올수 있음.

 

Json구조로 파싱하기

https://litjson.net/

 

LitJSON - Home

What is LitJSON? A .Net library to handle conversions from and to JSON (JavaScript Object Notation) strings. LitJSON is written in C#, and it’s intended to be small, fast and easy to use. It's quick and lean, without external dependencies. Just a few cla

litjson.net

.dll 받아서 유니티 프로젝트 Asset폴더 안에 Plugin이라는 폴더 만들어서 넣어주면 사용가능

그 후 네임스페이스에 using LitJson; 작성하면 사용 가능

LitJson.dll
0.05MB

 

 

https://mgtul.tistory.com/212

 

WebRequest 사용시 에러(Non-secure network connections disabled in Player Settings)

Non-secure network connections disabled in Player Settings UnityEngine.Networking.UnityWebRequest:Send () InvalidOperationException: Insecure connection not allowed UnityEngine.Networking.UnityWebRequest.SendWebRequest () WebRequest를 사용하는데 위

mgtul.tistory.com

WebRequest 다운로드 권한 허용 설정

 


태양풍 데이터 가져오기

Get_SolarWind.cs
0.00MB

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

public class Get_SolarWind : MonoBehaviour
{
    public int LoadTerm = 60;    //JSON데이터 요청 갱신할 초단위 시간
    public Text ProtonDensity_Text, BulkSpeed_Text, IonTemp_Text;  // 태양풍 밀도, 속도, 온도
    public static float PD, BS, IT; //태양풍 밀도, 속도, 온도 숫자값

    string JsonData;    //요청한 Json데이터 담을 문자열
    string PD_str, BS_str, IT_str;  //태양풍 밀도, 속도, 온도 문자열값

    void Start()
    {
        InvokeRepeating("LoadJsonData", 1, LoadTerm);
    }


    void LoadJsonData()
    {
        StartCoroutine(RequestData());
    }

    IEnumerator RequestData()  //데이터 요청하기
    {
        string GetDataURL = "http://spaceweather.rra.go.kr/api/ace/sw";

        using (UnityWebRequest Request = UnityWebRequest.Get(GetDataURL))
        {
            yield return Request.Send();
            if (Request.isNetworkError || Request.isHttpError)
            {
                //불러오기 에러 있을 경우
                Debug.Log("Network Error!");
            }
            else
            {
                if (Request.isDone)
                {
                    //불러오기 성공
                    JsonData = System.Text.Encoding.UTF8.GetString(Request.downloadHandler.data);
                    Debug.Log("Request Success!" + JsonData);
                    JsonParsing();
                }
            }
        }
    }

    void JsonParsing()
    {
        JsonData KeyData = JsonMapper.ToObject(JsonData);

        //문자열로 저장
        PD_str = KeyData["data"][0]["protonDensity"].ToString();
        BS_str = KeyData["data"][0]["bulkSpeed"].ToString();
        IT_str = KeyData["data"][0]["ionTemp"].ToString();

        //숫자로 저장
        PD = float.Parse(PD_str);
        BS = float.Parse(BS_str);
        IT = float.Parse(IT_str);

        PrintValue_Text();   //결과값 UI Text로 출력
    }

    void PrintValue_Text()
    {
        //결과값 UI Text로 출력
        ProtonDensity_Text.text = PD_str;
        BulkSpeed_Text.text = BS_str;
        IonTemp_Text.text = IT_str;
    }
}

 

지구자기장 데이터 가져오기

Get_EarthMagneticField.cs
0.00MB

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

public class Get_EarthMagneticField : MonoBehaviour
{
    public int LoadTerm = 60;    //JSON데이터 요청 갱신할 초단위 시간
    public Text Kk_Text,Kp_Text;  // 미국관측 자기장, 한국관측 자기장
    public static float Kk, Kp; //자기장 지수 숫자값

    string JsonData;    //요청한 Json데이터 담을 문자열
    string Kk_str, Kp_str;  //자기장 지수 문자열 값

    void Start()
    {
        InvokeRepeating("LoadJsonData", 1, LoadTerm);
    }

    void LoadJsonData()
    {
        StartCoroutine(RequestData());
    }

    IEnumerator RequestData()  //데이터 요청하기
    {
        string GetDataURL = "https://spaceweather.rra.go.kr/api/kindex";

        using (UnityWebRequest Request = UnityWebRequest.Get(GetDataURL))
        {
            yield return Request.Send();
            if (Request.isNetworkError || Request.isHttpError)
            {
                //불러오기 에러 있을 경우
                Debug.Log("Network Error!");
            }
            else
            {
                if (Request.isDone)
                {
                    //불러오기 성공
                    JsonData = System.Text.Encoding.UTF8.GetString(Request.downloadHandler.data);
                    Debug.Log("Request Success!" + JsonData);
                    JsonParsing();
                }
            }
        }
    }
    void JsonParsing()
    {
        JsonData KeyData = JsonMapper.ToObject(JsonData);

        //문자열로 저장
        Kk_str = KeyData["kindex"]["currentK"].ToString();
        Kp_str = KeyData["kindex"]["currentP"].ToString();

        //숫자로 저장
        Kk = float.Parse(Kk_str);
        Kp = float.Parse(Kp_str);

        PrintValue_Text();   //결과값 UI Text로 출력
    }
    void PrintValue_Text()
    {
        //결과값 UI Text로 출력
        Kk_Text.text = Kk_str;
        Kp_Text.text = Kp_str;
    }
}