Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python) > 그누보드5 팁자료실

그누보드5 팁자료실

Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python) 정보

Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python)

본문

안녕하세요?? 주말 잘 보내고 계시는가요?? ^-^

 

Python을 이용하여 Excel 파일의 내용을 그누보드 게시판에 자동으로 글 작성하는 스크립트를 작성했어요~!

 

 

다음과 같이 A열에는 제목, B열에는 내용, C열에는 wr_link1을 입력한 XLSX 파일이 있어요~

 

제목, 내용, wr_link1이 공백인 경우도 있고, 내용에 HTML 태그가 들어간 경우도 있죠 :)

 

3696577391_1624179305.1534.png

 

 

 

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개의 글이 자동 작성되었습니다!

 

3696577391_1624179715.8043.png

 

 

 

제목, 내용, wr_link1이 모두 정상적으로 입력되었네요 :)

 

3696577391_1624179741.7901.png

 

 

 

내용의 HTML 태그(<b></b>) 처리도 정상적으로 되었구요~

 

참고로 위 방법을 사용하여 '제목'에 태그를 넣으려고 테스트해보니 

 

게시판 자체를 수정하지 않는 이상 태그가 그대로 출력되더군요 ㅠㅠ

 

3696577391_1624179788.8454.png

 

 

 

그리고 아무런 내용이 없는 글도 가능하구요~ ㄷㄷ

 

3696577391_1624179828.7334.png

 

 

 

DB에 직접 입력하는 방식이기 때문에 심지어 제목이 없는 글도 가능합니다! ㅎㄷㄷ

 

3696577391_1624179920.7589.png

 

 

 

비록 허접하지만 다양한 용도로 활용할 수 있는 스크립트인데

 

사이트 운영에 조금이나마 도움이 되셨으면 좋겠네요 ^^

 

다음에는 Telegram 알림을 이용하여 그누보드를 관리할 수 있는 스크립트를 올릴게요~

 

그럼 남은 주말 뜻깊게 잘 마무리하시고, 다음주도 홧팅이에요! 

 

SIR 회원님들께 항상 감사드립니다 :)

추천
16

댓글 23개

추천과 댓글 남겨주셔서 저야말로 감사합니다! ^-^
지니야 님께서도 무더운 여름이지만 가정에 건강이 늘 함께 하시기를 기원합니다 :)
옙 감사합니다! 말씀하신대로 다양하게 활용이 가능할 것 같네요 :)
조금 응용하면 XLSX 파일 이외에 HWP 파일을 게시글로 올릴 수 있는데,
다음에는 이런 용도의 스크립트를 작성해볼게요~
그럼 편안한 저녁 되세요 ^-^
밤늦은 시간에 추천과 댓글 올려주셔서 진심으로 감사드립니다! ^-^
저야말로 비타주리 님께서 올려주는 소스와 팁을 보며 늘 많이 배우고 있네요~
그럼 부디 편안한 밤 되시고, 내일도 화이팅입니다!
항상 감사드립니다 :)
오.. 멋집니다. ^^

파이썬 좀 공부하다가, 못하고있는데, 소스 보니 다시 열정이 뿜뿜 ㅎㅎ

파이썬으로 실행을 하면 되는 건가요? (파이썬 무식자의...  질문입니다 ㅋ)
좋은 말씀 해주셔서 감사합니다 ^-^
파이썬을 설치하신 후에 DB ID, PW 등을 입력하여 실행하시면 작동해요 :)
만약 파이썬에 openpyxl, pymysql 모듈이 설치되어 있지 않다면 PIP 명령어로 설치하시면 되어요~
그럼 편안한 저녁 되세요! ^^
여러모로 부족한 스크립트인데 추천과 댓글 진심으로 감사드립니다! ^-^
분명히 더 좋은 아이디어가 있을 것 같은데 아쉽게도 제 머리에는 떠오르지 않네요 ㅠㅠ
그럼 쥐치포 님께서도 편안한 저녁 되세요! :)
다시 한 번 감사드립니다!!
저야말로 펄스나인 님의 멋진 스크립트에서 늘 많이 배우고 있습니다! ^-^
추천과 댓글 진심으로 감사드려요~ :)
그럼 펄스나인 님께서도 가정에 건강이 늘 함께 하시기를 기원합니다!!
허걱~ 펄스나인 님처럼 제가 존경하는 고수님께서 그렇게 말씀을 하시면...
저같은 초심자는 "Hello, world!" 정도 출력하는 수준이에요~! ^-^
그럼 펄스나인 님께서도 비 조심하시고 편안한 저녁 되세요 :)
항상 감사드립니다!!

스크랩해갑니다~ 오래지나서 보실런지 모르겠지만 

따라서 한번 해보다가 오류가 없는데도 계속 글이 안올라가길래 

보니까 소스에 conn.commit() 이 ㅂ바졌더라구요 ㅠㅠ

전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT