JSP/SERVLET
2019.05.29 / 24:33

[´ÜÃàURL] 2. Java·Î API È£Ãâ ¸ðµâ ÀÛ¼º - 1. API È£ÃâÇϱâ (2018-04-19 ³»¿ë Ãß°¡)

Źµ¹ÀÌ°³¹ßÀÚ
Ãßõ ¼ö 259

À̹ø ½Ã°£¿¡´Â Àú¹ø¿¡ ¹ß±Þ¹ÞÀº Client ID, Client SecretÀ» È°¿ëÇÏ¿© ³×À̹ö ´ÜÃà URL api¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀ» »ìÆ캸°í Java Äڵ带 ÀÛ¼ºÇØ º¸µµ·Ï ÇÏ°Ú´Ù.

º»°ÝÀûÀ¸·Î µé¾î°¡±â ¾Õ¼­ »ç¿ë¹ý¿¡ ´ëÇÑ ºÐ¼®À» ÇØ º¸µµ·Ï ÇÑ´Ù.
³×À̹ö °³¹ßÀÚ¼¾ÅÍ¿¡¼­ Á¦°øÇÏ´Â °¡À̵å: https://developers.naver.com/docs/utils/shortenurl/

°¡À̵忡 ¸í½ÃµÈ ±âº» ¸í¼¼´Â ¾Æ·¡¿Í °°´Ù.

¿ì¼± ¿äûÀ» º¸³¾ URLÀº https://openapi.naver.com/v1/util/shorturl ÀÌ´Ù.
ÀÌÈÄ ´ÜÃàµÈ URLÀÇ ÀÀ´äÀº JSONÀ̳ª XML·Î ¹ÞÀ» ¼ö Àִµ¥, º» Æ©Å丮¾ó¿¡¼± JSONÀ» »ç¿ëÇϵµ·Ï ÇÏ°Ú´Ù.

¿äûÀ» º¸³¾ ¶© POST Çü½ÄÀ¸·Î ´ÜÃà½Ãų ÁÖ¼Ò¸¦ ´ã¾Æ º¸³½´Ù.
¿äû º¯¼ö¸íÀÌ url À̹ǷÎ, url=´ÜÃà´ë»óURL ÇüÅ·Πº¸³»¸é µÈ´Ù.
´Ü, ´ÜÃà ´ë»ó URLÀº UTF-8 Çü½ÄÀ¸·Î º¯È¯ÇØ¾ß ÇÑ´Ù.

ÀÌÈÄ Ãâ·Â °á°ú´Â 3°¡Áö Çʵ尡 JSON Çü½ÄÀ¸·Î ´ã°Ü ¿Ã °ÍÀÌ´Ù.
¿ì¸®´Â ¿©±â¼­ ÃÖÁ¾ÀûÀ¸·Î ´ÜÃàµÈ °ªÀÎ url ¸¸ ÇÊ¿äÇÏ´Ù. ÀÌ °ªÀº ÃßÈÄ JSON ÆÄ½Ì ºÎºÐ¿¡¼­ ´Ù·çµµ·Ï ÇÏ°Ú´Ù.


¿¡·¯ ÄÚµå´Â ½ÉÇÃÇÏ°Ô 3°¡Áö À¯Çü¸¸ Á¸ÀçÇÑ´Ù.
403ÀÌ ¹ß»ýÇϸé url ÀÚü°¡ ÀÌ»óÇϰųª ±ÝÁöµÈ ÁÖ¼ÒÀÎ °æ¿ìÀÌ´Ù.
500ÀÌ ¹ß»ýÇÏ¸é ´ÜÃà URL api ¼­¹ö°¡ ¸ÀÀÌ °£ °æ¿ìÀ̹ǷΠ´äÀÌ ¾ø´Ù.
¹Ý¸é Á¤»óÀûÀ¸·Î ´ÜÃà¿¡ ¼º°øÇßÀ¸¸é 200 ÀÌ ´ã°Ü ¿Â´Ù.
ÀÌ °ªµéÀº ÃßÈÄ Äڵ忡¼­ ¿¡·¯ 󸮸¦ ÇÒ ¶§ »ç¿ëÇÏ¸é µÈ´Ù.

ºÐ¼®Àº ¿©±â±îÁö¸¸ ÇÏ°í ÀÌÁ¦ º»°ÝÀûÀ¸·Î Äڵ带 ÀÛ¼ºÇغ¸µµ·Ï ÇÑ´Ù.

Maven ÇÁ·ÎÁ§Æ®·Î »ý¼ºÇÏ´Â °ÍÀ» °­·ÂÈ÷ ±ÇÀåÇÑ´Ù.

< Short.java >

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; public class Short { /* ´ÜÃà URL api ÁÖ¼Ò */ final static String API_URL = "https://openapi.naver.com/v1/util/shorturl"; public static void main(String[] args) throws Exception { /* ´ÜÃà½Ãų URLÀÌ ¸Å°³º¯¼ö·Î ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ¿¡·¯ -> Á¾·á */ if(args.length != 1) { System.err.println("»ç¿ë¹ý: java -jar short.jar ´ÜÃà½ÃųURL"); System.exit(1); } String target = args[0]; // ¸Å°³º¯¼ö·Î ³Ñ¾î¿Â ´ÜÃà ´ë»ó ÁÖ¼Ò /* POST ¿äû ºÎºÐ ÀÛ¼º */ HttpURLConnection conn = (HttpURLConnection) new URL(API_URL).openConnection(); conn.setRequestProperty("X-Naver-Client-Id", "¹ß±Þ¹ÞÀº Client ID"); conn.setRequestProperty("X-Naver-Client-Secret", "¹ß±Þ¹ÞÀº Client Secret"); conn.setRequestMethod("POST"); // POST conn.setDoOutput(true); // POST /* ´ÜÃà½Ãų URLÀ» ´ã´Â ºÎºÐ */ DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes("url=" + toUTF8(target)); // ´ÜÃà½Ãų ÁÖ¼Ò¸¦ UTF-8 ·Î º¯È¯ÇÏ¿© ´ã´Â´Ù dos.close(); // Çʼö /* ÀÀ´ä Äڵ尡 200ÀÌ ¾Æ´Ï¸é ¿¡·¯ -> Á¾·á */ int responseCode = conn.getResponseCode(); if(responseCode != 200){ System.err.println("¿¬°á ½ÇÆÐ: " + responseCode); System.exit(1); } /* json ÇüÅÂÀÇ ÀÀ´ä°ªÀ» ¹Þ´Â´Ù. */ String line; StringBuilder json = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); while((line = br.readLine()) != null){ json.append(line + System.getProperty("line.separator")); } br.close(); System.out.println(json); // Å×½ºÆ®¿ë Ãâ·Â } /* º¯È¯½Ãų ÁÖ¼Ò¸¦ UTF-8 Çü½ÄÀ¸·Î º¯È¯ÇÑ´Ù. */ private static String toUTF8(String url){ try { return URLEncoder.encode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { return url; // º¯È¯ ½ÇÆÐ ½Ã ±âÁ¸ url ¸®ÅÏ } } }

¹Ýµå½Ã Client Id, Client Secret ºÎºÐ¿¡ ¹ß±Þ¹ÞÀº º»ÀÎÀÇ °ªµéÀ» Àû¾îµÎµµ·Ï ÇÑ´Ù.

À§ Äڵ带 ¿Å°ÜÀûÀº µÚ, Ä¿¸Çµå¶óÀΠȯ°æ¿¡¼­ ÄÄÆÄÀÏ & ½ÇÇàÀ» ÇØ º»´Ù.

$> javac Short.java $> java Short https://blog.naver.com/occidere


Á¤»óÀûÀ¸·Î º¯È¯¿¡ ¼º°øÇß´Ù¸é ¾Æ·¡¿Í °°Àº ÀÀ´äÀÌ ¿Ã °ÍÀÌ´Ù.

Àú Áß¿¡¼­ ¿ì¸®¿¡°Ô ÇÊ¿äÇÑ °ªÀº "url" ºÎºÐÀÌ´Ù.
´ÙÀ½ Æ÷½ºÆÿ¡¼­´Â "url" Çʵ常 ÆĽÌÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú´Ù.