관리 메뉴

LC Studio

Nexon OpenApi Parse with Android Stdio (FIFAONLINE RandomSquadMaker #0) 본문

프로젝트/FIFAONLINE4 RandomSquadMaker

Nexon OpenApi Parse with Android Stdio (FIFAONLINE RandomSquadMaker #0)

Leopard Cat 2022. 5. 20. 21:05

서론

Nexon Open Api는 다음 링크에서 확인할 수 있다.

https://developers.nexon.com/

 

개발자센터

넥슨 Open API를 활용하여 멋진 경험에 도전해보세요!! 게임 정보, 매칭 기록, 랭킹 지표 등 무궁무진한 데이터를 직접 활용해보세요!

developers.nexon.com

 

위의 사이트에서는 카트라이더와, FIFAONLINE4의 api만 이용할 수 있다.

다른 넥슨 게임들에도 공개된 api 들이 있지만, 개발자센터에 공개되어있지 않고, 호출방법도 자세히 나와있지 않다.

 

어쨋든, 나는 FIFAONLINE4 API를 사용할 것이다.

FIFAONLINE4의 경우 위와같은 API를 제공한다.

그 중에서 선수의 정보와 관련된 것들(고유 식별자, 시즌, 이미지)을 사용할 것이다.

이 글에서는 선수 고유 식별자 메타데이터를 통해 선수 이름을 받아올것이다.

 


본론

선수 고유 식별자 메타데이터의 형태의 예시는 다음과 같다. 

[
    {
        "id": 101000001,
        "name": "데이비드 시먼"
    },
    {
        "id": 101000195,
        "name": "로비 파울러"
    }
]

위와 같은 형태로 Json파일형태로 호출할 수 있다.

 

형태 및 특징

- 큰 JsonArray안에 여러개의 JsonObject로 구성되어있다.

- https로 호출한다.

- API Key값 없이도 호출 가능하다.

 

Android Stdio를 켜고,

1. Manifest에 Internet permission을 추가한다.

2. HttpConnector class를 만들고 다음 코드를 추가한다.

public class HttpsConnector extends Thread{

    @Override
    public void run() {
        try{

            URL url = new URL("https://static.api.nexon.co.kr/fifaonline4/latest/spid.json");
            HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();

            if(conn != null){
                conn.setConnectTimeout(10000); // 일정 시간 기다린 후 연결 안될시 접속종료
                conn.setRequestMethod("GET"); // Get방식으로 데이터 가져옴

                int resCode = conn.getResponseCode();
                int HTTP_OK = HttpsURLConnection.HTTP_OK;

                // Log를 통해 서버가 정상적으로 작동되는지 확인인
                // Log.d("JsonParsing", "resCode : "+resCode);
                //Log.d("JsonParsing", "HTTP_OK : "+HTTP_OK);

                if(resCode == HTTP_OK){
                    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); //Buffer를 통해 Json값 읽음
                    String line = null;
                    while (true){
                        line = reader.readLine();

                        Log.d("JsonParsing", "line : " + line);

                        if(line == null){
                            break;
                        }

                        JsonParser.jsonParser(line);
                    }
                    reader.close();
                }
                conn.disconnect();
            }
        }catch (Exception e){

        }
    }
}

Json통신을 통해 API 값을 한줄씩 받아온다.

 

3. JsonParser 클래스를 만들고 다음 코드를 추가한다.

public class JsonParser {

    public static void jsonParser(String resultJson){


        try {
            JSONObject jsonObject = new JSONObject(resultJson);
            JSONArray jsonArray = new JSONArray();
            JSONObject jsonObject2 = new JSONObject(resultJson);

            jsonArray = jsonObject.names();
            for(int i=0; i<=jsonArray.length(); i++){
                jsonObject2 = jsonArray.getJSONObject(i);
                String desc = jsonObject2.getString("desc");
                Log.d("JsonParsing","desc : "+ desc);
            }
        }catch (JSONException e){

        }
    }

}

위의 경우, 아래의 예시와 같이

"객체 안에 배열 안에 객체"의 형태를 띄고 있는 경우를 생각하고 작성한 예시이다.

Json 상황에 맞게 Array 혹은 Object로 바꿔 작성하면 된다.

{
	"player" :[
        {
        	"desc" : "asdnasd" 
        },
        {
        	"desc" : "fsdafsag" 
        },
        {
        	"desc" : "asddag" 
        }       
	]
}

4. 마지막으로 MainActivity에서 HttpsConnector를 호출한다.

HttpsConnector thread = new HttpsConnector();
thread.start();

위의 코드를 MainActivity에 작성해주면 된다.


결론

위의 경우는 기본적인 경우이고,

나의 경우 Random playername 값을 가져와야하기 때문에 다른 방식으로 API를 받아왔다.

 

예시를 보여주자면,

아래 log와 같이 값을 받아온다.

 

2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :     [
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :     {
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :         "id": 504165908,
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :         "name": "오범석"
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :     },
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :     {
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :         "id": 504176296,
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :         "name": "김태윤"
2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :     }

...

...

...

2022-05-20 20:57:14.023 5422-5487/com.example.jsontraining D/JsonParsing: line :     ]

 

 

"name"에 해당하는 값의 줄은 4, 8, 12 ... 

4의 배수 형태를 띄고있다.

random값을 발생시키고 4를 곱한 값에 해당하는 줄을 받아올 것이다.

반응형