음산협 API 호출하여 XML파싱

VO 객체

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

// 롬복을 이용함
@Getter
@Setter
@ToString
public class UCIAlbumVO {
    private String uciCode;                 // UCI그룹코드
    private String distAlbumCode;           // 앨범코드(자사 앨범관리코드)
    private String albumTitle;              // 앨범명
    private String repSingerName;           // 앨범가수명
    private String releaseDate;             // 발매일
    private String distributor;             // 유통사
    private String country;                 // 국가코드
    private String producer;                // 제작사
    private String barCode;                 // 바코드(UPC)
    private String distMusicCode;           // 곡 코드(자사 곡 관리코드)
    private String musicTitle;              // 곡명
    private String cdNo;                    // 디스크번호
    private String trackNo;                 // 트랙번호
    private String singerName;              // 곡명
    private String genre;                   // 장르
    private String feature;                 // 피처링
    private String composer;                // 작곡가
    private String lyricist;                // 작사가
    private String arranger;                // 편곡가
    private String player;                  // 연주자
    private String playTime;                // 재생시간
    private String isrc;                    // ISRC
}

API호출 메서드

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.junit.Test;
import org.w3c.dom.Document;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.assertNotNull;

public class UCITest {
    @Test
    public void getUCIAlbum() {
        // 접속할 URL
        String baseUrl = "http://uci.k-pop.or.kr/api/meta.do";

        // 파라미터 세팅
        Map<String, String> param = new HashMap<>();
        param.put("albumCode", "1000005446740");
        String parameters = "";
        for (String key : param.keySet()) {
            if ("".equals(parameters)) {
                parameters += key + "=" + param.get(key);
            } else {
                parameters += "&" + key + "=" + param.get(key);
            }
        }

        OutputStream outputStream;
        BufferedReader reader = null;
        Document document = null;

        try {
            URL targetUrl = new URL(baseUrl);
            URLConnection urlConn = targetUrl.openConnection();
            HttpURLConnection httpURLConn = (HttpURLConnection) urlConn;

            httpURLConn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
            httpURLConn.setRequestMethod("POST");
            httpURLConn.setDoInput(true);
            httpURLConn.setDoOutput(true);
            httpURLConn.setUseCaches(false);
            httpURLConn.setDefaultUseCaches(false);

            outputStream = httpURLConn.getOutputStream();
            outputStream.write(parameters.getBytes("utf-8"));
            outputStream.flush();
            outputStream.close();

            // Jackson XML 파서를 이용하여 VO객체로 변환한다.
            ObjectMapper xmlMapper = new XmlMapper();
            TypeFactory typeFactory = xmlMapper.getTypeFactory();
            InputStream inputStream = httpURLConn.getInputStream();
            List<UCIAlbumVO> uciAlbumVOList = xmlMapper.readValue(inputStream, typeFactory.constructCollectionType(ArrayList.class, UCIAlbumVO.class));

            for (UCIAlbumVO albumVO : uciAlbumVOList) {
                System.out.println(albumVO);
            }

            assertNotNull(uciAlbumVOList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다