!pip install selenium
!pip install webdriver_manager
!pip install --upgrade selenium
!pip install chromedriver_autoinstaller
import os
import openai
import time
import datetime
import requests
from bs4 import BeautifulSoup
import datetime as dt
import sys
# import tistoryAPI
# import blogInfo
# import papagoAPI
# import papagoID
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import openai
# OPENAI API키 설정
openai.api_key = "sk-W2x3457374347437d0HolA2EmqpDA"
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import xmltodict
import json
# # 크롬드라이버 셋팅
# def set_chrome_driver(headless=True):
# options = webdriver.ChromeOptions()
# if headless:
# options.add_argument('headless')
# options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36")
# driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
# return driver
# 크롬드라이버 셋팅
def set_chrome_driver(headless=False):
options = webdriver.ChromeOptions()
if headless:
options.add_argument('headless')
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36")
# driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver = webdriver.Chrome(executable_path='C:\Program Files\Chrome Driver\chromedriver.exe')
return driver
# 뉴스 페이지 크롤링
def crawl_page(url):
try:
driver = set_chrome_driver(False)
driver.get(url)
# 요소 변경 가능
article_page = driver.find_element(By.CLASS_NAME, 'articlePage')
text = article_page.text
driver.close()
except NoSuchElementException:
text = ""
return text
# ChatGPT 요약 # @ 이게 맞지?
def summarize(text):
# 모델 엔진 선택
model_engine = "gpt-3.5-turbo" # "gpt-3.5-turbo-16k" => 안되면 이걸로.
# 맥스 토큰
max_tokens = 16000
# 프롬프트 (요약해줘!)
prompt = f'''Summarize the paragraph below and interpret whether it is a positive or negative sentiment.
{text}
'''
completion = openai.ChatCompletion.create(
model=model_engine,
temperature=0.3, # creativity
messages=[
{"role": "user", "content": prompt}
]
)
return completion.choices[0].message.content
# 파파고 번역
def papago_translate(text):
try:
papago = set_chrome_driver(False)
papago.get('https://papago.naver.com/')
time.sleep(1)
papago.find_element(By.ID, 'txtSource').send_keys(text)
papago.find_element(By.ID, 'btnTranslate').click()
time.sleep(2)
papago_translated = papago.find_element(By.ID, 'targetEditArea')
result = papago_translated.text
except NoSuchElementException: # 예외처리 (요소를 찾지 못하는 경우)
result = '번역 오류ㅠㅠ'
finally:
papago.close()
return result
# 최종 wrapper
def summarize_news(url):
page = crawl_page(url)
summarized = summarize(page)
print('[원문 요약]')
print(summarized)
korean_translated = papago_translate(summarized)
print('\n[한글 요약]')
print(korean_translated)
return korean_translated
import time
import telegram
def Telegramchat(text):
telegram_token = '5106829469:AAGc-XqcK67mDADEuJERXFXgazI68dcO_x0'
telegram_chat_id = '5257112430'
bot = telegram.Bot(token = telegram_token)
# text = "김프알람"
url = 'https://api.telegram.org/bot'+telegram_token+'/sendMessage?chat_id='+telegram_chat_id+'&text='+text
return requests.get(url)
일단 글은 수정 중에 있고.. 코드도 최적화는 덜 되어 있다. 순기능만 하는 정도인데...
try: # 문제가 생겨 코드가 종료 될 경우 텔레그램으로 재실행을 위한 알람이 보내짐
while True:
now = datetime.datetime.now()
if now.hour== 18 or now.hour== 9: # 아침 9시 저녁 18시 뉴스 요약.
# most popular news 의 신문기사 요소를 크롤링 합니다
top5 = set_chrome_driver(False)
# URL 요청
top5.get('https://www.investing.com/news/most-popular-news')
# 5개의 요소만 가져옵니다.
top5.find_element(By.CLASS_NAME, 'largeTitle').find_elements(By.CLASS_NAME, 'js-article-item')[:5]
# 5개의 신문기사 URL 만 추출 합니다.
top5_links = []
for link in top5.find_element(By.CLASS_NAME, 'largeTitle').find_elements(By.CLASS_NAME, 'js-article-item')[:3]:
top5_links.append(link.find_element(By.CSS_SELECTOR, 'a').get_attribute('href'))
# 5개의 신문기사 링크에 대한 본문 크롤링+요약+번역 을 진행합니다.
top5_summarize = []
for link in top5_links:
output = summarize_news(link)
top5_summarize.append(output)
print()
# Print the generated text
# t_title = papagoAPI.translate("How to make money with Bitcoin","en","ko")
# t_title = "현재 인기 top5 경제뉴스 요약 _"+"연"+"월"+"일"+"시"
#티스토리 태그정보 입력
tagName = "Economic News Summary,Economic,News,Sentiment Analysis"
visiblityCd = "3" # 발행상태 (0: 비공개 - 기본값, 1: 보호, 3: 발행)
publishedDt = None # 발행시간 (TIMESTAMP 이며 미래의 시간을 넣을 경우 예약. 기본값: 현재시간)
# 티스토리 API 이용하여 포스트 등록
# content = papagoAPI.translate(generated_text,"en","ko")
# content = '<pre class="mipsasm">' + generated_text + '</pre>'
content = top5_summarize
time.sleep(3600)
except Exception as e:
send_text = "블로그 자동 글 올리기 오류남 확인 할것"+str(e)
response = Telegramchat(send_text)
# print(response)
여기가 main 함수로 쓸 부분이다.
1. 뉴스기사를 셀레니움을 통해 크롤링 한다.
2. 영어 사이트이기 때문에 챗gpt로 요약 및 긍부정 판단을 해주라고 요청 (기사 5개 정도)
3. 요약 및 감성분석이 된 기사를 블로그에 기재한다.
인데 블로그에 기재하는 부분에서 api로 요청할 경우 글자수가 길면 (t스토리)서버에서 요청을 받아주질 않는다
그래서 글을 개제한 후 내 블로그 주소를 통해 셀레니움으로 자동으로 텍스트만 따로 올리는 방식으로 수정하려고 한다.
지금은 글자수를 줄이기 위해서 어쩔 수 없이 대충 요약해서 올리는 방식으로 구성해 두었다.
=====================================
블로그 자동화를 위한 초기 세팅은 우선
1.번을 하기 위해서 크롬 업데이트를 끈다.
그 다음
'IT - 코딩' 카테고리의 다른 글
AI spark 미세먼지 농도 예측 (0) | 2023.04.30 |
---|---|
chat GPT4 API 사용 오류 (2) | 2023.04.14 |