우주전파센터 OPEN API 유니티에서 활용하기
우주전파센터 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구조로 파싱하기
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; 작성하면 사용 가능
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 다운로드 권한 허용 설정
태양풍 데이터 가져오기
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;
}
}
지구자기장 데이터 가져오기
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;
}
}