Excel 파일 내용을 Gnuboard 게시판에 자동 글 작성하기 (Python) > 컬러형 | 그누보드5

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

  • profile_image
    밤늦은경지
    • 0건
    • 89회
    • 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 회원님들께 항상 감사드립니다 :)

댓글0

등록된 댓글이 없습니다.

댓글
자동등록방지 숫자를 순서대로 입력하세요.
이름
비번
로고

You can relay on our amazing features list and also our customer services will be great experience.

our amazing features list and also our customer services is great.

(재)에버그린 어린이재단

경기도 성남시
분당구 정자동 123-456
2층, 3층, 4층

02-1234-5678
© All Rights Reserved by (재)에버그린 어린이재단