SlideShare a Scribd company logo
Naver API for Android

S.O.LAB develop by 이상온
네이버 오픈API를 활용한 백과사전 앱
목표 : 네이버 오픈API를 활용하여 백과사전 검색 Android App을 만든다.

Step 1
네이버 개발자센터 등록및 키 발급

               http://dev.naver.com/
오픈API -> 검색어API -> 백과사전
키 등록/관리 -> 검색API -> 키추가
키 등록/관리 -> 검색API -> 키추가
키 등록/관리 -> 검색API -> 키추가




  검색API 사용을 위한 키(key)는 바로 발급이 된다.
하루에 사용할수 있는 쿼리의 제한이 있다. 하루25000쿼리
네이버API 발급키 이용한 TEST쿼리
- 샘플 URL
'독도'를 검색할 경우 :
http://openapi.naver.com/search?key= 14a5a7f022650cc46f4a20867abb4fde
&query=%EB%8F%85%EB%8F%84&target=encyc&start=1&display=10
네이버API 쿼리 결과 코드
<?xml version="1.0" encoding="UTF-8" ?>
- <rss version="2.0">
- <channel>
<title>Naver Open API - encyc ::'독도'</title>
<link>http://search.naver.com</link>
<description>Naver Search Result</description>
<lastBuildDate>Mon, 20 Jul 2009 13:11:39 +0900</lastBuildDate>
<total>189</total>
<start>1</start>
<display>10</display>
- <item>
               <title><b>독도</b></title>
               <link>http://openapi.naver.com/l?AAADXHsQqAIBRA0a95jmJq5uJQlP8R+kKH1MQC/76W4A7ntl7QYHLdkTt6
IyepOLlurN3AtoC2oMcfkoSKhwmtFRAzcPs1MEbT/mClLp//hwTC+uyiB7FKrUb1Art54r9nAAAA</link>
               <description>경상북도 울릉군 울릉읍 <b>독도</b>리에 있는 섬. | 위치 : 경상북도 울릉군 울릉읍 <b>독도</b>리
1~96 번지 | 경위도 : 동도(동경 131도 52분 10.4초, 북위 37도 14분 26.8초), 서도(동경 131도 51분 54.6초, 북위 37도 14분 30.6초) |
면적 : 187,554㎡(동...</description>
               <thumbnail>http://sstatic.naver.com/search/100_thumb_nx3/7/1304007.jpg</thumbnail>
</item>
- <item>
               <title><b>독도</b></title>
               <link>http://openapi.naver.com/l?AAACupLEi1Tc1LrkxWK81MsTUxNzEzUissTS2qtFV1dVK1cFO1MIUxTNQyi
lLTbDNKSgpUjR1VjdyAKDtfrzwzO7MgNSUzUS+/KB0oBOKDJU2B+oxMLUAsoCEoXBMAOybjnngAAAA=</link>
               <description> <b>독도</b>(獨島)는 동해 가운데, 대한민국울릉도 동남쪽에 있는 섬으로, 동도와 서도를 포함하여 총
91개의 크고 작은 섬들로 이루어져 있다.[1][2] 해방 이후 현재까지 대한민국이 실효 지배하고 있으며, 행정구역 상으
로 ...</description>
               <thumbnail />
</item>


개별 검색 결과이며, title, link, description, thumbnail 을 포함합니다
네이버API 백과사전 앱 실습

Step 2
Android app 생성및 화면 구성
네이버API 백과사전 앱 실습
네이버API 백과사전 앱 실습
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout android:orientation="vertical" android:layout_width="wrap_content"
  android:layout_height="wrap_content">

      <LinearLayout android:orientation="horizontal"
  android:layout_width="wrap_content" android:layout_height="wrap_content">
   <EditText android:id="@+id/input01" android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:hint="Enter URL String ..."
  android:textSize="14sp" />
   <Button
       android:id="@+id/requestBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Request"
        android:textSize="14sp"
        android:textStyle="bold" />
   </LinearLayout>
      <ScrollView android:layout_width="wrap_content"
  android:layout_height="wrap_content">
   <TextView android:id="@+id/txtMsg" android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:background="#ff99ccee"
  android:textColor="#ff0000ff" android:textSize="12sp" />
   </ScrollView>
  </LinearLayout>
  </RelativeLayout>
네이버API 백과사전 앱 실습

  Step 3
  MainActivity.java coding

public static String defaultUrl = "http://openapi.naver.com/search";
static final String mykeycode =“****************************";

final EditText input01 = (EditText)findViewById(R.id.input01);
      input01.setText("apple");

    final TextView txtMsg = (TextView) findViewById(R.id.txtMsg);

    Button requestBtn = (Button) findViewById(R.id.requestBtn);
    requestBtn.setOnClickListener(new OnClickListener() {
       @SuppressWarnings("deprecation")
public void onClick(View v) {
         String tempquery = input01.getText().toString();
         String makeURL="";

          makeURL = String.format(defaultUrl + "?key=%s&query=%s&target=encyc&start=1&display=10",
          mykeycode ,
  URLEncoder.encode(tempquery));
          txtMsg.setText(makeURL);
          String output = request(makeURL);
          txtMsg.setText(output);
        }
    });
네이버API 백과사전 앱 실습
private String request(String urlStr) {
    StringBuilder output = new StringBuilder();
    try {
       URL url = new URL(urlStr);
       HttpURLConnection conn = (HttpURLConnection)url.openConnection();
       if (conn != null) {
           conn.setConnectTimeout(10000);
           conn.setRequestMethod("GET");
           conn.setDoInput(true);
           conn.setDoOutput(true);

         int resCode = conn.getResponseCode();
         if (resCode == HttpURLConnection.HTTP_OK) {
             BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
             String line = null;
             while(true) {
               line = reader.readLine();
               if (line == null) {
                   break;
               }
               output.append(line + "n");
             }
             reader.close();
             conn.disconnect();
         }
        }
     } catch(Exception ex) {
        Log.e("SampleHTTP", "Exception in processing response.", ex);
     }

     return output.toString();
 }
네이버API 백과사전 앱 실습
네이버API 백과사전 앱 실습

  Step 4
  DOM parser 를 이용하여 파싱된 데이터 보여주기

public static String defaultUrl = "http://openapi.naver.com/search";
static final String mykeycode =“******************************";
public static String parsingresult="";

String xml = output.toString();

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));
Document doc = builder.parse(istream);

Element order = doc.getDocumentElement(); //루트 엘리먼트를 구한다.
NodeList items = order.getElementsByTagName("title");
네이버API 백과사전 앱 실습
private String request(String urlStr) {

    StringBuilder output = new StringBuilder();

    try {
       URL url = new URL(urlStr);
       HttpURLConnection conn = (HttpURLConnection)url.openConnection();
       if (conn != null) {
           conn.setConnectTimeout(10000);
           conn.setRequestMethod("GET");
           conn.setDoInput(true);
           conn.setDoOutput(true);

          int resCode = conn.getResponseCode();
          if (resCode == HttpURLConnection.HTTP_OK) {
              BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
              String line = null;
              while(true) {
                 line = reader.readLine();
                 if (line == null) {
                     break;
                 }
                 output.append(line + "n");
              }
              reader.close();
              conn.disconnect();
          }
       }
       String xml = output.toString();
네이버API 백과사전 앱 실습
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));
Document doc = builder.parse(istream);

Element order = doc.getDocumentElement();// 유일한 루트 엘리먼트를 구한다.
NodeList items = order.getElementsByTagName("title");
String Result = "";
for (int i = 0; i < items.getLength();i++) {
                NodeList items2 = order.getElementsByTagName("description");
                Node item2 = items2.item(i);
                Node text2 = item2.getFirstChild();
                String ItemName2 = text2.getNodeValue();

             Node item = items.item(i);
             Node text = item.getFirstChild();
             String ItemName = text.getNodeValue();
             if(i!=0)
             {
                           Result += ItemName + " : " + ItemName2;
             }
             Result += "nn";
             }
             parsingresult = Result;
     } catch(Exception ex) {
        Log.e("SampleHTTP", "Exception in processing response.", ex);
     }
    return parsingresult;
}
네이버API 백과사전 앱 실습

More Related Content

What's hot

Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍
용 최
 
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
jihoon kim
 
UML distilled 1장 스터디 발표 자료
UML distilled 1장 스터디 발표 자료UML distilled 1장 스터디 발표 자료
UML distilled 1장 스터디 발표 자료
beom kyun choi
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
Sangon Lee
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
JinKyoungHeo
 
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
ssuser6dd171
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GDG Korea
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
hungrok
 
GKAC 2015 Apr. - Android Looper
GKAC 2015 Apr. - Android LooperGKAC 2015 Apr. - Android Looper
GKAC 2015 Apr. - Android Looper
GDG Korea
 
Undertow RequestBufferingHandler 소개
Undertow RequestBufferingHandler 소개Undertow RequestBufferingHandler 소개
Undertow RequestBufferingHandler 소개
Ted Won
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
hungrok
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
Circulus
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2
지수 윤
 
자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지
NAVER Engineering
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
PgDay.Seoul
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
WooYoung Cho
 

What's hot (20)

Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍
 
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
 
UML distilled 1장 스터디 발표 자료
UML distilled 1장 스터디 발표 자료UML distilled 1장 스터디 발표 자료
UML distilled 1장 스터디 발표 자료
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
GKAC 2015 Apr. - Android Looper
GKAC 2015 Apr. - Android LooperGKAC 2015 Apr. - Android Looper
GKAC 2015 Apr. - Android Looper
 
Undertow RequestBufferingHandler 소개
Undertow RequestBufferingHandler 소개Undertow RequestBufferingHandler 소개
Undertow RequestBufferingHandler 소개
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2
 
자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
 
vine webdev
vine webdevvine webdev
vine webdev
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 

Viewers also liked

Using The Legislative Process to Further Your Business
Using The Legislative Process to Further Your BusinessUsing The Legislative Process to Further Your Business
Using The Legislative Process to Further Your Business
Parsons Behle & Latimer
 
Gree klíma
Gree klímaGree klíma
Pricing for an internet marketing campaign
Pricing for an internet marketing campaignPricing for an internet marketing campaign
Pricing for an internet marketing campaign
USA Discussion Group
 
Math Night October 2014
Math Night October 2014Math Night October 2014
Math Night October 2014kaheathcock
 
Tizen 2.0 alpha でサポートされなかった native api icebreak
Tizen 2.0 alpha でサポートされなかった native api icebreakTizen 2.0 alpha でサポートされなかった native api icebreak
Tizen 2.0 alpha でサポートされなかった native api icebreakNaruto TAKAHASHI
 
40 raadgevingen
40 raadgevingen40 raadgevingen
40 raadgevingen
Hartsgedragen Bewustzijn
 
Buscadores
BuscadoresBuscadores
Buscadores
alexis caicedo
 
Deferred prosecution
Deferred prosecutionDeferred prosecution
Deferred prosecution
Amirah Morss
 
Presentation2
Presentation2Presentation2
Presentation2
Andrei Carianopol
 
Should I Ask?
Should I Ask?Should I Ask?
Should I Ask?
owildman
 
Grammarly presentation
Grammarly presentationGrammarly presentation
Grammarly presentation
georgesadeh
 
0135067537 pp1a
0135067537 pp1a0135067537 pp1a
0135067537 pp1a
jordanamman
 
Cancion
CancionCancion
Cancion
Angy Neztimar
 
Knight Mischief Entertainment
Knight Mischief EntertainmentKnight Mischief Entertainment
Knight Mischief Entertainment
rohancourage
 
Building Distributed Systems Using Helix
Building Distributed Systems Using HelixBuilding Distributed Systems Using Helix
Building Distributed Systems Using Helix
Amy W. Tang
 
HOME
HOMEHOME
HOME
cookode
 

Viewers also liked (20)

Marrazoa
MarrazoaMarrazoa
Marrazoa
 
Using The Legislative Process to Further Your Business
Using The Legislative Process to Further Your BusinessUsing The Legislative Process to Further Your Business
Using The Legislative Process to Further Your Business
 
Gree klíma
Gree klímaGree klíma
Gree klíma
 
Pricing for an internet marketing campaign
Pricing for an internet marketing campaignPricing for an internet marketing campaign
Pricing for an internet marketing campaign
 
Math Night October 2014
Math Night October 2014Math Night October 2014
Math Night October 2014
 
Tizen 2.0 alpha でサポートされなかった native api icebreak
Tizen 2.0 alpha でサポートされなかった native api icebreakTizen 2.0 alpha でサポートされなかった native api icebreak
Tizen 2.0 alpha でサポートされなかった native api icebreak
 
40 raadgevingen
40 raadgevingen40 raadgevingen
40 raadgevingen
 
Buscadores
BuscadoresBuscadores
Buscadores
 
2012
20122012
2012
 
Deferred prosecution
Deferred prosecutionDeferred prosecution
Deferred prosecution
 
Presentation2
Presentation2Presentation2
Presentation2
 
Should I Ask?
Should I Ask?Should I Ask?
Should I Ask?
 
Grammarly presentation
Grammarly presentationGrammarly presentation
Grammarly presentation
 
0135067537 pp1a
0135067537 pp1a0135067537 pp1a
0135067537 pp1a
 
Cancion
CancionCancion
Cancion
 
Cijferend optellen2
Cijferend optellen2Cijferend optellen2
Cijferend optellen2
 
Knight Mischief Entertainment
Knight Mischief EntertainmentKnight Mischief Entertainment
Knight Mischief Entertainment
 
Building Distributed Systems Using Helix
Building Distributed Systems Using HelixBuilding Distributed Systems Using Helix
Building Distributed Systems Using Helix
 
Zarasai
ZarasaiZarasai
Zarasai
 
HOME
HOMEHOME
HOME
 

Similar to Naver api for android

[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
NAVER D2
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
lactrious
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
지수 윤
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
NAVER D2
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
Jaeseung Ha
 
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
Youngbin Han
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
HyungKuIm
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Hyuncheol Jeon
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
양재동 코드랩
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술
jaypi Ko
 
Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
경륜 이
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
jongho jeong
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
성일 한
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증
dagri82
 
android_thread
android_threadandroid_thread
android_thread
handfoot
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴Suan Lee
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
은숙 이
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
Arawn Park
 

Similar to Naver api for android (20)

[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
 
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
2.Connect Sunshine to the Cloud - 시온고 안드로이드 스터디
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술
 
Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증
 
Tdd 4장
Tdd 4장Tdd 4장
Tdd 4장
 
android_thread
android_threadandroid_thread
android_thread
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 

More from Sangon Lee

NoSQL Guide & Sample
NoSQL Guide &  SampleNoSQL Guide &  Sample
NoSQL Guide & Sample
Sangon Lee
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
Sangon Lee
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
Sangon Lee
 
Facebook api
Facebook apiFacebook api
Facebook api
Sangon Lee
 
번역돋보기 기획서
번역돋보기 기획서번역돋보기 기획서
번역돋보기 기획서Sangon Lee
 
Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제
Sangon Lee
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초
Sangon Lee
 

More from Sangon Lee (8)

NoSQL Guide & Sample
NoSQL Guide &  SampleNoSQL Guide &  Sample
NoSQL Guide & Sample
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Facebook api
Facebook apiFacebook api
Facebook api
 
번역돋보기 기획서
번역돋보기 기획서번역돋보기 기획서
번역돋보기 기획서
 
StudyShare
StudyShareStudyShare
StudyShare
 
Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초
 

Naver api for android

  • 1. Naver API for Android S.O.LAB develop by 이상온
  • 2. 네이버 오픈API를 활용한 백과사전 앱 목표 : 네이버 오픈API를 활용하여 백과사전 검색 Android App을 만든다. Step 1 네이버 개발자센터 등록및 키 발급 http://dev.naver.com/
  • 3. 오픈API -> 검색어API -> 백과사전
  • 4. 키 등록/관리 -> 검색API -> 키추가
  • 5. 키 등록/관리 -> 검색API -> 키추가
  • 6. 키 등록/관리 -> 검색API -> 키추가 검색API 사용을 위한 키(key)는 바로 발급이 된다. 하루에 사용할수 있는 쿼리의 제한이 있다. 하루25000쿼리
  • 7. 네이버API 발급키 이용한 TEST쿼리 - 샘플 URL '독도'를 검색할 경우 : http://openapi.naver.com/search?key= 14a5a7f022650cc46f4a20867abb4fde &query=%EB%8F%85%EB%8F%84&target=encyc&start=1&display=10
  • 8. 네이버API 쿼리 결과 코드 <?xml version="1.0" encoding="UTF-8" ?> - <rss version="2.0"> - <channel> <title>Naver Open API - encyc ::'독도'</title> <link>http://search.naver.com</link> <description>Naver Search Result</description> <lastBuildDate>Mon, 20 Jul 2009 13:11:39 +0900</lastBuildDate> <total>189</total> <start>1</start> <display>10</display> - <item> <title><b>독도</b></title> <link>http://openapi.naver.com/l?AAADXHsQqAIBRA0a95jmJq5uJQlP8R+kKH1MQC/76W4A7ntl7QYHLdkTt6 IyepOLlurN3AtoC2oMcfkoSKhwmtFRAzcPs1MEbT/mClLp//hwTC+uyiB7FKrUb1Art54r9nAAAA</link> <description>경상북도 울릉군 울릉읍 <b>독도</b>리에 있는 섬. | 위치 : 경상북도 울릉군 울릉읍 <b>독도</b>리 1~96 번지 | 경위도 : 동도(동경 131도 52분 10.4초, 북위 37도 14분 26.8초), 서도(동경 131도 51분 54.6초, 북위 37도 14분 30.6초) | 면적 : 187,554㎡(동...</description> <thumbnail>http://sstatic.naver.com/search/100_thumb_nx3/7/1304007.jpg</thumbnail> </item> - <item> <title><b>독도</b></title> <link>http://openapi.naver.com/l?AAACupLEi1Tc1LrkxWK81MsTUxNzEzUissTS2qtFV1dVK1cFO1MIUxTNQyi lLTbDNKSgpUjR1VjdyAKDtfrzwzO7MgNSUzUS+/KB0oBOKDJU2B+oxMLUAsoCEoXBMAOybjnngAAAA=</link> <description> <b>독도</b>(獨島)는 동해 가운데, 대한민국울릉도 동남쪽에 있는 섬으로, 동도와 서도를 포함하여 총 91개의 크고 작은 섬들로 이루어져 있다.[1][2] 해방 이후 현재까지 대한민국이 실효 지배하고 있으며, 행정구역 상으 로 ...</description> <thumbnail /> </item> 개별 검색 결과이며, title, link, description, thumbnail 을 포함합니다
  • 9. 네이버API 백과사전 앱 실습 Step 2 Android app 생성및 화면 구성
  • 11. 네이버API 백과사전 앱 실습 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <EditText android:id="@+id/input01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Enter URL String ..." android:textSize="14sp" /> <Button android:id="@+id/requestBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Request" android:textSize="14sp" android:textStyle="bold" /> </LinearLayout> <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/txtMsg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ff99ccee" android:textColor="#ff0000ff" android:textSize="12sp" /> </ScrollView> </LinearLayout> </RelativeLayout>
  • 12. 네이버API 백과사전 앱 실습 Step 3 MainActivity.java coding public static String defaultUrl = "http://openapi.naver.com/search"; static final String mykeycode =“****************************"; final EditText input01 = (EditText)findViewById(R.id.input01); input01.setText("apple"); final TextView txtMsg = (TextView) findViewById(R.id.txtMsg); Button requestBtn = (Button) findViewById(R.id.requestBtn); requestBtn.setOnClickListener(new OnClickListener() { @SuppressWarnings("deprecation") public void onClick(View v) { String tempquery = input01.getText().toString(); String makeURL=""; makeURL = String.format(defaultUrl + "?key=%s&query=%s&target=encyc&start=1&display=10", mykeycode , URLEncoder.encode(tempquery)); txtMsg.setText(makeURL); String output = request(makeURL); txtMsg.setText(output); } });
  • 13. 네이버API 백과사전 앱 실습 private String request(String urlStr) { StringBuilder output = new StringBuilder(); try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); if (conn != null) { conn.setConnectTimeout(10000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setDoOutput(true); int resCode = conn.getResponseCode(); if (resCode == HttpURLConnection.HTTP_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) ; String line = null; while(true) { line = reader.readLine(); if (line == null) { break; } output.append(line + "n"); } reader.close(); conn.disconnect(); } } } catch(Exception ex) { Log.e("SampleHTTP", "Exception in processing response.", ex); } return output.toString(); }
  • 15. 네이버API 백과사전 앱 실습 Step 4 DOM parser 를 이용하여 파싱된 데이터 보여주기 public static String defaultUrl = "http://openapi.naver.com/search"; static final String mykeycode =“******************************"; public static String parsingresult=""; String xml = output.toString(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8")); Document doc = builder.parse(istream); Element order = doc.getDocumentElement(); //루트 엘리먼트를 구한다. NodeList items = order.getElementsByTagName("title");
  • 16. 네이버API 백과사전 앱 실습 private String request(String urlStr) { StringBuilder output = new StringBuilder(); try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); if (conn != null) { conn.setConnectTimeout(10000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setDoOutput(true); int resCode = conn.getResponseCode(); if (resCode == HttpURLConnection.HTTP_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) ; String line = null; while(true) { line = reader.readLine(); if (line == null) { break; } output.append(line + "n"); } reader.close(); conn.disconnect(); } } String xml = output.toString();
  • 17. 네이버API 백과사전 앱 실습 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8")); Document doc = builder.parse(istream); Element order = doc.getDocumentElement();// 유일한 루트 엘리먼트를 구한다. NodeList items = order.getElementsByTagName("title"); String Result = ""; for (int i = 0; i < items.getLength();i++) { NodeList items2 = order.getElementsByTagName("description"); Node item2 = items2.item(i); Node text2 = item2.getFirstChild(); String ItemName2 = text2.getNodeValue(); Node item = items.item(i); Node text = item.getFirstChild(); String ItemName = text.getNodeValue(); if(i!=0) { Result += ItemName + " : " + ItemName2; } Result += "nn"; } parsingresult = Result; } catch(Exception ex) { Log.e("SampleHTTP", "Exception in processing response.", ex); } return parsingresult; }