Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python)
-
밤늦은경지
- 0건
- 148회
- 21-06-20 18:10
안녕하세요?? 주말 잘 보내고 계시는가요?? ^-^
Python을 이용하여 Excel 파일의 내용을 그누보드 게시판에 자동으로 글 작성하는 스크립트를 작성했어요~!
다음과 같이 A열에는 제목, B열에는 내용, C열에는 wr_link1을 입력한 XLSX 파일이 있어요~
제목, 내용, wr_link1이 공백인 경우도 있고, 내용에 HTML 태그가 들어간 경우도 있죠 :)
openpyxl 및 pymysql 모듈을 이용한 아래 Python 코드를 실행시키면
엑셀 파일의 각각의 행이 1개의 그누보드 게시글로 등록됩니다! ^-^
[code]
import pymysql, openpyxl
from datetime import datetime
def board_write(board, subject, content, wr_link1, mb_id, nickname):
# MySQL connection 및 cursor 생성
conn = pymysql.connect(host = 'URL을입력하세요',
user = 'DB유저명을입력하세요',
password = 'DB비번을입력하세요',
db = 'DB명을입력하세요',
charset = 'utf8')
curs = conn.cursor()
# 작성글 INSERT
sql = f"select wr_num from g5_write_{board}"
curs.execute(sql)
wr_num = str(int(curs.fetchone()[0]) - 1)
now = datetime.today().strftime('%Y-%m-%d %H:%M:%S') # 그누보드의 날짜 형식 준수 (ex: 2021-04-05 23:45:15)
sql = f"insert into g5_write_{board} set wr_num = {wr_num}, \
wr_reply = '', wr_comment = 0, ca_name = '', wr_option = 'html1', wr_subject = '{subject}', \
wr_content = '{content}', wr_link1 = '{wr_link1}', wr_link2 = '', \
wr_link1_hit = 0, wr_link2_hit = 0, wr_hit = 1, wr_good = 0, wr_nogood = 0, \
mb_id = '{mb_id}', wr_password = '', wr_name = '{nickname}', wr_email = '', wr_homepage = '', \
wr_datetime = '{now}', wr_last = '{now}', wr_ip = '111.111.111.111', \
wr_1 = '', wr_2 = '', wr_3 = '', wr_4 = '', wr_5 = '', \
wr_6 = '', wr_7 = '', wr_8 = '', wr_9 = '', wr_10 = '', \
wr_comment_reply = '', wr_facebook_user = '', wr_twitter_user = '', \
as_re_name = '', as_tag = '', as_map = '', as_icon = '', as_thumb = '', as_video = ''"
curs.execute(sql)
# 부모 아이디에 UPDATE
sql = f"select wr_id from g5_write_{board}"
curs.execute(sql)
wr_id = str(curs.fetchall()[-1][0])
sql = f"update g5_write_{board} set wr_parent = {wr_id} where wr_id = {wr_id}"
curs.execute(sql)
# 새글 INSERT
sql = f"insert into g5_board_new ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values \
( '{board}', '{wr_id}', '{wr_id}', '{now}', '{mb_id}' )"
curs.execute(sql)
# 게시글 1 증가
sql = f"select bo_count_write from g5_board where bo_table = '{board}'"
curs.execute(sql)
bo_count_write = str(int(curs.fetchone()[0]))
sql = f"update g5_board set bo_count_write = {bo_count_write} + 1 where bo_table = '{board}'"
curs.execute(sql)
# MySQL connection 닫기
conn.close()
return
def read_xlsx(filename):
wb = openpyxl.load_workbook(filename)
sh = wb['Sheet1']
data = []
for i in range(sh.max_row): # XLSX 파일 길이만큼 반복문을 수행합니다.
temp = []
for j in range(1, 4):
cv = sh.cell(row=i+1, column=j).value
temp.append(cv) if not cv is None else temp.append('') # None을 ''로 처리합니다.
data.append(temp)
return data
def main():
result_list = read_xlsx('엑셀파일명을입력하세요')
board = '게시판명을입력하세요'
mb_id = '게시글을작성할아이디를입력하세요'
nickname = '게시글을작성할닉네임을입력하세요'
for r in result_list:
board_write(board, r[0], r[1], r[2], mb_id, nickname)
if __name__ == "__main__":
main()
[/code]
특별한 내용은 없지만 63번째 행을 보시면 Null 처리를 하는 부분이 중요한데요~
Python에서의 None을 곧바로 MySQL로 넘기면 Null이 아닌 문자열 'None'으로 입력되기 때문에
이를 ''로 변경하여 Null로 입력이 되도록 한 줄 if문으로 처리했어요 ^^
아미나에서 테스트한 결과는 다음과 같이 정상적으로 4개의 글이 자동 작성되었습니다!
제목, 내용, wr_link1이 모두 정상적으로 입력되었네요 :)
내용의 HTML 태그(<b></b>) 처리도 정상적으로 되었구요~
참고로 위 방법을 사용하여 '제목'에 태그를 넣으려고 테스트해보니
게시판 자체를 수정하지 않는 이상 태그가 그대로 출력되더군요 ㅠㅠ
그리고 아무런 내용이 없는 글도 가능하구요~ ㄷㄷ
DB에 직접 입력하는 방식이기 때문에 심지어 제목이 없는 글도 가능합니다! ㅎㄷㄷ
비록 허접하지만 다양한 용도로 활용할 수 있는 스크립트인데
사이트 운영에 조금이나마 도움이 되셨으면 좋겠네요 ^^
다음에는 Telegram 알림을 이용하여 그누보드를 관리할 수 있는 스크립트를 올릴게요~
그럼 남은 주말 뜻깊게 잘 마무리하시고, 다음주도 홧팅이에요!
SIR 회원님들께 항상 감사드립니다 :)
등록된 댓글이 없습니다.