카테고리 없음

인터파크API

멈추지않아 2022. 10. 10. 16:23
깃허브:https://github.com/kimdhj/teamProject

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class HttpUtil {
	public static String callApi(String search, String country, String category, int maxResults, int start)
			throws UnsupportedEncodingException {
		search = URLEncoder.encode(search, "UTF-8");

		URL url = null;
		String readLine = null;
		StringBuilder buffer = null;
		OutputStream outputStream = null;
		BufferedReader bufferedReader = null;
		BufferedWriter bufferedWriter = null;
		HttpURLConnection urlConnection = null;

		int connTimeout = 5000;
		int readTimeout = 3000;
		//발급 받은 키들 사용
		String apikey = "S2JyKGPNI18HDfxe7lTxEg==";
		String Inapikey = "51618F655CD09159A6844BD65A8B6F104E492CC6455C3F0DD667626EA7D32750";

		// String apiUrl =
		// "https://www.dlibrary.go.kr/openapi/call.do?dist_key="+apikey+"&func_id=3&sw="+type+"&sf="+center+"&cntPerPage=10";
		// // 국가
		// 변수 순서대로 발급받은키->검색할 키워드->검색할 카테고리번호->검색학 국가->최대 결과수->시작지점
		String apiUrl = "http://book.interpark.com/api/search.api?key=" + Inapikey + "&query=" + search + "&categoryId="
				+ category + "&output=json&searchTarget=" + country + "&maxResults=" + maxResults + "&start=" + start; // 인터파크
		

		try {
			url = new URL(apiUrl);

			urlConnection = (HttpURLConnection) url.openConnection();
			urlConnection.setRequestMethod("POST");//전송method
			urlConnection.setConnectTimeout(connTimeout);//연결에 걸리는 최대시간 이후는 에러
			urlConnection.setReadTimeout(readTimeout);//데이터를 읽어오는데 최대시간 이후는 에러
			urlConnection.setRequestProperty("Content-Type", "application/json;");//내용이 json형식이라는 의미
			urlConnection.setDoOutput(true);//put post 시 true 설정
			urlConnection.setInstanceFollowRedirects(true);//리다이렉트 요청이 있으면 자동으로 따라갈지 말지 설정

			outputStream = urlConnection.getOutputStream();// 데이터를 byte[]배열로 생성하고 

			bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
			
			bufferedWriter.flush();//현재내용을 전송하고 비워준다

			buffer = new StringBuilder();//String보다 효율적이지만 동기화 안됨
			if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
				//urlconnection에서 데이터 받아와서 리더로 출력하고 스트링빌더에 하나씩 추가해가면서 string만들기
			  bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
				while ((readLine = bufferedReader.readLine()) != null) {
					buffer.append(readLine).append("\n");
				}
				
			} else {
				buffer.append("\"code\" : \"" + urlConnection.getResponseCode() + "\"");
				buffer.append(", \"message\" : \"" + urlConnection.getResponseMessage() + "\"");
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				if (bufferedWriter != null) {
					bufferedWriter.close();
				}
				if (outputStream != null) {
					outputStream.close();
				}
				if (bufferedReader != null) {
					bufferedReader.close();
				}
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

		System.out.println("결과 : " + buffer.toString());
		return buffer.toString();
	}
}