네이버 뉴스 속보 자동 이메일링

클로드를 처음 써봤다. 시험삼아 뉴스 자동 이메일링 코드를 명령했더니 10초도 안되서 파이선 코드가 완성됐다.

code 에서 주피터 노트북으로 테스트.

로컬 올라마3를 이용한 코드로 약간 수정해 구동해보니 바로 동작되었다.

  • 맥북
  • 야놀자 배포 ollama llm
pip install requests beautifulsoup4 langchain schedule
import requests
from bs4 import BeautifulSoup
from langchain_community.llms import Ollama
from langchain.agents import Tool, AgentExecutor, LLMSingleActionAgent
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain_community.chat_models import ChatOllama
from langchain_core.callbacks.manager import CallbackManager
from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import schedule
import time

class NewsAgent:
    def __init__(self):
        llm = ChatOllama(
            model="EEVE-Korean-10.8B:latest",
            callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),
        )
        self.llm = llm
        # Ollama 로컬 LLM 초기화
        # self.llm = Ollama(model="llama2")
        
        # 뉴스 크롤링 함수
        def crawl_news():
            # 예시 뉴스 사이트 (실제 사용 시 적절한 뉴스 사이트로 변경)
            # url = "https://news.google.com/rss"
            url = "https://createfeed.fivefilters.org/extract.php?url=https%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fwhere%3Dnexearch%26sm%3Dtop_hty%26fbm%3D0%26ie%3Dutf8%26query%3D%25EC%2586%258D%25EB%25B3%25B4&item=li.bx&item_title=a.news_tit+%40title&item_url=a.news_tit+%40href&item_desc=a.dsc_txt_wrap&item_image=img.thumb.api_get&unique_url=1&unique_title=1&max=5&order=document&guid=0"
            response = requests.get(url)
            soup = BeautifulSoup(response.content, features='xml')
            
            # 주요 뉴스 타이틀 추출
            news_items = soup.findAll('item')[:5]
            news_list = [item.title.text for item in news_items]
            
            return news_list

        # 뉴스 요약 함수
        def summarize_news(news_list):
            prompt = f"""다음 뉴스 헤드라인들을 간결하게 요약해주세요:
            {news_list}
            
            요약 형식:
            1. 헤드라인
            2. 핵심 내용
            3. 의미
            """
            
            summary = self.llm.invoke(prompt)
            return summary

        # 이메일 전송 함수
        def send_email(content):
            sender_email = "your_email@gmail.com"
            sender_password = "your_app_password"
            receiver_email = "recipient@example.com"

            message = MIMEMultipart()
            message['From'] = sender_email
            message['To'] = receiver_email
            message['Subject'] = "오늘의 주요 뉴스"

            message.attach(MIMEText(content, 'plain'))

            with smtplib.SMTP('smtp.gmail.com', 587) as server:
                server.starttls()
                server.login(sender_email, sender_password)
                server.send_message(message)

        # 주요 작업 함수
        def daily_news_task():
            news_list = crawl_news()
            news_summary = summarize_news(news_list)
            # send_email(news_summary) #이메일링이 아니라 바로 결과 보려고
            print(news_summary.content)
            print("오늘의 뉴스 이메일 전송 완료!")

        # 스케줄링
        # schedule.every().day.at("07:00").do(daily_news_task)
        daily_news_task()#이메일링이 아니라 바로 결과 보려고

    def run(self):
        print('실행')
        # while True:
        #     schedule.run_pending()
        #     time.sleep(1)

# 에이전트 실행
if __name__ == "__main__":
    news_agent = NewsAgent()
    news_agent.run()

Subscribe to X세대 신입사원

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe
774-86-01972 cinnabar.3d@gmail.com