코드 리팩토링

This commit is contained in:
2024-10-03 08:32:03 +09:00
parent 2b0d3ebb6c
commit 4d1fd7a5be
8 changed files with 40 additions and 12 deletions

30
package/GetConfig.py Normal file
View File

@ -0,0 +1,30 @@
import os
from dotenv import load_dotenv
load_dotenv(r'./.env.dev')
class GetConfig:
def __init__(self):
self.host = os.getenv('DB_HOST')
self.user = os.getenv('DB_USER')
self.password = os.getenv('DB_PASSWORD')
self.database = os.getenv('DB_NAME')
def show_config(self):
for key, value in self.__dict__.items():
print(f"{key.upper()}: {value}")
if __name__ == "__main__":
# 결과 확인
config = GetConfig()
config.show_config()
# 오랜만에 보다보니 헷갈려서 참고용으로 작성
# class GetConfig:
# def __init__(self, name=None):
# self.name = name if name is not None else "default_name"
# self.host = os.getenv('DB_HOST')
# self.user = os.getenv('DB_USER')
# self.password = os.getenv('DB_PASSWORD')
# self.database = os.getenv('DB_NAME')

1
package/__init__.py Normal file
View File

@ -0,0 +1 @@
from . import get_url

30
package/convert_md.py Normal file
View File

@ -0,0 +1,30 @@
import os
from dotenv import load_dotenv
import markdown
import package.translate_article as ta
import ../openai/open_ai as oa
# .env 파일에서 API 키 로드
load_dotenv(r'./.env.dev')
# 예시 기사 텍스트 (text 파싱 결과로 제공된 텍스트를 사용할 수 있습니다)
article_text = ta.getContents()
# 블로그 스타일 참고 텍스트
style_reference = os.getenv("reference_style")
# 블로그 포스트 생성
blog_post = oa.generate_blog_post(article_text, style_reference)
# 결과 출력
print(blog_post)
# Markdown 텍스트 예시
markdown_text = blog_post
# Markdown을 HTML로 변환
html = markdown.markdown(markdown_text)
# 결과 출력
print("Converted HTML:")
print(html)

38
package/get_url.py Normal file
View File

@ -0,0 +1,38 @@
import mysql.connector
import os
# MariaDB에 연결하는 함수
def fetch_data_from_mariadb():
try:
# 데이터베이스 연결
connection = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
# 커서 생성
cursor = connection.cursor(dictionary=True)
# 쿼리 실행
query = "SELECT * FROM healty_url_source ORDER BY idx DESC LIMIT 1;"
cursor.execute(query)
# 결과 가져오기
result = cursor.fetchone()
return result
except mysql.connector.Error as err:
print(f"Error: {err}")
finally:
if connection.is_connected():
cursor.close()
connection.close()
if __name__ == "__main__":
# 결과 확인
data = fetch_data_from_mariadb()
print(data['url'])

53
package/open_ai.py Normal file
View File

@ -0,0 +1,53 @@
import os
from openai import OpenAI
from dotenv import load_dotenv
import package.translate_article as ta
# .env 파일에서 API 키 로드
load_dotenv()
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
)
def generate_blog_post(article_text, style_reference):
# ChatCompletion API를 사용하여 텍스트 변환
prompt = (
"""
너는 대한민국에 거주하는 블로그 전문가이다.
네가 작성한 블로그 글은 지난 3년간 높은 주목성, 관여도, 전환율을 만들었다.
이 전문성을 이용해서 제공받는 기사를 블로그 형태로 변형하여 작성해야만 한다.
---
글을 작성하고 제목을 만들어서 맨 마지막 줄에 추가해줘.
"""
f"\n블로그 스타일은 아래 문서를 모방해줘. 적절한 사례들이 들어가도 좋겠어.\n---\n{style_reference}\n"
f"제공된 기사 내용:\n{article_text}"
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "너는 대한민국에 거주하는 블로그 전문가이다."},
{"role": "user", "content": prompt}
],
max_tokens=2000,
temperature=0.7, # 창의성을 위한 적절한 값 조정
)
# 응답에서 텍스트 추출
blog_post = response.choices[0].message.content
return blog_post
if __name__ == "__main__":
# 예시 기사 텍스트 (text 파싱 결과로 제공된 텍스트를 사용할 수 있습니다)
article_text = ta.getContents()
# 블로그 스타일 참고 텍스트
style_reference = os.getenv("reference_style")
# 블로그 포스트 생성
blog_post = generate_blog_post(article_text, style_reference)
# 결과 출력
print(">>>>\n" * 3)
print(blog_post)

View File

@ -0,0 +1,30 @@
import requests
from bs4 import BeautifulSoup
import db_ctr.get_url as get_url
url = get_url.fetch_data_from_mariadb()['url']
def getContents():
# HTTP GET 요청으로 페이지 가져오기
response = requests.get(url)
# 응답 상태 확인
if response.status_code == 200:
# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# HTML 태그를 제거 후 페이지의 모든 텍스트 가져오기 (전체 내용)
page_content = soup.get_text()
# 빈 줄을 제거하고 텍스트만 출력 (줄바꿈 문자를 기준으로 필터링)
lines = [line.strip() for line in page_content.splitlines() if line.strip()]
# 결과 출력
contents = "\n".join(lines)
return contents
else:
print(f"Failed to fetch the URL. Status code: {response.status_code}")
tmp = getContents()
print(tmp)

43
package/wp.py Normal file
View File

@ -0,0 +1,43 @@
import os
from dotenv import load_dotenv
import json
import requests
from urllib.parse import urljoin
from datetime import datetime
# .env 파일에서 API 키 로드
load_dotenv(r'./.env.dev')
wp_url = os.getenv('WP_URL')
wp_usr = os.getenv('WP_USERNAME')
wp_key = os.getenv('WP_API_KEY')
status = 'draft' # 즉시발행 publish, 임시저장 draft
# slug = 'input your slug'
title = '파이썬 자동포스팅'
content = 'html 호출 연동 필요.' # 연결만하면됨 테스트 완료.
category_id = [2] # 카테고리 아이디
# tag_ids = [21] #태그아이디
media_id=None #이미지 업로드를 제외 None
payload = {
"status": status,
"title": title,
"content": content,
"date": datetime.now().isoformat(), # YYYY-MM-DDTHH:MM:SS
"categories": category_id
}
if media_id is not None:
payload['featured_media'] = media_id
result = requests.post(urljoin(wp_url, "wp-json/wp/v2/posts"),
data=json.dumps(payload),
headers={'Content-type': "application/json"},
auth=(wp_usr, wp_key))
if result.ok:
print(f"성공 code:{result.status_code}")
else:
print(f"실패 code:{result.status_code} reason:{result.reason} msg:{result.text}")