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

파이썬으로 기사 요약하기 4편 - 자동 포스팅

by 디반 2021. 6. 7. 23:04
반응형

 

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

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

mumin-blog.tistory.com

 

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

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

mumin-blog.tistory.com

 

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

오늘은 저번 시간에 만든 엑셀 파일을 메일에 첨부해 전송해보겠습니다. 저는 지메일, Gmail을 이용해 한 번 보내보도록 하겠습니다. Gmail을 이용하려면 첫번째로 2차 인증설정과 동시에 앱 비밀

mumin-blog.tistory.com

 

오늘은 요약된 내용을 메일로 보내기 까지 해보았으니 이번에는 티스토리에 요약된 뉴스 데이터를 자동으로 포스팅 해보도록 하겠습니다.

먼저 자동 포스팅을 하기 위해 티스토리 Open API에 접속 해보도록 하겠습니다. 

 

1. 티스토리 API권한 획득하기 

 

먼저 https://www.tistory.com/guide/api/manage/register 이곳에서 앱 등록을 해주세요!

 

 

나와 있는 모든 항목을 집어 넣어주시고 등록을 누르면 AppID와 Secret Key를 발급 받을 수 있습니다.

APP ID, Secret Key를 반드시 기억하셔야됩니다. 

 

티스토리 공식 API 가이드북를 한 번 찾아보겠습니다. 

공식 가이드북에서 Authentication Code를 발급 받기 위해서는 다음과 같이 진행하라고 합니다. 

https://www.tistory.com/oauth/authorize?client_id=앱아이디&redirect_uri=자기블로그주소&response_type=code&state={state-param}  

주소창에 붙여넣기를 한다음 APP ID와 블로그 주소를 적어 넣으면 다음과 같이 진행됩니다.

 

저는 이러한 예시값으로 진행하겠습니다. 

http://client.redirect.uri?code=1dasdwqsd1sdzxcq5wdasdc1z5casd4zxc1zasda&state=someValue

그럼 Authentication Code는 1dasdwqsd1sdzxcq5wdasdc1z5casd4zxc1zasda 입니다. 

 

 

그 다음 Access Token을 발급받기 위해 다시 주소창에 적어 넣으면 밑과 같은 화면이 보일 겁니다.

https://www.tistory.com/oauth/access_token?client_id=앱아이디&client_secret=시크릿키&redirect_uri=자기블로그주소&code=방금받은AuthenticationCode&grant_type=authorization_code

 

 

 

이제 크롬창에서 f12키를 누르면 우측에 콘솔창이 뜨는데 그 곳에서 Network를 찾아 눌러줍니다. 

그 다음 주소창에 입력을 하면 됩니다. 

그럼 정상적으로 작동이 되는데 그곳에서 Status 창에 있는 숫자가 400이 아닌 200이 찍힐 겁니다. 

그다음 Name에 있는 파일을 눌러주면 error가 아닌 code가 적혀있습니다. 

그 코드를 복사해 메모장에 고이 적어줍시다.

 

그럼 이제 코드를 짤 준비가 다 되었습니다. 

 

import re
import smtplib
import feedparser
import datetime
import json
import requests
from newspaper import Article

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

from email.mime.text import MIMEText



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


#게임 동아 "https://game.donga.com/feeds/rss"
#인벤 "http://feeds.feedburner.com/inven"
#게임 인사이트 "http://feeds.feedburner.com/inven"
#루리웹 "https://bbs.ruliweb.com/news/rss"
#더게임스데일리 "http://www.tgdaily.co.kr/rss/allArticle.xml"

#---------------뉴스 사이트---------------
rss_url = "http://feeds.feedburner.com/inven"
#
rss_feed = feedparser.parse(rss_url)

news_list = []
news_data = {
    "title" : "",
    "content" : "",
    "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[:5]:
    # rss_feed 속 뉴스 링크 분류

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

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

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

    news_data["title"] = NewsTitle
    news_data["content"] = summarized
    news_data["url"] = NewsUrl


    news_content = news_data.copy()

    # for news in news_content.keys():
    #     print(news_content[news])

    news_list.append(news_content)

#-------------- 뉴스 요약 본 정렬 구문----------------
# MIMEText html로 보내는 것
news_list1 = str(news_list)

news_list_title = news_list1.replace("'title':", "<br><br>")
news_list_content = news_list_title.replace("'content':", "<br><br>")
news_list_url = news_list_content.replace("'url':", "<br><br>")

news_list_edit = re.sub("[]{,''}[]", '', news_list_url)

news_list_clear = news_list_edit.replace("\\n","<br>")

print(news_list_url)
print(news_list_clear)


# -------------------티스토리 자동 업로드-----------------

now_date = datetime.datetime.now()
Now_Date = now_date.strftime('%Y-%m-%d')



url_post = "https://www.tistory.com/apis/post/write"

access_token = '엑세스 토큰을 적어주세요!'

blog_name ="https://mumin-blog.tistory.com/"

title = Now_Date + "오늘의 뉴스"

content = Now_Date +"<p>오늘의 게임뉴스[인벤]</p><br><br>"+news_list_clear

visibility = 0

category = 0
# 카테고리 ID

publish_time = ''
#글 예약

slogan = ''

tag = '게임,게임뉴스,게임뉴스요약,뉴스요약,게임뉴스정리,게임뉴스모음,뉴스모음'

acceptComment = 1
# 댓글 허용, 비허용

password = ''
# 보호 글 비밀번호 설정

headers = {'Content-Type': 'application/json; charset=utf-8'}

params = {
    'access_token': access_token,
    'output': 'json',
    'blogName': blog_name,
    'title': title,
    'content': content,
    'visibility': visibility,
    'category': category,
    'published': publish_time,
    'slogan': slogan,
    'tag': tag,
    'acceptComment':acceptComment,
    'password': password }

data = json.dumps(params)
rw = requests.post(url_post, headers=headers, data=data)

if rw.status_code == 200:
    print('ok')
else:
    print('fail')

 

그럼 이렇게 포스팅이 자동으로 됩니다!

 

 

 

티스토리 공식 API

 

Authorization Code 방식 · GitBook

No results matching ""

tistory.github.io

 

 

 

 

 

 

 

반응형

댓글


"); wcs_do();