REST API
REST : Representational State Transfer의 약자로써 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미
즉 자원의 표현에 의한 상태 전달
a)자원의 표현
- 자원 : 해당 소프트웨어가 관리하는 모든 것
- ex) 문서, 그림, 데이터, 해당 소프트웨어 자체 등
b) 상태(정보)전달
- 데이터가 요청되어지는 시점에서 자원의 상태를 전달한다.
- json 혹은 xml을 통해 데이터를 주고 받는 것이 일반적이다.
월드 와이드웹(www)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
- REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
- REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.
REST의 구체적인 개념 : HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD operation을 적용하는 것을 의미한다.
- 즉, REST는 자원 기반의 구조 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.
- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여 한다.
https://developers.naver.com/docs/search/news
해당 사이트 접속 후 오픈 API 이용 신청
이 후 Client ID, Client Secret 값을 이용한다.
네이버 뉴스를 활용한 검색페이지 크롤링 프로그램 작성
파이썬 프로그램을 작성한다.
config.py
client_id = "본인 클라이언트 아이디"
client_secret = "시크릿 키"
naverCrawler.py
import urllib.request
import config
def makeURL(sNode, search_text):
base = "https://openapi.naver.com/v1/search"
node = "/%s.json" % sNode
parameters = "?query=%s" % urllib.parse.quote(search_text)
url = base + node + parameters
print(url)
return url
def requestURL(url):
req = urllib.request.Request(url)
req.add_header("X-Naver-Client-Id", config.client_id)
req.add_header("X-Naver-Client-Secret", config.client_secret)
try:
response = urllib.request.urlopen(req)
if response.status == 200:
print("URL Request Success")
data = response.read().decode('utf-8')
return data
except Exception as e:
print(e)
print("Error for URL : %s" %url)
return None
def main():
sNode = 'news' #blog, book 등 검색 엔진 변경 가능
search_text = '챔스' # 원하는 검색 키워드 입력
targetURL = makeURL(sNode, search_text)
result = requestURL(targetURL)
print(result)
main()
실행 할 경우
이렇게 관련된 내용이 터미널에 표시된다.