안녕하세요. 오늘은 네이버 블로그 검색 API를 활용하여 특정 키워드의 블로그 글을 검색하는 파이썬 코드를 소개해 드리려고 합니다. 이 코드는 검색된 데이터를 JSON 파일에 저장하며, 기존에 저장된 데이터와 중복되지 않도록 처리하는 기능도 포함하고 있습니다. 코드를 한 줄씩 설명해 드릴 테니, 차근차근 따라오세요!
코드 설명
1. 필요한 라이브러리 임포트
import os
import sys
import urllib.request
import json
import pprint
여기서는 운영 체제 관련 기능을 제공하는 os
, 시스템 관련 기능을 제공하는 sys
, URL 요청을 보내기 위한 urllib.request
, JSON 데이터를 다루기 위한 json
, 그리고 데이터를 예쁘게 출력하기 위한 pprint
라이브러리를 임포트합니다.
2. 환경 변수에서 클라이언트 ID와 클라이언트 시크릿 가져오기
client_id = os.getenv('NAVER_CLIENT_ID')
client_secret = os.getenv('NAVER_CLIENT_SECRET')
네이버 API를 사용하기 위해 필요한 클라이언트 ID와 시크릿을 환경 변수에서 가져옵니다. 이를 통해 보안을 유지하면서 필요한 인증 정보를 사용할 수 있습니다.
3. 검색할 키워드 인코딩
encText = urllib.parse.quote("생성형AI")
검색할 키워드인 "생성형AI"를 URL 인코딩합니다. 이를 통해 한글 키워드를 URL에서 사용할 수 있게 됩니다.
4. 검색 조건 설정
display = 3 # 개수
start = 1 # 시작 번호
sort = "date" # sim : 정확도순, date : 최신순
검색 결과의 개수(display
), 시작 번호(start
), 정렬 기준(sort
)을 설정합니다. 여기서는 최신순으로 정렬된 3개의 검색 결과를 가져오도록 설정했습니다.
5. API 요청 URL 생성
url = f"https://openapi.naver.com/v1/search/blog.json?query={encText}&display={display}&start={start}&sort={sort}"
위에서 설정한 검색 조건을 사용하여 API 요청 URL을 생성합니다.
6. API 요청 생성
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id", client_id)
request.add_header("X-Naver-Client-Secret", client_secret)
생성한 URL로 요청 객체를 만들고, 네이버 API에 인증 정보를 헤더에 추가합니다.
7. API 요청 보내기
response = urllib.request.urlopen(request)
rescode = response.getcode()
API 요청을 보내고, 응답 코드를 저장합니다. 이를 통해 요청이 성공했는지 확인할 수 있습니다.
8. 기존 JSON 파일에서 데이터 읽기
try:
with open('blog_data.json', 'r', encoding='utf-8') as file:
data_history = json.load(file)
except FileNotFoundError:
data_history = []
기존의 blog_data.json
파일을 읽어 이전에 저장된 데이터를 로드합니다. 파일이 없을 경우, 빈 리스트로 초기화합니다.
9. 기존 데이터에서 링크 추출
list_titles = []
if isinstance(data_history, list) and len(data_history) > 0:
for data in data_history:
list_titles.append(data['link'])
기존 데이터에서 이미 저장된 블로그 글의 링크를 추출하여 리스트에 저장합니다. 이를 통해 중복된 데이터를 피할 수 있습니다.
10. 응답 데이터 처리
if(rescode==200):
response_body = response.read()
final_data = response_body.decode("utf-8")
datas = json.loads(final_data)
응답 코드가 200일 경우, 응답 데이터를 읽어 JSON 형식으로 디코딩합니다.
11. 새로운 데이터 추가
for data in datas['items']:
if data['link'] in list_titles:
continue
if isinstance(data_history, list):
data_history.append(data)
else:
data_history = [data_history, data]
새로 검색된 데이터 중 기존 데이터에 없는 항목만 data_history
리스트에 추가합니다. 중복된 데이터는 무시합니다.
12. 업데이트된 데이터를 JSON 파일로 저장
with open('blog_data.json', 'w', encoding='utf-8') as file:
json.dump(data_history, file, ensure_ascii=False, indent=4)
print("새로운 데이터가 blog_data.json 파일에 추가되었습니다.")
else:
print("Error Code:" + rescode)
업데이트된 데이터를 blog_data.json
파일에 저장하고, 성공 메시지를 출력합니다. 만약 응답 코드가 200이 아닐 경우, 에러 코드를 출력합니다.
참고 사항
- 환경 변수 설정: 클라이언트 ID와 시크릿을 환경 변수에 설정해 두어야 합니다. 이를 통해 코드 내에 민감한 정보를 하드코딩하지 않고 안전하게 관리할 수 있습니다.
- 데이터 중복 방지: 기존에 저장된 데이터를 읽어와 중복된 항목은 무시하도록 처리하였습니다. 이를 통해 중복 데이터 저장을 방지할 수 있습니다.
- 에러 처리: 파일이 없을 경우를 대비한 예외 처리와 API 요청 실패 시 에러 코드를 출력하도록 처리하였습니다.
이상으로 네이버 블로그 검색 API를 활용한 파이썬 코드 설명을 마치겠습니다. 도움이 되셨길 바랍니다. 감사합니다!
'코딩과 데이터 분석' 카테고리의 다른 글
Python에서의 동기화(Synchronous)와 비동기화(Asynchronous) 프로그래밍 (0) | 2024.06.14 |
---|---|
Selenium을 위한 Chrome 브라우저 설정 옵션 완벽 가이드 (0) | 2024.06.12 |
(파이썬) 여러 개의 엑셀 파일을 하나로 통합하기 (0) | 2024.06.10 |
(파이썬) makedirs 사용하여 폴더 만들고 엑셀 파일로 저장 (0) | 2024.05.31 |
[javascript] 자바스크립트 단축 평가(short circuit evaluation)에 대해 (0) | 2024.05.30 |