18
Naver API for Android S.O.LAB develop by 이이이

Naver api for android

Embed Size (px)

Citation preview

Page 1: Naver api for android

Naver API for Android

S.O.LAB develop by 이상온

Page 2: Naver api for android

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

Step 1

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

http://dev.naver.com/

Page 3: Naver api for android

오픈 API -> 검색어 API -> 백과사전

Page 4: Naver api for android

키 등록 / 관리 -> 검색 API -> 키추가

Page 5: Naver api for android

키 등록 / 관리 -> 검색 API -> 키추가

Page 6: Naver api for android

키 등록 / 관리 -> 검색 API -> 키추가

검색 API 사용을 위한 키 (key) 는 바로 발급이 된다 .하루에 사용할수 있는 쿼리의 제한이 있다 . 하루 25000 쿼리

Page 7: Naver api for android

네이버 API 발급키 이용한 TEST 쿼리- 샘플 URL' 독도 ' 를 검색할 경우 :http://openapi.naver.com/search?key= 14a5a7f022650cc46f4a20867abb4fde &query=%EB%8F%85%EB%8F%84&target=encyc&start=1&display=10

Page 8: Naver api for android

네이버 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/

76W4A7ntl7QYHLdkTt6IyepOLlurN3AtoC2oMcfkoSKhwmtFRAzcPs1MEbT/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?AAACupLEi1Tc1LrkxWK81MsTUxNzEzUissTS2qtFV1d-

VK1cFO1MIUxTNQyilLTbDNKSgpUjR1VjdyAKDtfrzwzO7MgNSUzUS+/KB0oBOKDJU2B+oxMLUAsoCEoXBMAOybjnngAAAA=</link>

<description> <b> 독도 </b>( 獨島 ) 는 동해 가운데 , 대한민국울릉도 동남쪽에 있는 섬으로 , 동도와 서도를 포함하여 총 91 개의 크고 작은 섬들로 이루어져 있다 .[1][2] 해방 이후 현재까지 대한민국이 실효 지배하고 있으며 , 행정구역 상으로 ...</description>

<thumbnail /> </item>개별 검색 결과이며 , title, link, description, thumbnail 을 포함합니다

Page 9: Naver api for android

네이버 API 백과사전 앱 실습

Step 2

Android app 생성및 화면 구성

Page 10: Naver api for android

네이버 API 백과사전 앱 실습

Page 11: Naver api for android

네이버 API 백과사전 앱 실습<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an-droid" 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" an-droid:textColor="#ff0000ff" android:textSize="12sp" /> </ScrollView></LinearLayout></RelativeLayout>

Page 12: Naver api for android

네이버 API 백과사전 앱 실습

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); } });

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

Step 3MainActivity.java coding

Page 13: Naver api for android

네이버 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(); }

Page 14: Naver api for android

네이버 API 백과사전 앱 실습

Page 15: Naver api for android

네이버 API 백과사전 앱 실습

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

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

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

String xml = output.toString();

Element order = doc.getDocumentElement(); // 루트 엘리먼트를 구한다 .NodeList items = order.getElementsByTagName("title");

Page 16: Naver api for android

네이버 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();

Page 17: Naver api for android

네이버 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 += "\n\n";}parsingresult = Result;

} catch(Exception ex) { Log.e("SampleHTTP", "Exception in processing response.", ex); } return parsingresult; }

Page 18: Naver api for android

네이버 API 백과사전 앱 실습