오늘은 요약된 내용을 메일로 보내기 까지 해보았으니 이번에는 티스토리에 요약된 뉴스 데이터를 자동으로 포스팅 해보도록 하겠습니다.
먼저 자동 포스팅을 하기 위해 티스토리 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
'Dev DBAN > 개발 이야기' 카테고리의 다른 글
파이썬으로 네이버 카페 게시글 크롤링 (1) | 2021.06.15 |
---|---|
파이썬으로 자동 요약하기 5편 - 자동 요약mk.2 (0) | 2021.06.11 |
파이썬으로 기사 요약하기 3편 - 메일 전송 (0) | 2021.06.04 |
파이썬으로 기사 요약하기 2편 - 요약 파일 저장 (0) | 2021.06.02 |
파이썬으로 기사 요약하기 1편 - 기사 요약 (0) | 2021.05.31 |
댓글