반응형
[Django] 파이썬 장고 네이버 검색 API _ 뉴스 검색
■ 먼저 개발자 가이드에서 뉴스검색 애플리케이션을 등록해야합니다.
https://developers.naver.com/docs/search/news/
■ API 이용 신청
■ 애플리케이션 등록
1. 애플리케이션 이름
2. 사용 API는 '검색' 으로 선택
■ Client ID, Secret 확인하기
내 애플리케이션 메뉴에서 만든 api를 통해 확인한다.
■ 파이썬 소스코드
1. client_id 와 client_secret 에 각각 넣어줍니다.
2. search_word 즉 키워드를 넣어줍니다. 저는 교육을 넣었어요.
3. 데이터 타입은 json
4. sort는 관련도순으로 했습니다.
5. 출력 수 100개, 시작위치 1
6. 해당 URL과 헤더에 클라이언트 값을 넣어서 requests를 통해 전달합니다.
if문에서 2022년 05월 이상의 뉴스만 출력되도록 설정해줬습니다.
현재 날짜 기준으로, 관련도 순이면서 최신 뉴스를 !!!
깔끔하게 뉴스 검색의 스트링값(String)을 얻기위해 쌍따옴표, 불필요한 특수문자 등을 제거해줍니다.
# 소스코드
def test(request):
client_id = "api Client ID" # api Client ID
client_secret = "api Client Secret" # api Client Secret
search_word = '교육' # 검색어
encode_type = 'json' # 출력 방식 json 또는 xml
sort = 'sim' # 결과값의 정렬기준 시간순 date, 관련도 순 sim
max_display = 100 # 출력 뉴스 수
start = 1 # 출력 위치
url = f"https://openapi.naver.com/v1/search/news.{encode_type}?query={search_word}&display={str(int(max_display))}&start={str(int(start))}&sort={sort}"
headers = {'X-Naver-Client-Id': client_id,
'X-Naver-Client-Secret': client_secret
}
# HTTP요청
r = requests.get(url, headers=headers)
if "200" in str(r): # 상태코드 200시 성공
for data in enumerate(r.json()['items']):
date = ' '.join(data[1]['pubDate'].split()[1:4])
reg_date = datetime.strptime(date, '%d %b %Y').strftime('%Y-%m-%d').replace('-', '')[:6]
if int(reg_date) >= 202205:
title = re.sub('(<([^>]+)>)', '', data[1]['title'])
title = re.sub('"', '"', title)
title = title.replace('…', '.').replace('..', '.').replace('…', '.')
contents = re.sub('(<([^>]+)>)', '', data[1]['description'])
contents = re.sub('"', '"', contents)
contents = contents.replace('…', '.').replace('..', '.').replace('…', '.')
url = data[1]['link']
print(title)
print(contents)
print(url)
print(reg_date)
■ 결과확인
순서대로 타이틀, 내용, url, 등록일자가 리턴됩니다.
[Django] 파이썬 장고 네이버 검색 API _ 뉴스 검색
반응형
'파이썬 웹 개발' 카테고리의 다른 글
[Django] 장고 ORM vs raw 성능 비교하기 (0) | 2022.05.25 |
---|---|
[Django] The Zen of Python, by Tim Peters _출력구문에서 제거하는 방법 (0) | 2022.05.20 |
[Django] 파이썬 장고 서브쿼리(orm subquery) 예제 _ SQL과 비교하기 (0) | 2022.05.12 |
[Django] ManyToManyField 추가 및 삭제 방법_ 예제 (0) | 2022.05.10 |
[Django] List 안에 dict key값으로 정렬하기 _OUTER JOIN 대체 방법 (0) | 2022.04.22 |
댓글