Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python) 정보
Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python)본문
안녕하세요?? 주말 잘 보내고 계시는가요?? ^-^
Python을 이용하여 Excel 파일의 내용을 그누보드 게시판에 자동으로 글 작성하는 스크립트를 작성했어요~!
다음과 같이 A열에는 제목, B열에는 내용, C열에는 wr_link1을 입력한 XLSX 파일이 있어요~
제목, 내용, wr_link1이 공백인 경우도 있고, 내용에 HTML 태그가 들어간 경우도 있죠 :)
openpyxl 및 pymysql 모듈을 이용한 아래 Python 코드를 실행시키면
엑셀 파일의 각각의 행이 1개의 그누보드 게시글로 등록됩니다! ^-^
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()
특별한 내용은 없지만 63번째 행을 보시면 Null 처리를 하는 부분이 중요한데요~
Python에서의 None을 곧바로 MySQL로 넘기면 Null이 아닌 문자열 'None'으로 입력되기 때문에
이를 ''로 변경하여 Null로 입력이 되도록 한 줄 if문으로 처리했어요 ^^
아미나에서 테스트한 결과는 다음과 같이 정상적으로 4개의 글이 자동 작성되었습니다!
제목, 내용, wr_link1이 모두 정상적으로 입력되었네요 :)
내용의 HTML 태그(<b></b>) 처리도 정상적으로 되었구요~
참고로 위 방법을 사용하여 '제목'에 태그를 넣으려고 테스트해보니
게시판 자체를 수정하지 않는 이상 태그가 그대로 출력되더군요 ㅠㅠ
그리고 아무런 내용이 없는 글도 가능하구요~ ㄷㄷ
DB에 직접 입력하는 방식이기 때문에 심지어 제목이 없는 글도 가능합니다! ㅎㄷㄷ
비록 허접하지만 다양한 용도로 활용할 수 있는 스크립트인데
사이트 운영에 조금이나마 도움이 되셨으면 좋겠네요 ^^
다음에는 Telegram 알림을 이용하여 그누보드를 관리할 수 있는 스크립트를 올릴게요~
그럼 남은 주말 뜻깊게 잘 마무리하시고, 다음주도 홧팅이에요!
SIR 회원님들께 항상 감사드립니다 :)
!-->16
댓글 23개
그럼 이번주도 홧팅입니다 :)
지니야 님께서도 무더운 여름이지만 가정에 건강이 늘 함께 하시기를 기원합니다 :)
조금 응용하면 XLSX 파일 이외에 HWP 파일을 게시글로 올릴 수 있는데,
다음에는 이런 용도의 스크립트를 작성해볼게요~
그럼 편안한 저녁 되세요 ^-^
저야말로 비타주리 님께서 올려주는 소스와 팁을 보며 늘 많이 배우고 있네요~
그럼 부디 편안한 밤 되시고, 내일도 화이팅입니다!
항상 감사드립니다 :)
파이썬 좀 공부하다가, 못하고있는데, 소스 보니 다시 열정이 뿜뿜 ㅎㅎ
파이썬으로 실행을 하면 되는 건가요? (파이썬 무식자의... 질문입니다 ㅋ)
파이썬을 설치하신 후에 DB ID, PW 등을 입력하여 실행하시면 작동해요 :)
만약 파이썬에 openpyxl, pymysql 모듈이 설치되어 있지 않다면 PIP 명령어로 설치하시면 되어요~
그럼 편안한 저녁 되세요! ^^
항상 배울게 많은 것 같습니다. 감사합니다^^
분명히 더 좋은 아이디어가 있을 것 같은데 아쉽게도 제 머리에는 떠오르지 않네요 ㅠㅠ
그럼 쥐치포 님께서도 편안한 저녁 되세요! :)
다시 한 번 감사드립니다!!
추천과 댓글 진심으로 감사드려요~ :)
그럼 펄스나인 님께서도 가정에 건강이 늘 함께 하시기를 기원합니다!!
저같은 초심자는 "Hello, world!" 정도 출력하는 수준이에요~! ^-^
그럼 펄스나인 님께서도 비 조심하시고 편안한 저녁 되세요 :)
항상 감사드립니다!!
일단 스크랩 해 두고 다음에 꼭 적용해 보겠습니다.
감사합니다.
스크랩해갑니다~ 오래지나서 보실런지 모르겠지만
따라서 한번 해보다가 오류가 없는데도 계속 글이 안올라가길래
보니까 소스에 conn.commit() 이 ㅂ바졌더라구요 ㅠㅠ
엑셀은 어디다가 넣어야되나요 그리고 파이썬 실행은 올릴때 마다 한번씩 실행 해줘야하나용?