테스트 사이트 - 개발 중인 베타 버전입니다

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

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

 

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

 

 

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

 

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

 

3696577391_1624179305.1534.png

 

 

 

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

 

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 회원님들께 항상 감사드립니다 :)

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 23개

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

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

파이썬으로 실행을 하면 되는 건가요? (파이썬 무식자의... 질문입니다 ㅋ)
@홈피공장장 좋은 말씀 해주셔서 감사합니다 ^-^
파이썬을 설치하신 후에 DB ID, PW 등을 입력하여 실행하시면 작동해요 :)
만약 파이썬에 openpyxl, pymysql 모듈이 설치되어 있지 않다면 PIP 명령어로 설치하시면 되어요~
그럼 편안한 저녁 되세요! ^^
너무 근사한 팁입니다. 이런 쪽으로는 생각도 못 해봤습니다.
항상 배울게 많은 것 같습니다. 감사합니다^^
@쥐치포 여러모로 부족한 스크립트인데 추천과 댓글 진심으로 감사드립니다! ^-^
분명히 더 좋은 아이디어가 있을 것 같은데 아쉽게도 제 머리에는 떠오르지 않네요 ㅠㅠ
그럼 쥐치포 님께서도 편안한 저녁 되세요! :)
다시 한 번 감사드립니다!!
@펄스나인 저야말로 펄스나인 님의 멋진 스크립트에서 늘 많이 배우고 있습니다! ^-^
추천과 댓글 진심으로 감사드려요~ :)
그럼 펄스나인 님께서도 가정에 건강이 늘 함께 하시기를 기원합니다!!
@Innisfree 별말씀을요.. 미천한 짜지퍼 입니다..ㅎㅎ 편안한 한주 되셔요~
@펄스나인 허걱~ 펄스나인 님처럼 제가 존경하는 고수님께서 그렇게 말씀을 하시면...
저같은 초심자는 "Hello, world!" 정도 출력하는 수준이에요~! ^-^
그럼 펄스나인 님께서도 비 조심하시고 편안한 저녁 되세요 :)
항상 감사드립니다!!
와~이런 걸 마련해주시다니! 참 멋지세요^^
@하나Yun 앗 과찬이십니다 :)
감사합니다!! ^-^
그럼 편안한 저녁 되세요~!
Excel import 기능
파이선에 이제 관심을 갖게 되었는데..
일단 스크랩 해 두고 다음에 꼭 적용해 보겠습니다.
감사합니다.

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

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

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

엑셀은 어디다가 넣어야되나요 그리고 파이썬 실행은 올릴때 마다 한번씩 실행 해줘야하나용?

게시판 목록

그누보드5 팁자료실

글쓰기