인터넷 찾아가며 이것저것 짜집기도 하고 영 별거 아닌걸로 고생아닌고생하니까 짜증이 나네요...


그래서 제가 짠거 공개할게요.

springdml restTemplate 이용해서 했고요..

인터넷 찾아보니, 이게 뭐 convert가 좀 문제라서...

한글이 마구 깨지는데..

이거 구글링 열심히해서 어떤분 소스 베껴다가 넣었어요.

원본 주소 : https://gist.github.com/ucpwang/949145408a12bb40a671


주석같은거 안달려 있으니 알아서 보시면 될거 같고요.

contents에서 img태그 찾아서 #n 으로 치환해서 멀티파트로 파일 넘기는것까지 구현했습니다.

error코드 인증실패 리턴시에는 토큰값 갱신 하시는 로직 따로 작성하시면 되어요.



public String blogPost(String token, String title, String contents) { contents = contents.replaceAll("<br>", ""); contents = contents.replaceAll("<BR>", ""); List<String> imageSrcs = new ArrayList<>(); List<Resource> resources = new ArrayList<>(); int startIdx = 0; int imgIdx = contents.indexOf("<img", startIdx); while(imgIdx > -1){ int srcIdx = contents.indexOf("//image", imgIdx); int endIdx = contents.indexOf("\"", srcIdx); String imgSrc = contents.substring(srcIdx, endIdx); imageSrcs.add(imgSrc); startIdx = endIdx; imgIdx = contents.indexOf("<img", startIdx); } int idx = 0; for(String imageSrc : imageSrcs){ contents = contents.replace(imageSrc, "#"+idx); idx++; int qIdx = imageSrc.indexOf("?"); if(qIdx < 0){ qIdx = imageSrc.length(); } imageSrc = imageSrc.substring(0, qIdx); String fileSrc = imageSrc.replace(imageServerHost, saveDirectory); Resource file = new FileSystemResource(fileSrc); resources.add(file); } String header = "Bearer " + token; // Bearer 다음에 공백 추가 RestTemplate restTemplate = new RestTemplate(); String apiURL = "https://openapi.naver.com/blog/writePost.json"; try { for (HttpMessageConverter<?> hmc : restTemplate.getMessageConverters()) { if (hmc instanceof AllEncompassingFormHttpMessageConverter) { /** AllEncompassingFormHttpMessageConverter 생성자 내용 일부 가져와서 수정 **/ List<HttpMessageConverter<?>> partConverterList = new ArrayList<HttpMessageConverter<?>>(); partConverterList.add(new ByteArrayHttpMessageConverter()); StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8")); stringHttpMessageConverter.setWriteAcceptCharset(false); partConverterList.add(stringHttpMessageConverter); partConverterList.add(new ResourceHttpMessageConverter()); partConverterList.add(new SourceHttpMessageConverter()); if (ClassUtils.isPresent("javax.xml.bind.Binder", AllEncompassingFormHttpMessageConverter.class.getClassLoader())) { partConverterList.add(new Jaxb2RootElementHttpMessageConverter()); } if (ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", AllEncompassingFormHttpMessageConverter.class.getClassLoader()) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", AllEncompassingFormHttpMessageConverter.class.getClassLoader())) { partConverterList.add(new MappingJackson2HttpMessageConverter()); } else if (ClassUtils.isPresent("org.codehaus.jackson.map.ObjectMapper", AllEncompassingFormHttpMessageConverter.class.getClassLoader()) && ClassUtils.isPresent("org.codehaus.jackson.JsonGenerator", AllEncompassingFormHttpMessageConverter.class.getClassLoader())) { partConverterList.add(new MappingJackson2HttpMessageConverter()); } ((AllEncompassingFormHttpMessageConverter) hmc).setPartConverters(partConverterList); } } HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", header); MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<String, Object>(); parameters.add("title", title); parameters.add("contents", contents); for(Resource resource : resources){ parameters.add("image", resource); } HttpEntity<?> httpEntity = new HttpEntity<>(parameters,headers); ResponseEntity<HashMap> re = restTemplate.exchange(apiURL, HttpMethod.POST, httpEntity, HashMap.class); System.out.println(re); return (String) re.getBody().get("error_code"); } catch (Exception e) { System.out.println(e); } return null; }


+ Recent posts