본문 바로가기
개발자 관련 공부/멀티캠퍼스

[인증, 감정 API] CAPTCHA 이미지, 음성, 감정분석

by 박나무 2022. 2. 21.
반응형
package com.mulcam.clova.controller;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class Clova_CAPTCHA {
	String clientId = "*********";// 애플리케이션 클라이언트 아이디값";
	String clientSecret = "************";// 애플리케이션 클라이언트 시크릿값";

	@GetMapping("/captchaform")
	public String captcharForm() {
		return "captcha_img";
	}

	String key;

	@GetMapping("/captcha")
	public void reqCaptcha(HttpServletResponse res) {
		try {
			key = getCode(); // https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey 호출로 받은 키값
			String apiURL = "https://naveropenapi.apigw.ntruss.com/captcha-bin/v1/ncaptcha?key=" + key
					+ "&X-NCP-APIGW-API-KEY-ID" + clientId;
			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				InputStream is = con.getInputStream();
				int read = 0;
				byte[] bytes = new byte[1024];
				OutputStream outputStream = res.getOutputStream();
				while ((read = is.read(bytes)) != -1) {
					outputStream.write(bytes, 0, read);
				}
				is.close();
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
				String inputLine;
				StringBuffer response = new StringBuffer();
				while ((inputLine = br.readLine()) != null) {
					response.append(inputLine);
				}
				br.close();
				System.out.println(response.toString());
			}
		} catch (Exception e) {
			System.out.println(e);
		}

	}

	@PostMapping("/captchacheck")
	public String catpchaCheck(@RequestParam("userin") String userin, Model model) {
		boolean result=false;
		String view = "";
		try {
			String code = "1"; // 키 발급시 0, 캡차 이미지 비교시 1로 세팅
			String value = userin; // 사용자가 입력한 캡차 이미지 글자값
			String apiURL = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code + "&key=" + key
					+ "&value=" + value;

			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
			con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			String inputLine;
			StringBuffer response = new StringBuffer();
			while ((inputLine = br.readLine()) != null) {
				response.append(inputLine);
			}
			br.close();
			JSONObject jsonobj = new JSONObject(response.toString());
			result = (Boolean) jsonobj.get("result");
			if(result) {
				model.addAttribute("result", "success");
				view = "captcha_check";
			} else {
				view = "redirect:/captchaform";
			}
			System.out.println(response.toString());
		} catch (Exception e) {
			System.out.println(e);
		}
		return view;
	}

	private String getCode() {
		String key = "";
		try {
			String code = "0"; // 키 발급시 0, 캡차 이미지 비교시 1로 세팅
			String apiURL = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code;
			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
			con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			String inputLine;
			StringBuffer response = new StringBuffer();
			while ((inputLine = br.readLine()) != null) {
				response.append(inputLine);
			}
			br.close();
			JSONObject jsonobj = new JSONObject(response.toString());
			key = (String) jsonobj.get("key");
			System.out.println(response.toString());
		} catch (Exception e) {
			System.out.println(e);
		}
		return key;
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="/captcha"><br>
<form action="/captchacheck" method="post">
<input type="text" name="userin">
<input type="submit" name="전송">
</form>
</body>
</html>

 

위에는 이미지-----------------------------------아래는 음성-------------------

package com.mulcam.clova.controller;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class Clova_CAPTCHA_Audio {
	String clientId = "**********";// 애플리케이션 클라이언트 아이디값";
	String clientSecret = "**************";// 애플리케이션 클라이언트 시크릿값";
	String key;

	@GetMapping("/captchaaudioform")
	public String captcharForm() {
		return "captcha_audio";
	}

	@GetMapping("/captchaaudio")
	public void reqCaptchaAudio(HttpServletResponse res) {
		try {
			getCode(); // https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey 호출로 받은 키값
			System.out.println(key);
			String apiURL = "https://naveropenapi.apigw.ntruss.com/scaptcha-bin/v1/scaptcha?key=" + key
					+ "&X-NCP-APIGW-API-KEY-ID=" + clientId;
			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				InputStream is = con.getInputStream();
				int read = 0;
				byte[] bytes = new byte[1024];
				// 랜덤한 이름으로 파일 생성
				OutputStream outputStream = res.getOutputStream();
				while ((read = is.read(bytes)) != -1) {
					outputStream.write(bytes, 0, read);
				}
				is.close();
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
				String inputLine;
				StringBuffer response = new StringBuffer();
				while ((inputLine = br.readLine()) != null) {
					response.append(inputLine);
				}
				br.close();
				System.out.println(response.toString());
			}
		} catch (Exception e) {
			System.out.println(e);
		}
	}

	@PostMapping("/captchaaudiocheck")
	public String capcharAudioCheck(@RequestParam("userin") String userin, Model model) {
		boolean result=false;
		String view = "";		
		System.out.println(key);
		try {
			String code = "1"; // 키 발급시 0, 캡차 음성 비교시 1로 세팅
			String value = userin; // 사용자가 입력한 캡차 값
			String apiURL = "https://naveropenapi.apigw.ntruss.com/scaptcha/v1/skey?code=" + code + "&key=" + key
					+ "&value=" + value;

			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
			con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			String inputLine;
			StringBuffer response = new StringBuffer();
			while ((inputLine = br.readLine()) != null) {
				response.append(inputLine);
			}
			br.close();
			JSONObject jsonobj = new JSONObject(response.toString());			
			result = (Boolean) jsonobj.get("result");
			if(result) {
				model.addAttribute("result", "success");
				view = "captcha_check";
			} else {
				view = "redirect:/captchaaudioform";
			}			
			System.out.println(response.toString());
		} catch (Exception e) {
			System.out.println(e);
		}
		return view;
	}

	private void getCode() {
		try {
			String code = "0"; // 키 발급시 0, 캡차 음성 비교시 1로 세팅
			String apiURL = "https://naveropenapi.apigw.ntruss.com/scaptcha/v1/skey?code=" + code;
			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
			con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			String inputLine;
			StringBuffer response = new StringBuffer();
			while ((inputLine = br.readLine()) != null) {
				response.append(inputLine);
			}
			br.close();
			JSONObject jsonobj = new JSONObject(response.toString());
			key = (String) jsonobj.get("key");
			System.out.println(response.toString());
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<audio controls>
	<source src="/captchaaudio" type="audio/wav">
</audio><br>
<form action="/captchaaudiocheck" method="post">
<input type="text" name="userin">
<input type="submit" value="전송">
</form>
</body>
</html>

----------------아래부터 감정분석

package com.mulcam.clova.controller;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Clova_Sentiment {
	@GetMapping("/sentiment")
	public String sentiment() {
		String clientId = "********";// 애플리케이션 클라이언트 아이디값";
		String clientSecret = "************";// 애플리케이션 클라이언트 시크릿값";
		StringBuffer response = new StringBuffer();
		try {
			String content = "{\"content\":\"싸늘하다. 가슴에 비수가 날아와 꽂힌다.\"}";
			String apiURL = "https://naveropenapi.apigw.ntruss.com/sentiment-analysis/v1/analyze";
			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("POST");
			con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
			con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
			con.setRequestProperty("Content-Type", "application/json");
			// post request
			String postParams = "content=" + content;
			con.setUseCaches(false);
			con.setDoOutput(true);
			con.setDoInput(true);
			DataOutputStream wr = new DataOutputStream(con.getOutputStream());
			wr.writeBytes(postParams);
			wr.flush();
			wr.close();
			int responseCode = con.getResponseCode();
			BufferedReader br;
			if (responseCode == 200) { // 정상 호출
				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
			} else { // 오류 발생
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			String inputLine;

			while ((inputLine = br.readLine()) != null) {
				response.append(inputLine);
			}
			br.close();
			
			System.out.println(response.toString());
		} catch (Exception e) {
			System.out.println(e);
		}
		return response.toString();
	}
}
반응형

댓글