티스토리 뷰

Python

Python, 네이버검색 OpenAPI이용하기

hwangyoungjae 2016. 5. 24. 14:36
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

http://dev.naver.com/openapi/ #openAPI정보 확인

https://dev.naver.com/openapi/register #openAPI를 사용하기 위한 키 등록/관리

네이버에서 openAPI서비스를 이용하기 전에 우선 key를 발급받아야한다

위의 URL로 들어가 서비스이용에 필요한 key를 발급받은후

http://dev.naver.com/openapi/apis/search/

 URL에서 검색하고자 하는 목록을 확인후 필요한 변수값을 확인하면 된다.

간단한 예부터 보겠다.

 

아래에 보이는 [key]부분은 네이버에서 발급받은 key값을 넣어주면 된다.

http://openapi.naver.com/search?key=[key]&target=movie&query=batman&display=1

URL로 요청한 자원은 XML문서로 출력되어야 하는데 웹브라우저에서 보이는것은 XML문서가 아니라 웹페이지이다.

오히려 에러가 발생해쓸때 xml문서가 출력된다.

그 이유는 네이버에 웹브라우저를 통해 openAPI를 사용하면 그 결과값이 XML문이 아니라 웹페이지(HTML)형식으로 출력되기 때문에다.

 URL Python에서 시도하면 정상적인 XML문서가 출력되는것을 알수 있다.

Python에서는 HTTP프로토콜을 처리하기 위해 http.client http.server이라는 2개의 모듈이 있다.

이중 openAPI검색요청을 하고 데이터를 얻어 오기 위해서 필요한건 http.client모듈이다.

 

아래 에제는 위URL과 같은것으로

xml형식으로 데이터를 가져온것을 알수 있다.

# -*- coding : cp949 -*-

import http.client

conn=http.client.HTTPConnection("openapi.naver.com")

conn.request("GET","/search?key=[key]&target=movie&query=batman&display=1")

req=conn.getresponse()

xmlData=req.read()

print(req.status,req.reason)

print(xmlData.decode('utf-8'))

실행결과

200 OK

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"><channel><title>Naver Open API - movie ::'batman'</title>생략...

 

openAPI 서비스를 이용하기 위해서는우선 HTTPConnection을 얻어와야 한다.

HTTPConnection HTTP프로토콜을 사용하기 위한 일종의 핸들러(handler)라고 생각하면 된다.

 

class http.client.HTTPConnection(host[, port[, strict[, timeout]]])

 HTTPConnection생성자는 host주소를 입력받고 port번호를 지정할수 있다.

접속이 지연될때 얼마동안 접속요청을 기다릴지 timeout을 통해서 설정할수 있다.

연결이 성공하면 HTTPConnection.request()메서드를 통해서 URL을 호출할수 있다.

 

HTTPConnection.request(methodurl[, body[, headers]])

위의 HTTPConnection.request()메서드는 서버로 어떠한 HTTP요청을 할때 사용한다.

method HTTP메서드를 의미하는 것으로, HTTP 1.1에는 GET, POST, PUT, DELETE라는 4개의 메서드를 제공하고 있다.

여기서는 정보를 가져오기 위한 요청이기 때문에 GET메서드를 사용한다.

그다음 요청하는URL을 적어준다위의 예제에서는 검색요청 URL을 인자로 전달하였다.

 

이후 HTTPConnection.getresponse()메서드를 호출하여 openAPI서버에서 보내온 요청을 받아오는데반환값은 HTTPResponse인스턴스 객체이다.

요청이 성공하면 req.status값이 200으로 반환되고이는 OK라는 의미이다.

 

서버에서 받아온 정보중 본문(contents)데이터를 읽으려면 HTTPResponse.read()메서드를 사용한다.

HTTPResponse.read([amt])

HTTPResponse.getheader(), HTTPResponse.getheaders()메서드를 사용하면 헤더 정보를 가져올수 있다.

getheader()메서드는 인자로 전달된 특정한 정보만 얻어오며

getheaders()메서드는 모든 헤더정보를 가져온다.

HTTPResponse.getheader(name[, default])

HTTPResponse.getheaders()

 

아래는 naver의 검색openapi를 통하여 제목에 batman이 포함된 영화중 5개를 검색하여 xml형태로 출력한 예제이다.

# -*- coding : cp949 -*-

import http.client

import xml.dom.minidom

s=http.client.HTTPConnection("openapi.naver.com")

s.request("GET","/search?key=[key]&target=movie&query=batman&display=5")

req=s.getresponse()

data=req.read()

dom=xml.dom.minidom.parseString(data)

print(req.getheaders())

print(dom.toxml())

실행

[('Date', 'Mon, 15 Apr 2013 16:29:14 GMT'), ('Server', 'Apache'), ('Set-Cookie',

 'WMONID=Dvi0tV_VZUP; Expires=Tue, 15-Apr-2014 16:29:14 GMT; Path=/'), ('Content

-Length', '3308'), ('Connection', 'close'), ('Content-Type', 'text/xml;charset=u

tf-8')]

<?xml version="1.0" ?><rss version="2.0"><channel><title>Naver Open API - movie

::'batman'</title><link>http://search.naver.com</link><description>Naver Search

Result</description><lastBuildDate>Tue, 16 Apr 2013 01:29:14 +0900</lastBuildDat

e><total>43</total><start>1</start><display>5</display><item><title>배트맨 : 

크 나이트 리턴즈파트 2</title><link>http://openapi.naver.com/l?AAADWLQQrDIBRET

6NL0ahRFy4KJfdQ80Up0dTYgLdvUigM85gH8/5AG9a7vrmC+9jBbvXMgF8w7KqE106tUZppliqKMAspu

A4ctOPM4NQg2tT7jvgDTcuV35kUd0IjoW5/c9Hne9zl3ZEDKakgvoS6AuJPRik17AsDzGQOjAAAAA==<

/link><image/><subtitle>&lt;b&gt;Batman&lt;/b&gt;: The Dark Knight Returns, Part

 2</subtitle><pubDate>2013</pubDate><director>제이 올리바|</director><actor>피터

 웰러|아리엘 윈터|데이빗 셀비|웨이드 윌리암스|</actor><userRating>7.75</userRati

ng></item><item><title>다크 나이트 라이즈</title><link>http://openapi.naver.com/

l?AAADWLywrDIBREv0aXofVqNAsXhZL/8HFFKWpqbMC/b1IoDHOYA/P+YBvamp5NoX1sqHM9EtIXDu0l

t8pIH8TCZiEDdzMXHJQDVAbuC40Ng469bwQehK1nfuepmAPb5Gr+m5M2XeMqa/bkphILgdVVjwSekt0E

/wLM9KGWiwAAAA==</link><image>http://imgmovie.naver.com/mdi/mit110/0720/72054_P6

4_134619.jpg</image><subtitle>The Dark Knight Rises</subtitle><pubDate>2012</pub

Date><director>크리스토퍼 놀란|</director><actor>크리스찬 베일|조셉 고든-레빗|

리 올드만|앤 해서웨이|톰 하디|마리옹 꼬띠아르 |마이클 케인|모건 프리먼|</actor><

userRating>9.00</userRating></item><item><title>배트맨 : 다크 나이트 리턴즈

 1</title><link>http://openapi.naver.com/l?AAADWLTQrDIBhET6PLYKJGXbgolNzDn0+Uo

qbGBrx9k0JhmMc8mPcH2tDW9GwK7mMHneuZAL9gaC+YlUb4wNWychGYWxlnVDoK0tBZ4dgg6Nj7jugDL

duV33kq5oQ2uZr/5qJN97jLmiO5qcSC6OaqB0SfMyFEkS+V/GN5jAAAAA==</link><image>http://

imgmovie.naver.com/mdi/mit110/1000/100090_P01_114523.jpg</image><subtitle>&lt;b&

gt;Batman&lt;/b&gt;: The Dark Knight Returns, Part 1</subtitle><pubDate>2012</pu

bDate><director>제이 올리바|</director><actor>피터 웰러|아리엘 윈터|데이빗 셀비|

웨이드 윌리암스|</actor><userRating>9.75</userRating></item><item><title>배트맨

엣 더 체크포인트</title><link>http://openapi.naver.com/l?AAADWLSQoDIRRET6NLIc4uX

ARC38PhixLUjjEN3j7dgUBRj3pQrw+MZb2b1TU81w629qMAfsKyUXGvnYpJGCqFSjxILjjTgYF27GZwH

pBsnnNH7I7oduZ3Js0dMEjo9W9O+nKNq7x7l0BabohtoUdA7GGolvoL/QQZBYsAAAA=</link><image

>http://imgmovie.naver.com/mdi/mit110/0928/92868_P01_180446.jpg</image><subtitle

>&lt;b&gt;Batman&lt;/b&gt; at the Checkpoint</subtitle><pubDate>2012</pubDate><d

irector>라파엘 발루루|</director><actor>라이다 아돈|로이 투르게만|</actor><userR

ating>0.00</userRating></item><item><title>배트맨이어 원</title><link>http://o

penapi.naver.com/l?AAADWLywrDIBREv0aXofVqNAsXhZL/8HFFKWpqbMC/b1IoDHOYA/P+YBvamp5

NoX1sqHM9EtIXDu0lt8pIH8TCZiEDdzMXHJQDVAbuC40Ng469bwQehK1nfuepmAPb5Gr+m5M2XeMqa/b

kphILgdVVjwSeSrEbfAHxNtubiwAAAA==</link><image>http://imgmovie.naver.com/mdi/mit

110/0882/88203_P01_113234.jpg</image><subtitle>&lt;b&gt;Batman&lt;/b&gt;: Year O

ne</subtitle><pubDate>2011</pubDate><director>샘 리우|로렌 몽고메리|</director><

actor>브라이언 크랜스톤|엘리자 더쉬쿠|케이티 색호프|벤자민 맥켄지|</actor><userR

ating>9.00</userRating></item></channel></rss>

 

 

참조 : 빠르게 활용하는 파이썬프로그래밍

 

'Python' 카테고리의 다른 글

Python,module unittest [단위테스트]  (0) 2016.05.25
Python, 웹 서버 만들기  (0) 2016.05.25
Python,module socket [소켓통신]  (0) 2016.05.24
Python, 이메일보내기  (0) 2016.05.24
Python, bytes를 문자열로 변환하기  (0) 2016.05.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함