본문 바로가기
Dev DBAN/개발 이야기

파이썬으로 기사 요약하기 3편 - 메일 전송

by 디반 2021. 6. 4. 19:34
반응형

 

 

오늘은 저번 시간에 만든 엑셀 파일을 메일에 첨부해 전송해보겠습니다. 

저는 지메일, Gmail을 이용해 한 번 보내보도록 하겠습니다. 

Gmail을 이용하려면 첫번째로 2차 인증설정과 동시에 앱 비밀번호를 생성과 IMAP설정을 해야지 Gmail로 메일을 보낼 수 있습니다.

 

1. IMAP설정 

 

gmail에 접속한 다음 우측 상단에 있는 톱니바퀴를 눌러 빠른 설정 창을 열어줍니다. 

 

빠른 설정 바로 밑 모든 설정보기를 클릭해 들어가 전달 및 POP/IMAP 메뉴에 들어갑니다. 

IMAP 사용 안함으로 체크되어있는 것을 IMAP 사용으로 변경 해줍니다.

 

 

2. 2차 인증, 앱 비밀번호 설정

 

구글 계정에 접속합니다.

 

좌측 메뉴에 있는 보안 - 앱 비밀번호를 클릭합니다. 

만약 2단계 인증을 하지 않았다면 2단계 인증을 사용으로 변경한 다음 사용해주세요.

 

 

앱 비밀번호를 생성항 앱 및 기기를 선택하세요 항목에 있는 2가지 선택을 

메일 : Windows 휴대전화 로 설정한 다음 생성해주세요.

 

 

팝업 창과 앱 비밀번호를 생성완료 했다면 반드시 저 비밀번호를 기억, 메모장에 적어 놓길 바랍니다. 

 

이렇게 준비만 하시면 사전준비는 끝이 납니다. 

 

 

코드

import smtplib
import feedparser
from newspaper import Article

from openpyxl import Workbook
from typing import List
from textrankr import TextRank

from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email import encoders

#------------- 엑셀 파일들 ---------------------------------
wb = Workbook()
ws = wb.active
ws.title = "뉴스 기사"
ws.append(["제목", "링크", "내용"])
#-------------------------------------------------


#---------------뉴스 사이트---------------
rss_url = "http://feeds.feedburner.com/inven"
rss_feed = feedparser.parse(rss_url)
# rss feed에는 총 25개의 뉴스 기사만 보여진다.
#----------------------------------------


#-------------------- 한글 요약 클래스-------------------
#리스트형식으로 저장하기 위한 클래스 선언
class MyTokenizer:

    def __call__(self, text: str) -> List[str]:
        tokens: List[str] = text.split()
        return tokens

# 리스트 형식으로 저장하는 공간을 만들고 그 공간에 데이터들을 요약한다.
mytokenizer: MyTokenizer = MyTokenizer()
textrank: TextRank = TextRank(mytokenizer)

# 요약한 데이터는 3줄까지 가능하도록 설정하는 변수
k: int = 3

#----------------------------------------------------------


#------------------ 뉴스 요약 데이터 ---------------------
for feed in rss_feed.entries:
    # rss_feed 속 뉴스 링크 분류

    #article에 링크 속 뉴스 본문 가져와 저장한다.
    article = Article(feed.link, language = 'ko')
    article.download()
    article.parse()

    NewsFeed = article.text
    NewsTitle = article.title
    NewsUrl = article.url
    #NewsTime = article.publish_date

    # 뉴스 본문들을 요약하고 k줄 만큼 요약해 str형식으로 저장한다
    summarized: str = textrank.summarize(NewsFeed, k)

    # 엑셀 표에다가 하나씩 집어넣는 코드
    ws.append([NewsTitle,NewsUrl,summarized])

#엑셀 파일 저장하기
wb.save(filename='뉴스기사.xlsx')

#---------------------------------------------


#-----------------이메일-------------------

#이메일 주고 받는 연락처
email_from = '보내는 사람 이메일'
email_to = '받는 사람 이메일'
#이메일 제목/내용
email_subject = '오늘의 게임 뉴스'
email_content = '오늘자 인벤 게임뉴스입니다.'

msg= MIMEMultipart('alternative')
msg['From'] = email_from
msg['To'] = email_to
msg['Subject'] = email_subject

# 기본설정
smtp = smtplib.SMTP('smtp.gmail.com', 587)

smtp.starttls()

smtp.login('자기 이메일','앱 비밀번호')
#-------------------------------------------------


#--------------파일 전송-----------------


addfile = MIMEBase('application',"octet-stream")

with open("뉴스기사.xlsx",'rb') as file:
    addfile.set_payload(file.read())

encoders.encode_base64(addfile)
addfile.add_header('Content-Disposition', "attachment", filename ="게임 뉴스 요약.xlsx")
msg.attach(addfile)


smtp.sendmail('자기 이메일', '자기 이메일', msg.as_string())
smtp.quit()

 

2편에서 작성한 코드에 이메일 보내는 코드만 추가 되었다. 

파이썬 라이브러리 중 이메일 라이브러리인 smtplib 라이브러리를 import한 다음 email과 관련된 여러 라이브러리를 가져와 적어 넣으면 된다. 

하루에 하나의 기능을 추가하면서 점차 나만의 뉴스 요약 프로그램이 만들어지고 있다.

다음 시간에는 이 요약된 내용을 카카오톡 메세지로 보내는 내용을 추가해 메일 + 카톡 메세지 발송 까지 해보겠다. 

 

 

 

 

 

파이썬으로 기사 요약하기 1편 - 기사 요약

오늘부터 파이썬으로 사업 자동화 시키기 프로젝트 첫번째 시간으로 매일 하고 있는 뉴스 기사 요약하는 것을 파이썬을 이용해 자동화 시켜보려고 합니다. 막 구글에 "파이썬 기사 요약", "파이

mumin-blog.tistory.com

 

 

파이썬으로 기사 요약하기 2편 - 요약 파일 저장

파이썬 한글 요약에 관련된 내용을 구글링으로 찾아보니 이러한 내용들이 나오게 됩니다. Textrankr, Lexrank... 등 여러가지가 나오는데 저는 이 중 Textrankr가 뉴스 요약에는 적합하다고 판단해 Textran

mumin-blog.tistory.com

 

반응형

댓글


"); wcs_do();