콘텐츠로 이동

네이버 블로그 검색 연동

실행 준비

!pip install openai
!pip install gradio

네이버 검색 API 예제 - 블로그 검색

import os
import sys
import urllib.request
client_id = "MofuwmqpNTAe6fgAxvz1"
client_secret = "HTBP4staKl"
encText = urllib.parse.quote("서울의 날씨")
url = "https://openapi.naver.com/v1/search/blog?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

함수로 정리한 네이버 블로그 검색 API

import urllib.request
import urllib.parse
import json

# 🔑 네이버 API 인증 정보 (개인 키로 대체 필요)
client_id = "MofuwmqpNTAe6fgAxvz1"
client_secret = "HTBP4staKl"

def naver_blog_search(query, max_results=5):
    """
    네이버 블로그 검색 API를 사용하여 검색 결과를 하나의 문자열로 반환합니다.

    Parameters:
        query (str): 검색할 키워드
        max_results (int): 검색 결과 중 사용할 최대 개수 (기본값: 5)

    Returns:
        str: 블로그 제목과 요약 설명을 줄바꿈으로 정리한 문자열
    """
    enc_query = urllib.parse.quote(query)
    url = f"https://openapi.naver.com/v1/search/blog.json?query={enc_query}&display={max_results}"

    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id", client_id)
    request.add_header("X-Naver-Client-Secret", client_secret)

    try:
        response = urllib.request.urlopen(request)
        if response.getcode() == 200:
            response_body = response.read()
            data = json.loads(response_body.decode("utf-8"))
            items = data.get("items", [])

            combined_text = ""
            for idx, item in enumerate(items, start=1):
                title = item.get("title", "").replace("", "").replace("", "")
                description = item.get("description", "").replace("", "").replace("", "")
                combined_text += f"{idx}. {title}: {description}\n"

            return combined_text.strip()
        else:
            return f"Error Code: {response.getcode()}"
    except Exception as e:
        return f"Exception occurred: {e}"

함수 실행하기

blog_result = naver_blog_search("서울의 맛집")
print(blog_result)

ChatGPT와 네이버 API 연동하기

# 네이버 블로그 검색
import urllib.request
import urllib.parse
import json

# 🔑 네이버 API 인증 정보 (개인 키로 대체 필요)
client_id = "MofuwmqpNTAe6fgAxvz1"
client_secret = "HTBP4staKl"

def naver_blog_search(query, max_results=5):
    """
    네이버 블로그 검색 API를 사용하여 검색 결과를 하나의 문자열로 반환합니다.

    Parameters:
        query (str): 검색할 키워드
        max_results (int): 검색 결과 중 사용할 최대 개수 (기본값: 5)

    Returns:
        str: 블로그 제목과 요약 설명을 줄바꿈으로 정리한 문자열
    """
    enc_query = urllib.parse.quote(query)
    url = f"https://openapi.naver.com/v1/search/blog.json?query={enc_query}&display={max_results}"

    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id", client_id)
    request.add_header("X-Naver-Client-Secret", client_secret)

    try:
        response = urllib.request.urlopen(request)
        if response.getcode() == 200:
            response_body = response.read()
            data = json.loads(response_body.decode("utf-8"))
            items = data.get("items", [])

            combined_text = ""
            for idx, item in enumerate(items, start=1):
                title = item.get("title", "").replace("", "").replace("", "")
                description = item.get("description", "").replace("", "").replace("", "")
                combined_text += f"{idx}. {title}: {description}\n"

            return combined_text.strip()
        else:
            return f"Error Code: {response.getcode()}"
    except Exception as e:
        return f"Exception occurred: {e}"



# ChatGPT
import os
os.environ["OPENAI_API_KEY"] = "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"


import gradio as gr
from openai import OpenAI
import json

# OpenAI 클라이언트 초기화
client = OpenAI()

# OpenAI Tool 등록
tools = [
    {
        "type": "function",
        "function": {
            "name": "naver_blog_search",
            "description": "사용자의 입력 프롬프트에 대해서 네이버의 블로그 검색을 진행하는 함수입니다.",
            "parameters": {
                "type": "object",
                "properties": {
                    "naver_keyword": {
                        "type": "string",
                        "description": "사용자의 입력 프롬프트에서 검색에 필요한 키워드를 추출하여 저장합니다.",
                    },
                },
                "required": ["naver_keyword"]
            },
        },
    },
]

# 응답 생성 함수
def generate_response(prompt_text: str):
    completion = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "사용자의 입력 프롬프트에 대해서 네이버의 블로그 검색을 진행하는 함수를 호출해줘."},
            {"role": "user", "content": prompt_text}
        ],
        tools=tools,
    )

    response = completion.choices[0].message

    if response.tool_calls:
        tool_call = response.tool_calls[0]
        function_name = tool_call.function.name
        arguments_json = json.loads(tool_call.function.arguments)

        if function_name == "naver_blog_search":
            naver_keyword = arguments_json.get('naver_keyword')
            return naver_blog_search(naver_keyword)

        else:
            return "지원되지 않는 함수입니다."


    elif response.function_call:
        return str(response.function_call)

    else:
        return response.content

# Gradio 인터페이스
def chatgpt_interface():
    with gr.Blocks() as demo:
        gr.Markdown("## 💬 ChatGPT에서 네이버 블로그 검색 연동하기")

        with gr.Row():
            with gr.Column():
                input_text = gr.Textbox(label="질문을 입력하세요")
                output_text = gr.Textbox(label="AI 응답", interactive=False, lines=10)

                input_text.submit(generate_response, inputs=input_text, outputs=output_text)

        demo.launch()

# 실행
chatgpt_interface()