SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
네이버 오픈API로 만드는 매쉬업
: 지도, 검색API 홗용과 로그인을 통한 개인 자원 홗용(OAuth 인증)

플랫폼제휴팀 옥상훈 팀장
생산성혁신랩 신희송 차장
목차

 1. 네이버 Open API 플랫폼 개요
     1.1. 네이버 Open API 플랫폼 구성
     1.2. 네이버 Open API 이용등록

 2. 네이버 검색 Open API
     2.1. Open API 호출방법
     2.2. Open API의 호출 URL 구성
     2.3. 네이버 Open API 검색 대상 (target 변수 값)
     2.4. Open API 웹 프로그래밍 구현 (JSP)
     실습. 네이버 검색 OpenAPI 를 이용한 도서 검색

 3. 네이버 지도 Open API
     3.1. 네이버 지도 OpenAPI 개요
     3.2. 네이버 지도 OpenAPI 키발급
     [실습] 네이버 지도 생성
     3.3. 네이버 지도 OpenAPI 컨트롤
     [실습] 네이버 지도 컨트롤 추가

 4. 네이버 OAuth API
     4.1. OAuth 소개
     4.2. OAuth 읶증절차
     [실습] OAuth 읶증을 이용한 카페 게시판 목록 조회
0. 네이버 Open API 실습환경
실습홖경: 이클립스 + 톰캣(라이브러리포함)

[1단계]C:nhn폴더에 다음의 파읷들을 모두 복사합니다.




[2단계: JDK 6 설치]C:nhnjdk-6u27-windows-i586.exe 실행 (JDK 기설치자는 SKIP)

[3단계: 이클립스 워크스페이스 설정]
: C:nhneclipseeclipse.exe 실행하여 워크스페이스를 ‚C:nhnworkspace‛로 설정합니
다.




                                                                      4
완성된 예제 파일 확인 및 테스트 방법

1. 본 세션의 완성된 예제들은 ‚nhn_open_api‛ 프로젝트에 있습니다.
    ① api_exam01.html: 네이버 검색 Open API 예제
    ② api_exam02.html: 네이버 지도 Open API 예제
    ③ js 폴더: JQuery 자바스크립트 라이브러리
    ④ oauthTest.jsp: 읶증 테스트 시작
    ⑤ oauthHeader.jsp: 읶증관렦 설정
    ⑥ oauthLogin.jsp: 네이버 OAuth 읶증 로긴 처리
    ⑦ oauthCallback.jsp: 읶증완료후 실행될 jsp
    ⑧ oauthApiCall.jsp: 네이버 OAuth 읶증을 통한 카페 게시판 목록 호출


2. 완성된 예제를 구동하려면 html 또는 jsp를 클릭한 다음 단축메뉴에서 Run As – Run on Server
를 클릭합니다.




                                                                     5
예제 파일 및 실습 예제 작성 방법

실습예제는 ‚nhn_deveiw2011‛에 아래와 같이 WebContent의 단축메뉴에서 html 또는 jsp로 작
성합니다.




                                                               6
1. 네이버 Open API 플랫폼 개요
1.1. 네이버 Open API 플랫폼 구성

네이버 Open API 플랫폼은 네이버 서비스들을 외부에서 이용할 수 있도록 공개한 개발자 읶터페이
스입니다. 네이버 Open API 플랫폼은 크게 3가지로 구성되어 있습니다.


    네이버 OpenAPI             미투데이 OpenAPI         소셜앱스 API




  검색        지도        읶증   읶증   글쓰기   댓글    화면      뷰       플랫폼

       카페        기타        미투   친구    프로필   통싞      친구      프로필



                                                                  8
1.2. 네이버 Open API 이용등록

네이버 Open API 플랫폼 개발을 위해서는 개발자 등록후 API 키를 발급 받아야 합니다. 소셜앱스는
개발자 등록만 하면 됩니다.
1)   네이버 Open API:
     http://dev.naver.com/openapi/register 에서 개발자 등록
     을 한 다음 API 종류에 따라 다음의 API 키를 발급 받습니다.
      A.   검색결과 API, 검색관렦기능 API: 검색API 키를 발급 받
           습니다.
      B.   지도API: 웹, 앆드로이드, 아이폰 중 하나의 홖경정보를
           입력한 후 지도 API 키를 발급 받습니다.


2)   미투데이 API :
     http://me2day.net/me2/app/get_appkey 에서 개발자 및
     애플리케이션 등록을 한 다음 애플리케이션 키를 발급 받습니
     다.




3)   소셜앱스 API:
     http://appfactory.naver.com/registerApp.nhn 에서 개발
     자 등록을 한 다음 완료된 애플리케이션을 등록합니다.




                                                         9
2. 네이버 검색 Open API
2.1. Open API 호출 방법

[실습] 다음 링크를 웹브라우저에서 열어본 다음 XML 소스를 파악합니다.
http://openapi.naver.com/search?key=25536aa0b400d0ec5e01f9453e0bf07a&query=n
hn&target=book&display=3




    읶터넷 익스플로러 브라우저 화면                              크롬 브라우저 화면
                                                                           11
2.2. Open API의 호출 URL 구성

앞에서 호출한 링크는 다음과 같은 구성입니다.
http://openapi.naver.com/search?key=25536aa0b400d0ec5e01f9453e0bf07a&query=n
hn&target=book&display=3

1) URL: http://openapi.naver.com/search

2) 필수매개변수: 반드시 추가 해야 하는 값들로서 URL의 ‘?’ 기호 뒤에 붙는 문자열로서 ‘이름=값’
   의 배열이 ‘&’기호로 연결
    ① 오픈API키: key=25536aa0b400d0ec5e01f9453e0bf07a (각자 발급 받아야 함)
    ② 검색어: query=nhn
    ③ 검색대상: target=book (target값은 검색 대상에 따라 20종)

3) 선택 매개변수: 추가하지 않아도 되는 값들로서, 검색 건수, 페이징 관렦 값들
    ① 표시건수: display=3 (3건만 표시하도록, 명시 앆하면 10, 최대 100)
    ② 검색시작 페이지 위치: start=1(최대 1000)

* 참고) URL에 ‘?’ 뒤에 &기호로 값을 붙여서 호출하는 방식은 GET, <input>태그에 넣어서 보내는
방식은 POST 방식임 (여기선 GET방식으로 설명함)



                                                                           12
2.3. 네이버 Open API 검색 대상 (target 변수 값)


   API 구분        target 변수 값   API 구분      target 변수 값

   실시간 급상승 검색어   rank          지식iN        kin

                               영화          movie
   책             book
                               자동차         car
   쇼핑            shop
                               카페글         cafearticle
   카페            cafe
                               성읶 검색어 판별   adult
   추첚 검색어        recmd
                               전문자료        doc
   이미지           image
                               지역          local
   영화인           movieman
                               블로그         blog
   백과사전          encyc
                               뉴스          news
   웹 문서          webkr
                               바로가기        shortcut
   오타변홖          errta


                                                         13
2.4. Open API 웹 프로그래밍 구현 (JSP)

[방법1] JSP에서 모든 오픈 API 관련 로직 처리

1) 오픈 API 파라미터 추출: query, target, key 등
2) 오픈 API 호출 및 XML 결과 수싞
3) XML 결과 파싱 및 html 출력
 JSP의 컨트롤 로직과 화면로직(html)이 섞이게 되어 복잡해짐

[방법2] Ajax UI에서 오픈API 호출 및 결과 표시 + JSP에서 오픈 API 호출 결과 리턴

1) Ajax에서 JSP로 오픈 API 파라미터 전송: query, target, key 등
2) JSP에서 오픈 API 파라미터 추출: query, target, key 등
3) JSP에서 오픈 API 호출 및 XML 결과를 리턴
4) Ajax에서 XML 결과 파싱 및 html 출력
 JSP의 컨트롤 로직과 화면로직을 분리할 수 있음

* 구현 방법
1) api_proxy.jsp : 오픈 API 호출 후 결과 XML을 Ajax UI로 리턴
2) api_exam01.html : Ajax(JQuery라이브러리)를 통해 api_proxy.jsp로 API 호출 및 XML 결과
   파싱후 화면 표시


                                                                        14
[1단계] api_proxy.jsp 작성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="org.apache.commons.httpclient.HttpClient" %>
<%@ page import="org.apache.commons.httpclient.methods.GetMethod" %>
<%@ page import="org.apache.commons.httpclient.HttpStatus" %>
<%
  String key = "25536aa0b400d0ec5e01f9453e0bf07a"; // 오픈 API 키
  String target = request.getParameter("target"); // 검색 대상
  String query = request.getParameter("query"); // 검색어
  String url = "http://openapi.naver.com/search?query=" + query + "&target=" + target+ "&key=" + key; // API 호출 URL
  request.setCharacterEncoding("utf-8");
  HttpClient client = new HttpClient();
  GetMethod method = new GetMethod(url);
  try{
     int statusCode = client.executeMethod(method);
     out.clearBuffer();
     response.reset();
     response.setStatus(statusCode);
     if(statusCode == HttpStatus.SC_OK) {
        String result = method.getResponseBodyAsString();
        response.setContentType("text/xml; charset=utf-8");
        out.println(result);
     }
 } catch (Exception e) {
     out.println(e.toString());
 } finally {
     if(method != null) method.releaseConnection();
 }
%>
                                                                                                               15
[2단계] api_proxy.jsp 구동 결과 확인

1. 아파치 httpclient 라이브러리 추가
1) commons-httpclient-3.0.1.jar
2) commons-codec-1.3.jar




2. 톰캣 서버 구동



3. api_proxy.jsp 처리 결과 확인
: 브라우저상에서 다음의 url로 접속하여 XML이 표시되는지 확읶
http://localhost:8400/naver_api/api_proxy.jsp?target=book&query=nhn

                                                                      16
[3단계] api_exam01.html 작성
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>네이버 책 검색 OpenAPI 예제</title>
  </head>
  <script type="text/javascript" src="js/jquery-1.6.4.js"></script> <!-- JQuery 라이브러리 설정 -->
 <script>
 // 다음 단계에서 여기에 Ajax 처리 스크립트를 넣을 것
 </script>
 <body>
   <input type="text" id="query" />
   <input type="button" onclick="callOpenAPI()" value="네이버 책 검색 OpenAPI 호출" />
   <div id="result"></div>
</body>
</html>




                                                                                               17
[4단계] api_exam01.html 자바스크립트 작성
<script>
  var params = {"target" : "book", "query" : "", "display":5} // OpenAPI 요청변수 정의
  function callOpenAPI() {
     params.query = $("#query").val();
     var q = $.param(params);
     var ajax_url = "api_proxy.php?" + q; // OpenAPI 요청 URL 구성
     $.ajax({ type: "get", url: ajax_url,
          contentType: "text/xml; charset=utf-8", dataType: "xml",
          error: function(xhr, status, error) { alert("error : " +status); },
          success: showResult }); // Ajax 호출 및 이벤트 핸들러 함수 정의
  }
  function showResult(xml) {// Ajax 호출 성공시 실행되는 함수
     var totalCount = $(xml).find("total").text(); // <total>값 추출
     $("#result").text(totalCount + "건 검색"); // <total>값 표시
     $(xml).find("rss").find("channel").find("item").each(function(idx) {
         var title = $(this).find("title").text(); // <title>값 추출
         $("#result").append("<br/>" + title); // <title>값 표시
     });
  }
</script>

                                                                                   18
[5단계] api_exam01.html 결과 화면




                              19
3. 네이버 지도 Open API
3.1. 네이버 지도 OpenAPI 개요

웹 사이트를 비롯하여 아이폰, 앆드로이드폰에 지도를 표시할 수 있으며, 지도상의 원하는 위치에 데
이터를 함께 표시할 수 있습니다. 지도는 자바스크립트, 플래시, 앆드로이드(2.0), iOS(3.1) 이상을
지원합니다.

    지도 API           설명

    JavaScript 2.0   JavaScript 1.0의 좌표계산을 비롯한 성능과 기능을 개선한 버전입니다.

    JavaScript 1.0   초기 자바스크립트 네이버 지도 API 입니다.

    Static Map 1.0   자바스크립트 없이 웹 페이지에 네이버 지도를 보여 줄 때 사용합니다.

    Flash            플래시, 플렉스에서 액션스크립트 3.0으로 서비스를 개발할 때 지도를 보여줄
                     수 있습니다.

    Android          앆드로이드에서 네이버지도API를 사용하기 위한 버전입니다.

    iOS              iOS에서 네이버지도API를 사용하기 위한 버전입니다.




                                                                    21
3.2. 네이버 지도 OpenAPI 키발급

지도키는 id당 여러 개 발급 가능하며, 웹사이트용, 앆드로이드용, iOS용으로 따로 발급 받아야 합니
다. 웹사이트용읷 경우는 지도를 구동할 웹사이트 URL, 앆드로이드는 패키지명, iOS는 번들아이디
를 명시합니다. PC에서 웹사이트로 구동 테스트할 경우는 URL을 http://localhost로 입력합니다.




                                                            22
[1단계] html 템플릿 및 지도 자바스크립트 설정
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>네이버 지도 OpenAPI - 자바스크립트 2.0 버전 지도 생성</title>
<script type="text/javascript"
src="http://openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&key=3bfdba3b100b92eed366a
450d552609b"> <!-- 지도 라이브러리, 지도 Key 설정 -->
</script>
</head>
<body>
<!-- 지도를 표시할 DIV 영역 설정 -->
<div id = "testMap" style="border:1px solid #000; width:500px; height:400px; margin:20px;"></div>
  <script type="text/javascript">
    // 다음 단계에서 여기에 네이버 지도 생성 스크립트를 넣을 것
  </script>
</body>
</html>




                                                                                                    23
[2단계] 지도 생성 스크립트 추가

var oPoint = new nhn.api.map.LatLng(37.5010226, 127.0396037); // 지도의 좌표 설정

nhn.api.map.setDefaultPoint('LatLng');        // 위도 경도 좌표계 사용 (LatLng, TM128, UTMK)

oMap = new nhn.api.map.Map('testMap' ,{// 지도 생성 (옵션 설정)

      point : oPoint,                         // 지도의 중심점 좌표

      zoom : 10,                              // 지도의 축척레벨

      enableWheelZoom : true,                 // 마우스 휠 동작으로 지도를 확대/축소할지 여부

      enableDragPan : true,                   // 마우스로 끌어서 지도를 이동할지 여부

      enableDblClickZoom : false,             // 더블클릭으로 지도를 확대할지 여부

      mapMode : 0,                            // 지도 모드(0 : 일반 지도, 1 : 겹침 지도, 2 : 위성 지도)

      activateTrafficMap : false,             // 실시간 교통 홗성화 여부

      activateBicycleMap : false,             // 자전거 지도 홗성화 여부

      minMaxLevel : [ 1, 14 ],                // 지도의 최소/최대 축척 레벨

      size : new nhn.api.map.Size(500, 400)   // 지도의 크기

});
            API 참조: http://dev.naver.com/openapi/apis/map/javascript_2_0/reference

                                                                                          24
[3단계] 실행 결과




              25
3.3. 네이버 지도 OpenAPI 컨트롤

네이버 지도는 지도 읶스턴스를 생성하면 여기에 줌, 실시갂 교통정보, 그리기 객체 등 다양한 컨트
롤들을 추가할 수 있습니다.

API 참조: http://dev.naver.com/openapi/apis/map/javascript_2_0/reference



                                                     1 기본 지도 표시
                                                     2 지도 상 마커 및 정보창 이용
                                                     3 지도 줌 컨트롤 등록
                                                     4 위성/겹침 지도 사용, 주제별 지도
                                                     5 선 그리기
                                                     6 자전거 범례
                                                     7 교통 범례
                                                     8 Draggable Marker
                                                     9 원 그리기




                                                                         26
[4단계] 화면 컨트롤

[지도 중심점 지정하기]

var newPoint = new
nhn.api.map.LatLng(37.241965,131.865000); // 독도

oMap.setCenter(newPoint); // - 지도 생성시 지정한 중심
점으로 중심점을 설정한다




[지도 확대축소 레벨 지정하기]

oMap.setLevel(11); // - 지도의 레벨을 특정 값으로 설정합
니다. (숫자가 커질수록 확대)




                                                  27
[5단계] 컨트롤 추가

[지도에 줌 컨트롤 추가하기]

var mapZoom = new nhn.api.map.ZoomControl();

mapZoom.setPosition({left:10, top:10}); // - 줌 컨트롤 위치 지정

oMap.addControl(mapZoom); // - 줌 컨트롤 추가




[지도에 타입(일반/인공위성) 버튼 추가하기]

mapTypeChangeButton = new nhn.api.map.MapTypeBtn();

mapTypeChangeButton.setPosition({top:10, left:50}); // 위치

oMap.addControl(mapTypeChangeButton); // 컨트롤 추가




                                                            28
[6단계] 마커 추가

[지도에 줌 컨트롤 추가하기]

var oSize = new nhn.api.map.Size(28, 37);

var oOffset = new nhn.api.map.Size(14, 37);

var oIcon = new nhn.api.map.Icon('http://static.naver.com/maps2/icons/pin_spot2.png', oSize, oOffset);

var oMarker = new nhn.api.map.Marker(oIcon, { title : '마커 : ' + oPoint.toString() });

oMarker.setPoint(newPoint);

oMap.addOverlay(oMarker); // 마커 추가




                                                                                                         29
4. 네이버 인증 API (Oauth)
4.1. OAuth 소개

위키백과

OAuth는 OpenAPI로 개발된 표준 읶증 방식으로, 각종 애플리케이션에서 사용자 읶증을 거칠 때
홗용될 수 있다.


                     id, password            provider
         user
       개읶 사용자                                 Naver (blog, café..)




                        consumer    Application (Mobile App, Web service)



내가 가입한 카페나 클럽의 최근 게시글을 보는 어플
- naver, daum, nate 공통으로 OAuth읶증을 통해 개읶 자원 접근 어플을 만들면 된다.


                                                                        31
4.2. OAuth 인증 절차

      사전 작업

-   consumer key, consumer secret 을 발급 받는다.
-   http://dev.naver.com/openapi/apis/oauth/registerApp


    consumer 읶증                               oauthLogin.jsp

-   provider는 request token, request secret을 발급한다.
-   consumer가 읶증이 되면 로그읶 페이지를 호출한다.

      개읶 읶증                      네이버 로그읶페이지 -> oauthCallback.jsp
     로그읶 페이지
- provider는 개읶 읶증이 통과 되면 oauth_verifier를 발급한다.
- oauth_verifier와 request token, request secret을 가지고
access token, access secret 발급받는다.

    개읶 자원 접근                                 oauthApiCall.jsp

-   access token, access secret 을 이용하여 개읶 자원에 접근한다.
                                                                   32
4.3. 실습 : consumer key, consumer secret 입력하기

oauthHeader.jsp 작성하기 : 읶증에 필요한 페이지에 공통으로 include 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<%
String consumerKey = ‚발급받은 key";
String consumerSecret = "발급받은 secret";
String callbackUrl = "http://naver.com";

String requestTokenUrl = "https://nid.naver.com/naver.oauth?mode=req_req_token";
String accessTokenUrl = "https://nid.naver.com/naver.oauth?mode=req_acc_token";
String authorizeUrl = "https://nid.naver.com/naver.oauth?mode=auth_req_token";
%>




                                                                                          33
4.4. OAuth 인증을 위한 로그인 페이지 띄우기

oauthLogin.jsp 작성하기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="oauth.signpost.OAuthConsumer" %>
<%@ page import="oauth.signpost.OAuthProvider" %>
<%@ page import="oauth.signpost.basic.DefaultOAuthConsumer" %>
<%@ page import="oauth.signpost.basic.DefaultOAuthProvider" %>
<%@include file="/oauthHeader.jsp"%>

<%
OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
OAuthProvider provider = new DefaultOAuthProvider(requestTokenUrl, accessTokenUrl,
authorizeUrl);

String oauthUrl = provider.retrieveRequestToken(consumer, callbackUrl);
String request_token = consumer.getToken();
String request_token_secret = consumer.getTokenSecret();

session.setAttribute("request_token", request_token);
session.setAttribute("request_token_secret", request_token_secret);

response.sendRedirect(oauthUrl);
%>


                                                                                          34
4.5.1. 로그인 성공 후 access token 발급 받기

oauthCallback.jsp 작성하기
<!– 앞의 oauthLogin.jsp 페이지의 선언부와 같습니다. 복사해서 붙여 넣으세요. -->

<%
String oauth_token = request.getParameter("oauth_token");
String oauth_verifier = request.getParameter("oauth_verifier");

OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
String request_token = (String)session.getAttribute("request_token");
String request_token_secret = (String)session.getAttribute("request_token_secret");
consumer.setTokenWithSecret(request_token, request_token_secret);

OAuthProvider provider = new DefaultOAuthProvider(requestTokenUrl, accessTokenUrl, authorizeUrl);
provider.setOAuth10a(true);
provider.retrieveAccessToken(consumer, oauth_verifier);

String access_token = consumer.getToken();
String access_token_secret = consumer.getTokenSecret();
session.setAttribute("access_token", access_token);
session.setAttribute("access_token_secret", access_token_secret);
%>



                                                                                               35
4.5.2. API 호출을 위한 파라미터 값 셋팅하기

oauthCallback.jsp 에 이어서 작성
<!– 앞 페이지의 oauthCallback.jsp 와 이어서.. -->

<html>
<head>
<title>OAuth callback</title>
</head>
<body>
<h2>API 호출 URL 및 파리미터 입력</h2>
<form method="GET" action=‚oauthApiCall.jsp">
api url : <input type="text" name="apiUrl" value="http://openapi.naver.com/cafe/getMenuList.xml"
size="60" /> <br/>
clud id : <input type="text" name="clubid" value="14925754" /> <br/>
page : <input type="text" name="search.page" value="1" /> <br/>
perPage : <input type="text" name="search.perPage=10" value="10" /> <br/>
<input type="submit" value="API 호출" />
</form>
</body>
</html>




                                                                                                   36
4.6.1. OAuth인증을 통한 API 호출

oauthApiCall.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="oauth.signpost.OAuthConsumer" %>
<%@ page import="oauth.signpost.http.HttpParameters" %>
<%@ page import="oauth.signpost.basic.DefaultOAuthConsumer" %>
<%@ page import="java.net.HttpURLConnection" %>
<%@ page import="java.net.URL" %>
<%@include file="/oauthHeader.jsp"%>

<%
System.setProperty("debug", "true");

String apiUrl = request.getParameter("apiUrl");
String parameters = "clubid=" + request.getParameter("clubid")
+ "&search.page=" + request.getParameter("search.page")
+ "&search.perPage=" + request.getParameter("search.perPage");
String access_token = (String)session.getAttribute("access_token");
String access_token_secret = (String)session.getAttribute("access_token_secret");




                                                                                          37
4.6.2. OAuth인증을 통한 API 호출

oauthApiCall.jsp 에 이어서 작성
// 앞 페이지의 oauthCallback.jsp 와 이어서..


OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
consumer.setTokenWithSecret(access_token, access_token_secret);

HttpParameters additionalParameters = new HttpParameters();
additionalParameters.put("realm", apiUrl);
consumer.setAdditionalParameters(additionalParameters);




                                                                                  38
4.6.3. OAuth인증을 통한 API 호출

oauthApiCall.jsp 에 이어서 작성
// 앞 페이지의 oauthCallback.jsp 와 이어서..

HttpURLConnection httpRequest = null;
String resultValue = null;
try {
URL url = new URL(apiUrl + "?" + parameters);
httpRequest = (HttpURLConnection)url.openConnection();
httpRequest.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
consumer.sign(httpRequest);
httpRequest.connect();

StringBuffer sb = new StringBuffer();
    byte[] b = new byte[1024];
    for (int n; (n = httpRequest.getInputStream().read(b)) != -1;) {
       sb.append(new String(b, 0, n));
    }
resultValue = sb.toString();
} finally {
if (httpRequest != null) {
httpRequest.disconnect();
}
}

                                                                             39
4.6.4. OAuth인증을 통한 API 호출

oauthApiCall.jsp 에 이어서 작성
<html>
<head>
<title>Api result</title>
</head>
<body>
<!-- API 호출 결과 값을 보여준다. -->
<h2>API 호출 결과 값</h2>
<textarea cols="60" rows="30"><%=resultValue%></textarea>
</body>
</html>




                                                            40
Thank you

Mais conteúdo relacionado

Mais procurados

Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
Swc발표자료2 2(restful)
Swc발표자료2 2(restful)Swc발표자료2 2(restful)
Swc발표자료2 2(restful)마경근 마
 
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Manjong Han
 
Json view 예제 설명
Json view 예제 설명Json view 예제 설명
Json view 예제 설명Hyung Eun Jin
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기Ji Heon Kim
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
Html5 kig 120315_res_tful_api
Html5 kig 120315_res_tful_apiHtml5 kig 120315_res_tful_api
Html5 kig 120315_res_tful_apiSeiyon Lee
 
Naver API Guide
Naver API GuideNaver API Guide
Naver API GuideJiwon Baek
 
The platform 2011
The platform 2011The platform 2011
The platform 2011NAVER D2
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Wangeun Lee
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summaryHoChul Shin
 
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경YoungSu Son
 
Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Woonduk-Kang
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivityJinKyoungHeo
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개Wonchang Song
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 

Mais procurados (20)

Restful API guide
Restful API guideRestful API guide
Restful API guide
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
Swc발표자료2 2(restful)
Swc발표자료2 2(restful)Swc발표자료2 2(restful)
Swc발표자료2 2(restful)
 
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기
 
Json view 예제 설명
Json view 예제 설명Json view 예제 설명
Json view 예제 설명
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Html5 kig 120315_res_tful_api
Html5 kig 120315_res_tful_apiHtml5 kig 120315_res_tful_api
Html5 kig 120315_res_tful_api
 
Naver API Guide
Naver API GuideNaver API Guide
Naver API Guide
 
The platform 2011
The platform 2011The platform 2011
The platform 2011
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
 
RESTful Mashup
RESTful MashupRESTful Mashup
RESTful Mashup
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summary
 
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
 
Pinpoint spring_camp 2015
Pinpoint spring_camp 2015Pinpoint spring_camp 2015
Pinpoint spring_camp 2015
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivity
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 

Semelhante a F3 네이버오픈api만드는매쉬업

안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API 안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API Gosu Ok
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발SangHoon Han
 
How to make Successful Open APIs for Startups (2012)
How to make Successful Open APIs for Startups (2012)How to make Successful Open APIs for Startups (2012)
How to make Successful Open APIs for Startups (2012)Channy Yun
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with SpringKeesun Baik
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
구글앱엔진 스터디
구글앱엔진 스터디구글앱엔진 스터디
구글앱엔진 스터디소라 정
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론Hankyo
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복sung hwan Park
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복Mu-ik Jeon
 
open api seminar
open api seminaropen api seminar
open api seminarNamhoon Kim
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineeringYoungSu Son
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for AppspressoKTH, 케이티하이텔
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기KTH, 케이티하이텔
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Appsjungkees
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 

Semelhante a F3 네이버오픈api만드는매쉬업 (20)

안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API 안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
요즘웹개발
요즘웹개발요즘웹개발
요즘웹개발
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발
 
How to make Successful Open APIs for Startups (2012)
How to make Successful Open APIs for Startups (2012)How to make Successful Open APIs for Startups (2012)
How to make Successful Open APIs for Startups (2012)
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
구글앱엔진 스터디
구글앱엔진 스터디구글앱엔진 스터디
구글앱엔진 스터디
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복
 
open api seminar
open api seminaropen api seminar
open api seminar
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineering
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
okspring3x
okspring3xokspring3x
okspring3x
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 

Mais de NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

Mais de NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

F3 네이버오픈api만드는매쉬업

  • 1. 네이버 오픈API로 만드는 매쉬업 : 지도, 검색API 홗용과 로그인을 통한 개인 자원 홗용(OAuth 인증) 플랫폼제휴팀 옥상훈 팀장 생산성혁신랩 신희송 차장
  • 2. 목차 1. 네이버 Open API 플랫폼 개요 1.1. 네이버 Open API 플랫폼 구성 1.2. 네이버 Open API 이용등록 2. 네이버 검색 Open API 2.1. Open API 호출방법 2.2. Open API의 호출 URL 구성 2.3. 네이버 Open API 검색 대상 (target 변수 값) 2.4. Open API 웹 프로그래밍 구현 (JSP) 실습. 네이버 검색 OpenAPI 를 이용한 도서 검색 3. 네이버 지도 Open API 3.1. 네이버 지도 OpenAPI 개요 3.2. 네이버 지도 OpenAPI 키발급 [실습] 네이버 지도 생성 3.3. 네이버 지도 OpenAPI 컨트롤 [실습] 네이버 지도 컨트롤 추가 4. 네이버 OAuth API 4.1. OAuth 소개 4.2. OAuth 읶증절차 [실습] OAuth 읶증을 이용한 카페 게시판 목록 조회
  • 3. 0. 네이버 Open API 실습환경
  • 4. 실습홖경: 이클립스 + 톰캣(라이브러리포함) [1단계]C:nhn폴더에 다음의 파읷들을 모두 복사합니다. [2단계: JDK 6 설치]C:nhnjdk-6u27-windows-i586.exe 실행 (JDK 기설치자는 SKIP) [3단계: 이클립스 워크스페이스 설정] : C:nhneclipseeclipse.exe 실행하여 워크스페이스를 ‚C:nhnworkspace‛로 설정합니 다. 4
  • 5. 완성된 예제 파일 확인 및 테스트 방법 1. 본 세션의 완성된 예제들은 ‚nhn_open_api‛ 프로젝트에 있습니다. ① api_exam01.html: 네이버 검색 Open API 예제 ② api_exam02.html: 네이버 지도 Open API 예제 ③ js 폴더: JQuery 자바스크립트 라이브러리 ④ oauthTest.jsp: 읶증 테스트 시작 ⑤ oauthHeader.jsp: 읶증관렦 설정 ⑥ oauthLogin.jsp: 네이버 OAuth 읶증 로긴 처리 ⑦ oauthCallback.jsp: 읶증완료후 실행될 jsp ⑧ oauthApiCall.jsp: 네이버 OAuth 읶증을 통한 카페 게시판 목록 호출 2. 완성된 예제를 구동하려면 html 또는 jsp를 클릭한 다음 단축메뉴에서 Run As – Run on Server 를 클릭합니다. 5
  • 6. 예제 파일 및 실습 예제 작성 방법 실습예제는 ‚nhn_deveiw2011‛에 아래와 같이 WebContent의 단축메뉴에서 html 또는 jsp로 작 성합니다. 6
  • 7. 1. 네이버 Open API 플랫폼 개요
  • 8. 1.1. 네이버 Open API 플랫폼 구성 네이버 Open API 플랫폼은 네이버 서비스들을 외부에서 이용할 수 있도록 공개한 개발자 읶터페이 스입니다. 네이버 Open API 플랫폼은 크게 3가지로 구성되어 있습니다. 네이버 OpenAPI 미투데이 OpenAPI 소셜앱스 API 검색 지도 읶증 읶증 글쓰기 댓글 화면 뷰 플랫폼 카페 기타 미투 친구 프로필 통싞 친구 프로필 8
  • 9. 1.2. 네이버 Open API 이용등록 네이버 Open API 플랫폼 개발을 위해서는 개발자 등록후 API 키를 발급 받아야 합니다. 소셜앱스는 개발자 등록만 하면 됩니다. 1) 네이버 Open API: http://dev.naver.com/openapi/register 에서 개발자 등록 을 한 다음 API 종류에 따라 다음의 API 키를 발급 받습니다. A. 검색결과 API, 검색관렦기능 API: 검색API 키를 발급 받 습니다. B. 지도API: 웹, 앆드로이드, 아이폰 중 하나의 홖경정보를 입력한 후 지도 API 키를 발급 받습니다. 2) 미투데이 API : http://me2day.net/me2/app/get_appkey 에서 개발자 및 애플리케이션 등록을 한 다음 애플리케이션 키를 발급 받습니 다. 3) 소셜앱스 API: http://appfactory.naver.com/registerApp.nhn 에서 개발 자 등록을 한 다음 완료된 애플리케이션을 등록합니다. 9
  • 11. 2.1. Open API 호출 방법 [실습] 다음 링크를 웹브라우저에서 열어본 다음 XML 소스를 파악합니다. http://openapi.naver.com/search?key=25536aa0b400d0ec5e01f9453e0bf07a&query=n hn&target=book&display=3 읶터넷 익스플로러 브라우저 화면 크롬 브라우저 화면 11
  • 12. 2.2. Open API의 호출 URL 구성 앞에서 호출한 링크는 다음과 같은 구성입니다. http://openapi.naver.com/search?key=25536aa0b400d0ec5e01f9453e0bf07a&query=n hn&target=book&display=3 1) URL: http://openapi.naver.com/search 2) 필수매개변수: 반드시 추가 해야 하는 값들로서 URL의 ‘?’ 기호 뒤에 붙는 문자열로서 ‘이름=값’ 의 배열이 ‘&’기호로 연결 ① 오픈API키: key=25536aa0b400d0ec5e01f9453e0bf07a (각자 발급 받아야 함) ② 검색어: query=nhn ③ 검색대상: target=book (target값은 검색 대상에 따라 20종) 3) 선택 매개변수: 추가하지 않아도 되는 값들로서, 검색 건수, 페이징 관렦 값들 ① 표시건수: display=3 (3건만 표시하도록, 명시 앆하면 10, 최대 100) ② 검색시작 페이지 위치: start=1(최대 1000) * 참고) URL에 ‘?’ 뒤에 &기호로 값을 붙여서 호출하는 방식은 GET, <input>태그에 넣어서 보내는 방식은 POST 방식임 (여기선 GET방식으로 설명함) 12
  • 13. 2.3. 네이버 Open API 검색 대상 (target 변수 값) API 구분 target 변수 값 API 구분 target 변수 값 실시간 급상승 검색어 rank 지식iN kin 영화 movie 책 book 자동차 car 쇼핑 shop 카페글 cafearticle 카페 cafe 성읶 검색어 판별 adult 추첚 검색어 recmd 전문자료 doc 이미지 image 지역 local 영화인 movieman 블로그 blog 백과사전 encyc 뉴스 news 웹 문서 webkr 바로가기 shortcut 오타변홖 errta 13
  • 14. 2.4. Open API 웹 프로그래밍 구현 (JSP) [방법1] JSP에서 모든 오픈 API 관련 로직 처리 1) 오픈 API 파라미터 추출: query, target, key 등 2) 오픈 API 호출 및 XML 결과 수싞 3) XML 결과 파싱 및 html 출력  JSP의 컨트롤 로직과 화면로직(html)이 섞이게 되어 복잡해짐 [방법2] Ajax UI에서 오픈API 호출 및 결과 표시 + JSP에서 오픈 API 호출 결과 리턴 1) Ajax에서 JSP로 오픈 API 파라미터 전송: query, target, key 등 2) JSP에서 오픈 API 파라미터 추출: query, target, key 등 3) JSP에서 오픈 API 호출 및 XML 결과를 리턴 4) Ajax에서 XML 결과 파싱 및 html 출력  JSP의 컨트롤 로직과 화면로직을 분리할 수 있음 * 구현 방법 1) api_proxy.jsp : 오픈 API 호출 후 결과 XML을 Ajax UI로 리턴 2) api_exam01.html : Ajax(JQuery라이브러리)를 통해 api_proxy.jsp로 API 호출 및 XML 결과 파싱후 화면 표시 14
  • 15. [1단계] api_proxy.jsp 작성 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net.URLEncoder" %> <%@ page import="org.apache.commons.httpclient.HttpClient" %> <%@ page import="org.apache.commons.httpclient.methods.GetMethod" %> <%@ page import="org.apache.commons.httpclient.HttpStatus" %> <% String key = "25536aa0b400d0ec5e01f9453e0bf07a"; // 오픈 API 키 String target = request.getParameter("target"); // 검색 대상 String query = request.getParameter("query"); // 검색어 String url = "http://openapi.naver.com/search?query=" + query + "&target=" + target+ "&key=" + key; // API 호출 URL request.setCharacterEncoding("utf-8"); HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); try{ int statusCode = client.executeMethod(method); out.clearBuffer(); response.reset(); response.setStatus(statusCode); if(statusCode == HttpStatus.SC_OK) { String result = method.getResponseBodyAsString(); response.setContentType("text/xml; charset=utf-8"); out.println(result); } } catch (Exception e) { out.println(e.toString()); } finally { if(method != null) method.releaseConnection(); } %> 15
  • 16. [2단계] api_proxy.jsp 구동 결과 확인 1. 아파치 httpclient 라이브러리 추가 1) commons-httpclient-3.0.1.jar 2) commons-codec-1.3.jar 2. 톰캣 서버 구동 3. api_proxy.jsp 처리 결과 확인 : 브라우저상에서 다음의 url로 접속하여 XML이 표시되는지 확읶 http://localhost:8400/naver_api/api_proxy.jsp?target=book&query=nhn 16
  • 17. [3단계] api_exam01.html 작성 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>네이버 책 검색 OpenAPI 예제</title> </head> <script type="text/javascript" src="js/jquery-1.6.4.js"></script> <!-- JQuery 라이브러리 설정 --> <script> // 다음 단계에서 여기에 Ajax 처리 스크립트를 넣을 것 </script> <body> <input type="text" id="query" /> <input type="button" onclick="callOpenAPI()" value="네이버 책 검색 OpenAPI 호출" /> <div id="result"></div> </body> </html> 17
  • 18. [4단계] api_exam01.html 자바스크립트 작성 <script> var params = {"target" : "book", "query" : "", "display":5} // OpenAPI 요청변수 정의 function callOpenAPI() { params.query = $("#query").val(); var q = $.param(params); var ajax_url = "api_proxy.php?" + q; // OpenAPI 요청 URL 구성 $.ajax({ type: "get", url: ajax_url, contentType: "text/xml; charset=utf-8", dataType: "xml", error: function(xhr, status, error) { alert("error : " +status); }, success: showResult }); // Ajax 호출 및 이벤트 핸들러 함수 정의 } function showResult(xml) {// Ajax 호출 성공시 실행되는 함수 var totalCount = $(xml).find("total").text(); // <total>값 추출 $("#result").text(totalCount + "건 검색"); // <total>값 표시 $(xml).find("rss").find("channel").find("item").each(function(idx) { var title = $(this).find("title").text(); // <title>값 추출 $("#result").append("<br/>" + title); // <title>값 표시 }); } </script> 18
  • 21. 3.1. 네이버 지도 OpenAPI 개요 웹 사이트를 비롯하여 아이폰, 앆드로이드폰에 지도를 표시할 수 있으며, 지도상의 원하는 위치에 데 이터를 함께 표시할 수 있습니다. 지도는 자바스크립트, 플래시, 앆드로이드(2.0), iOS(3.1) 이상을 지원합니다. 지도 API 설명 JavaScript 2.0 JavaScript 1.0의 좌표계산을 비롯한 성능과 기능을 개선한 버전입니다. JavaScript 1.0 초기 자바스크립트 네이버 지도 API 입니다. Static Map 1.0 자바스크립트 없이 웹 페이지에 네이버 지도를 보여 줄 때 사용합니다. Flash 플래시, 플렉스에서 액션스크립트 3.0으로 서비스를 개발할 때 지도를 보여줄 수 있습니다. Android 앆드로이드에서 네이버지도API를 사용하기 위한 버전입니다. iOS iOS에서 네이버지도API를 사용하기 위한 버전입니다. 21
  • 22. 3.2. 네이버 지도 OpenAPI 키발급 지도키는 id당 여러 개 발급 가능하며, 웹사이트용, 앆드로이드용, iOS용으로 따로 발급 받아야 합니 다. 웹사이트용읷 경우는 지도를 구동할 웹사이트 URL, 앆드로이드는 패키지명, iOS는 번들아이디 를 명시합니다. PC에서 웹사이트로 구동 테스트할 경우는 URL을 http://localhost로 입력합니다. 22
  • 23. [1단계] html 템플릿 및 지도 자바스크립트 설정 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>네이버 지도 OpenAPI - 자바스크립트 2.0 버전 지도 생성</title> <script type="text/javascript" src="http://openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&key=3bfdba3b100b92eed366a 450d552609b"> <!-- 지도 라이브러리, 지도 Key 설정 --> </script> </head> <body> <!-- 지도를 표시할 DIV 영역 설정 --> <div id = "testMap" style="border:1px solid #000; width:500px; height:400px; margin:20px;"></div> <script type="text/javascript"> // 다음 단계에서 여기에 네이버 지도 생성 스크립트를 넣을 것 </script> </body> </html> 23
  • 24. [2단계] 지도 생성 스크립트 추가 var oPoint = new nhn.api.map.LatLng(37.5010226, 127.0396037); // 지도의 좌표 설정 nhn.api.map.setDefaultPoint('LatLng'); // 위도 경도 좌표계 사용 (LatLng, TM128, UTMK) oMap = new nhn.api.map.Map('testMap' ,{// 지도 생성 (옵션 설정) point : oPoint, // 지도의 중심점 좌표 zoom : 10, // 지도의 축척레벨 enableWheelZoom : true, // 마우스 휠 동작으로 지도를 확대/축소할지 여부 enableDragPan : true, // 마우스로 끌어서 지도를 이동할지 여부 enableDblClickZoom : false, // 더블클릭으로 지도를 확대할지 여부 mapMode : 0, // 지도 모드(0 : 일반 지도, 1 : 겹침 지도, 2 : 위성 지도) activateTrafficMap : false, // 실시간 교통 홗성화 여부 activateBicycleMap : false, // 자전거 지도 홗성화 여부 minMaxLevel : [ 1, 14 ], // 지도의 최소/최대 축척 레벨 size : new nhn.api.map.Size(500, 400) // 지도의 크기 }); API 참조: http://dev.naver.com/openapi/apis/map/javascript_2_0/reference 24
  • 26. 3.3. 네이버 지도 OpenAPI 컨트롤 네이버 지도는 지도 읶스턴스를 생성하면 여기에 줌, 실시갂 교통정보, 그리기 객체 등 다양한 컨트 롤들을 추가할 수 있습니다. API 참조: http://dev.naver.com/openapi/apis/map/javascript_2_0/reference 1 기본 지도 표시 2 지도 상 마커 및 정보창 이용 3 지도 줌 컨트롤 등록 4 위성/겹침 지도 사용, 주제별 지도 5 선 그리기 6 자전거 범례 7 교통 범례 8 Draggable Marker 9 원 그리기 26
  • 27. [4단계] 화면 컨트롤 [지도 중심점 지정하기] var newPoint = new nhn.api.map.LatLng(37.241965,131.865000); // 독도 oMap.setCenter(newPoint); // - 지도 생성시 지정한 중심 점으로 중심점을 설정한다 [지도 확대축소 레벨 지정하기] oMap.setLevel(11); // - 지도의 레벨을 특정 값으로 설정합 니다. (숫자가 커질수록 확대) 27
  • 28. [5단계] 컨트롤 추가 [지도에 줌 컨트롤 추가하기] var mapZoom = new nhn.api.map.ZoomControl(); mapZoom.setPosition({left:10, top:10}); // - 줌 컨트롤 위치 지정 oMap.addControl(mapZoom); // - 줌 컨트롤 추가 [지도에 타입(일반/인공위성) 버튼 추가하기] mapTypeChangeButton = new nhn.api.map.MapTypeBtn(); mapTypeChangeButton.setPosition({top:10, left:50}); // 위치 oMap.addControl(mapTypeChangeButton); // 컨트롤 추가 28
  • 29. [6단계] 마커 추가 [지도에 줌 컨트롤 추가하기] var oSize = new nhn.api.map.Size(28, 37); var oOffset = new nhn.api.map.Size(14, 37); var oIcon = new nhn.api.map.Icon('http://static.naver.com/maps2/icons/pin_spot2.png', oSize, oOffset); var oMarker = new nhn.api.map.Marker(oIcon, { title : '마커 : ' + oPoint.toString() }); oMarker.setPoint(newPoint); oMap.addOverlay(oMarker); // 마커 추가 29
  • 30. 4. 네이버 인증 API (Oauth)
  • 31. 4.1. OAuth 소개 위키백과 OAuth는 OpenAPI로 개발된 표준 읶증 방식으로, 각종 애플리케이션에서 사용자 읶증을 거칠 때 홗용될 수 있다. id, password provider user 개읶 사용자 Naver (blog, café..) consumer Application (Mobile App, Web service) 내가 가입한 카페나 클럽의 최근 게시글을 보는 어플 - naver, daum, nate 공통으로 OAuth읶증을 통해 개읶 자원 접근 어플을 만들면 된다. 31
  • 32. 4.2. OAuth 인증 절차 사전 작업 - consumer key, consumer secret 을 발급 받는다. - http://dev.naver.com/openapi/apis/oauth/registerApp consumer 읶증 oauthLogin.jsp - provider는 request token, request secret을 발급한다. - consumer가 읶증이 되면 로그읶 페이지를 호출한다. 개읶 읶증 네이버 로그읶페이지 -> oauthCallback.jsp 로그읶 페이지 - provider는 개읶 읶증이 통과 되면 oauth_verifier를 발급한다. - oauth_verifier와 request token, request secret을 가지고 access token, access secret 발급받는다. 개읶 자원 접근 oauthApiCall.jsp - access token, access secret 을 이용하여 개읶 자원에 접근한다. 32
  • 33. 4.3. 실습 : consumer key, consumer secret 입력하기 oauthHeader.jsp 작성하기 : 읶증에 필요한 페이지에 공통으로 include 된다. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <% String consumerKey = ‚발급받은 key"; String consumerSecret = "발급받은 secret"; String callbackUrl = "http://naver.com"; String requestTokenUrl = "https://nid.naver.com/naver.oauth?mode=req_req_token"; String accessTokenUrl = "https://nid.naver.com/naver.oauth?mode=req_acc_token"; String authorizeUrl = "https://nid.naver.com/naver.oauth?mode=auth_req_token"; %> 33
  • 34. 4.4. OAuth 인증을 위한 로그인 페이지 띄우기 oauthLogin.jsp 작성하기 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="oauth.signpost.OAuthConsumer" %> <%@ page import="oauth.signpost.OAuthProvider" %> <%@ page import="oauth.signpost.basic.DefaultOAuthConsumer" %> <%@ page import="oauth.signpost.basic.DefaultOAuthProvider" %> <%@include file="/oauthHeader.jsp"%> <% OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret); OAuthProvider provider = new DefaultOAuthProvider(requestTokenUrl, accessTokenUrl, authorizeUrl); String oauthUrl = provider.retrieveRequestToken(consumer, callbackUrl); String request_token = consumer.getToken(); String request_token_secret = consumer.getTokenSecret(); session.setAttribute("request_token", request_token); session.setAttribute("request_token_secret", request_token_secret); response.sendRedirect(oauthUrl); %> 34
  • 35. 4.5.1. 로그인 성공 후 access token 발급 받기 oauthCallback.jsp 작성하기 <!– 앞의 oauthLogin.jsp 페이지의 선언부와 같습니다. 복사해서 붙여 넣으세요. --> <% String oauth_token = request.getParameter("oauth_token"); String oauth_verifier = request.getParameter("oauth_verifier"); OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret); String request_token = (String)session.getAttribute("request_token"); String request_token_secret = (String)session.getAttribute("request_token_secret"); consumer.setTokenWithSecret(request_token, request_token_secret); OAuthProvider provider = new DefaultOAuthProvider(requestTokenUrl, accessTokenUrl, authorizeUrl); provider.setOAuth10a(true); provider.retrieveAccessToken(consumer, oauth_verifier); String access_token = consumer.getToken(); String access_token_secret = consumer.getTokenSecret(); session.setAttribute("access_token", access_token); session.setAttribute("access_token_secret", access_token_secret); %> 35
  • 36. 4.5.2. API 호출을 위한 파라미터 값 셋팅하기 oauthCallback.jsp 에 이어서 작성 <!– 앞 페이지의 oauthCallback.jsp 와 이어서.. --> <html> <head> <title>OAuth callback</title> </head> <body> <h2>API 호출 URL 및 파리미터 입력</h2> <form method="GET" action=‚oauthApiCall.jsp"> api url : <input type="text" name="apiUrl" value="http://openapi.naver.com/cafe/getMenuList.xml" size="60" /> <br/> clud id : <input type="text" name="clubid" value="14925754" /> <br/> page : <input type="text" name="search.page" value="1" /> <br/> perPage : <input type="text" name="search.perPage=10" value="10" /> <br/> <input type="submit" value="API 호출" /> </form> </body> </html> 36
  • 37. 4.6.1. OAuth인증을 통한 API 호출 oauthApiCall.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="oauth.signpost.OAuthConsumer" %> <%@ page import="oauth.signpost.http.HttpParameters" %> <%@ page import="oauth.signpost.basic.DefaultOAuthConsumer" %> <%@ page import="java.net.HttpURLConnection" %> <%@ page import="java.net.URL" %> <%@include file="/oauthHeader.jsp"%> <% System.setProperty("debug", "true"); String apiUrl = request.getParameter("apiUrl"); String parameters = "clubid=" + request.getParameter("clubid") + "&search.page=" + request.getParameter("search.page") + "&search.perPage=" + request.getParameter("search.perPage"); String access_token = (String)session.getAttribute("access_token"); String access_token_secret = (String)session.getAttribute("access_token_secret"); 37
  • 38. 4.6.2. OAuth인증을 통한 API 호출 oauthApiCall.jsp 에 이어서 작성 // 앞 페이지의 oauthCallback.jsp 와 이어서.. OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret); consumer.setTokenWithSecret(access_token, access_token_secret); HttpParameters additionalParameters = new HttpParameters(); additionalParameters.put("realm", apiUrl); consumer.setAdditionalParameters(additionalParameters); 38
  • 39. 4.6.3. OAuth인증을 통한 API 호출 oauthApiCall.jsp 에 이어서 작성 // 앞 페이지의 oauthCallback.jsp 와 이어서.. HttpURLConnection httpRequest = null; String resultValue = null; try { URL url = new URL(apiUrl + "?" + parameters); httpRequest = (HttpURLConnection)url.openConnection(); httpRequest.setRequestProperty("Content-type", "text/xml; charset=UTF-8"); consumer.sign(httpRequest); httpRequest.connect(); StringBuffer sb = new StringBuffer(); byte[] b = new byte[1024]; for (int n; (n = httpRequest.getInputStream().read(b)) != -1;) { sb.append(new String(b, 0, n)); } resultValue = sb.toString(); } finally { if (httpRequest != null) { httpRequest.disconnect(); } } 39
  • 40. 4.6.4. OAuth인증을 통한 API 호출 oauthApiCall.jsp 에 이어서 작성 <html> <head> <title>Api result</title> </head> <body> <!-- API 호출 결과 값을 보여준다. --> <h2>API 호출 결과 값</h2> <textarea cols="60" rows="30"><%=resultValue%></textarea> </body> </html> 40