본문 바로가기

코딩과 데이터 분석

(파이썬) 네이버 블로그 검색 API 활용하기

안녕하세요. 오늘은 네이버 블로그 검색 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이 아닐 경우, 에러 코드를 출력합니다.

참고 사항

  1. 환경 변수 설정: 클라이언트 ID와 시크릿을 환경 변수에 설정해 두어야 합니다. 이를 통해 코드 내에 민감한 정보를 하드코딩하지 않고 안전하게 관리할 수 있습니다.
  2. 데이터 중복 방지: 기존에 저장된 데이터를 읽어와 중복된 항목은 무시하도록 처리하였습니다. 이를 통해 중복 데이터 저장을 방지할 수 있습니다.
  3. 에러 처리: 파일이 없을 경우를 대비한 예외 처리와 API 요청 실패 시 에러 코드를 출력하도록 처리하였습니다.

이상으로 네이버 블로그 검색 API를 활용한 파이썬 코드 설명을 마치겠습니다. 도움이 되셨길 바랍니다. 감사합니다!

반응형