박카스
박카스
🌿 뉴비 파트너
🚀 SNS 챌린지 달성자

루미스테이지 첫 공개: 블로그 자동발행 쇼케이스

이번에 저는 ‘블로그 글쓰기 자동화’라는 무대를 기획했습니다.


이유는 간단해요.

글 하나 올릴 때마다 로그인, 복붙, 저장 버튼 누르는 반복이 너무 지겨웠거든요.


“만약 클릭 한 번으로 블로그 글이 자동으로 생성되고 발행된다면 어떨까?”


그 호기심이 저를 루미스테이지 프로젝트로 이끌었습니다.

(사용한 도구)

  • Cursor: 프롬프트 실행 및 코드 생성

  • Python 3.10+

  • Chrome + Selenium + pyperclip + webdriver-manager → 네이버 로그인 자동화

  • openpyxl → 엑셀 데이터(루미스테이지.xlsx) 관리

  • Gemini API → AI 본문 생성

  • tkinter + pyinstaller → GUI + exe 빌드

루미스테이지 자동 글쓰기 – 단계별 설명 + 프롬프트


1단계 – 루미_포털입장.py

왜 필요한가?

이건 공연장 입구에서 입장권을 확인하는 절차와 같아요.
아이돌이 무대에 오르려면 반드시 출입문을 통과해야 하듯, 블로그 글을 자동으로 쓰려면 먼저 네이버에 안전하게 로그인해야 합니다.
여기서는 send_keys 대신 Ctrl+V 붙여넣기를 쓰는 게 핵심인데, 이는 사람이 직접 입력하는 것처럼 보이게 하는 ‘위장 티켓’ 같은 역할이에요.

프롬프트

네이버 블로그 자동 로그인 파이썬 파일을 생성하세요.

파일명: 루미_포털입장.py

네이버 계정 정보:

아이디: 당신의 아이디

비밀번호: 당신의 비밀번호

셀레니움을 이용해 로그인 페이지(https://nid.naver.com/nidlogin.login)에 접속합니다.

아이디와 비밀번호 입력 시 send_keys는 사용하지 마세요.

pyperclip을 사용하여 클립보드에 복사한 뒤, 입력창을 클릭하고 Ctrl+V로 붙여넣기 방식으로 처리합니다.

로그인 버튼 클릭 후 2초간 대기합니다.

블로그 글쓰기 페이지(https://blog.naver.com/GoBlogWrite.naver)로 이동합니다.

# 로그인구조

<div class="content">
<div class="login_wrap">

<ul class="menu_wrap" role="tablist">
<li class="menu_item" role="presentation">
<!--[주] 탭메뉴 활성화시(=선택시) "on"을 추가해주세요. 접근성: aria-selected는 탭 선택시 true, 미선택시 false로 적용-->
<!--[주:접근성] 탭메뉴의 id 값과 탭내용의 aria-controls를 연결하고 있습니다. -->
<a href="#none" id="loinid" class="menu_id on" role="tab" aria-selected="true">
<span class="menu_text"><span class="text">ID/전화번호</span></span>
</a>
</li>
<li class="menu_item" role="presentation">
<a href="#none" id="ones" class="menu_ones" role="tab" aria-selected="false">
<span class="menu_text"><span class="text">일회용 번호</span></span>
</a>
</li>
<li class="menu_item" role="presentation">
<a href="#none" id="qrcode" class="menu_qr" role="tab" aria-selected="false">
<span class="menu_text"><span class="text">QR코드</span></span>
</a>
</li>
</ul>
<form id="frmNIDLogin" name="frmNIDLogin" target="_top" autocomplete="off" action="https://nid.naver.com/nidlogin.login" method="POST">
<input type="hidden" id="localechange" name="localechange" value="">
<input type="hidden" name="dynamicKey" id="dynamicKey" value="0OCAMyPBxw40rtMi9Piz2K1qcYCoUsLsgGh5pjMH5N7jM98-QYm550cT-dp37tXxDfbl8l4fPc8PqCAoRXYG66lUWa_QIW2OOIURStkCA6c">
<input type="hidden" name="eccpw" id="eccpw" value="">
<input type="hidden" name="sessionKey" id="sessionKey" value="">
<input type="hidden" name="enctp" id="enctp" value="19">
<input type="hidden" name="next_step" id="next_step" value="true">
<input type="hidden" name="show_pk" id="show_pk" value="true">
<input type="hidden" name="wtoken" id="wtoken" value="">
<input type="hidden" name="fbOff" id="fbOff" value="true">
<input type="hidden" name="svctype" id="svctype" value="1">
<input type="hidden" name="smart_LEVEL" id="smart_LEVEL" value="1">
<input type="hidden" name="bvsd" id="bvsd" value="">
<input type="hidden" name="locale" id="locale" value="ko_KR">
<input type="hidden" name="url" id="url" value="https://www.naver.com/">


<ul class="panel_wrap">
<li class="panel_item" style="display: block;">
<div class="panel_inner" role="tabpanel" aria-controls="loinid">
<div class="login_form">
<div class="login_box">
<div class="input_item id on" id="input_item_id">
<input type="text" id="id" name="id" accesskey="L" maxlength="41" autocapitalize="none" value="" title="아이디" class="input_id" aria-label="아이디 또는 전화번호">
<label for="id" class="text_label" id="id_label" aria-hidden="true">아이디 또는 전화번호</label>
<button type="button" class="btn_delete" id="id_clear" style="display: block;">
<span class="icon_delete">
<span class="blind">삭제</span>
</span>
</button>
</div>
<div class="input_item pw on" id="input_item_pw">
<input type="password" id="pw" name="pw" title="비밀번호" class="input_pw" maxlength="16" aria-label="비밀번호">
<label for="pw" class="text_label" id="pw_label" aria-hidden="true">비밀번호</label>
<button type="button" class="btn_view hide" id="pw_hide" aria-pressed="false" style="display: block;">
<span class="icon_view">
<span class="blind" id="icon_view">선택 안 됨,비밀번호 표시</span>
</span>
</button>
<button type="button" class="btn_delete" id="pw_clear" style="display: block;">
<span class="icon_delete">
<span class="blind">삭제</span>
</span>
</button>
</div>
</div>
</div>
<div class="login_keep_wrap" id="login_keep_wrap">
<div class="keep_check " id="keep" role="checkbox" aria-checked="false" tabindex="0">
<input type="checkbox" id="nvlong" name="nvlong" tabindex="-1" class="input_keep" value="off">
<span for="keep" class="keep_text">로그인 상태 유지</span>
</div>
<div class="ip_check">
<a href="/login/ext/help_ip3.html" target="_blank" id="ipguide" title="IP보안"><span class="ip_text">IP보안</span></a>
<span class="switch">
<input type="checkbox" id="switch" class="switch_checkbox" value="off">
<label for="switch" class="switch_btn">
<span class="switch_on" role="checkbox" aria-checked="true">ON</span>
<span class="switch_off" role="checkbox" aria-checked="false">OFF</span>
</label>
</span>
</div>
</div>

<div class="login_error_wrap" id="err_capslock" style="display: none;">
<div class="error_message">
<p><strong>Caps Lock</strong>이 켜져 있습니다.</p>
</div>
</div>

<div class="login_error_wrap" id="err_empty_id" style="display: none;">
<div class="error_message">
<strong>아이디 또는 전화번호</strong>를 입력해 주세요.
</div>
</div>

<div class="login_error_wrap" id="err_empty_pw" style="display: none;">
<div class="error_message">
<strong>비밀번호</strong>를 입력해 주세요.
</div>
</div>
<div class="login_error_wrap addchatbot" id="err_passkey_common" style="display: none;">
<div class="error_message">
패스키 로그인에 실패했습니다. 다시 시도해 주세요.
</div>
<a href="https://nca.naver.com/chat/account/view" target="_blank" class="chatbot nlog-click" id="log.chatbot">
<span class="icon_chatbot"><span class="blind">챗봇</span></span>
</a>
</div>
<div class="login_error_wrap addchatbot" id="err_passkey_common2" style="display: none;">
<div class="error_message">
패스키 로그인에 실패했습니다. 다른 로그인 수단으로 로그인 해주세요.
</div>
<a href="https://nca.naver.com/chat/account/view" target="_blank" class="chatbot" id="log.chatbot">
<span class="icon_chatbot"><span class="blind">챗봇</span></span>
</a>
</div>
<div class="login_error_wrap addchatbot" id="err_passkey_common3" style="display: none;">
<div class="error_message">
패스키 로그인에 실패했습니다. 다른 로그인 수단으로 로그인 해주세요.
</div>
<a href="https://nca.naver.com/chat/account/view" target="_blank" class="chatbot" id="log.chatbot">
<span class="icon_chatbot"><span class="blind">챗봇</span></span>
</a>
</div>
<div class="login_error_wrap addchatbot" id="err_passkey_common4" style="display: none;">
<div class="error_message">
패스키 로그인에 실패했습니다. 새로고침 후 다시 시도해 주세요.
</div>
<a href="https://nca.naver.com/chat/account/view" target="_blank" class="chatbot" id="log.chatbot">
<span class="icon_chatbot"><span class="blind">챗봇</span></span>
</a>
</div>
<div class="login_error_wrap" id="err_common" style="display:none;">
<div class="error_message" style="width:100%">

</div>
</div>
<div class="btn_login_wrap">
<button type="submit" class="btn_login next_step nlog-click" id="log.login">
<span class="btn_text" id="log.login.text">로그인</span>

</button>
</div>
<div class="dividing_safe" id="passkey.divider">
<span class="text">지문 · 얼굴 인증을 설정했다면</span>
</div>
<div class="btn_login_wrap" id="passkey.warpper">
<button type="button" class="btn_login white nlog-click" id="log.passkeylogin">
<span class="btn_text">패스키 로그인</span>
<span class="blind" id="log.passkey.login.blind">패스키로그인 버튼</span>
</button>

</div>
</div>
</li>
</ul>
</form>
</div>
<ul class="find_wrap" id="find_wrap">

<li><a target="_blank" href="https://nid.naver.com/user2/api/route?m=routePwInquiry&amp;lang=ko_KR" id="idinquiry" class="find_text">비밀번호 찾기</a></li>
<li><a target="_blank" href="https://nid.naver.com/user2/api/route?m=routeIdInquiry&amp;lang=ko_KR" id="pwinquiry" class="find_text">아이디 찾기</a></li>
<li><a target="_blank" href="https://nid.naver.com/user2/V2Join?m=agree&amp;lang=ko_KR&amp;realname=N" id="join" class="find_text">회원가입</a>
</li>

</ul>
<!--배너-->
<div id="gladbanner" class="banner_wrap"><div style="width: 100%; height: auto; margin: 0px auto; line-height: 0;"><iframe id="gladbanner_tgtLREC" frameborder="no" scrolling="no" tabindex="0" name="" title="AD" sandbox="allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation" src="https://ssl.pstatic.net/tveta/libs/glad/prod/3.3.2/res/r.html" style="width: 100%; height: 147px; visibility: inherit; border: 0px; vertical-align: bottom;"></iframe></div></div>
</div>

검은 배경이있는 컴퓨터 화면의 스크린 샷

2단계 – 서울스테이지세팅

왜 필요한가?

이건 공연 리허설과 같아요.
무대 조명도 맞추고, 마이크도 테스트하고, 스포트라이트도 점검해야 하죠.
블로그 글쓰기 화면도 iframe으로 들어가야 하고, 방해되는 팝업은 꺼야 합니다.
그 다음에는 제목과 본문을 실제 사람이 타이핑하듯 천천히 입력하는데, 이건 가수의 발성 연습처럼 자연스러움을 흉내 내는 과정이에요.

프롬프트

네이버 블로그 글쓰기 페이지 입력 및 제어 로직을 구현하세요.

1. 글쓰기 페이지 진입 후 #mainFrame iframe으로 전환합니다.

2. 팝업 닫기 처리:

.se-popup-button-cancel 요소가 있으면 클릭, 없으면 무시합니다.

.se-help-panel-close-button 요소가 있으면 클릭, 없으면 무시합니다.

3. 제목 입력:

.se-section-documentTitle 요소 클릭 후 "제목 테스트" 문자열 입력

입력은 ActionChains를 사용하고, send_keys는 사용하지 않습니다.

0.03초 간격으로 한 글자씩 타이핑합니다.

4. 본문 입력:

.se-section-text 요소 클릭 후 "18기 블로그글쓰기 스터디입니다." 문장을 5줄 입력합니다.

줄마다 ActionChains로 타이핑하며, 엔터 포함 0.03초 간격으로 입력합니다.

5. 저장 버튼 클릭:

.save_btn__bzc5B 요소를 찾아 클릭합니다.

<<컨트롤 + i 를 누르시거나, 커서 화면 우측상단 + 를 눌러 새 파일 열기>>

이후 2단계 프롬프트 전체 복사 및 붙여넣기

<< 작업완료 후 초록색 버튼 keep 눌러주기>>

3단계 – 한류뮤즈_제미니가이드.py

왜 필요한가?

여기서는 뮤즈(영감의 여신)를 불러오는 순간이에요.
아이돌 그룹이 노래를 만들 때 작곡가가 곡을 주듯, 글 자동화에서는 AI 모델이 본문을 지어내는 작곡가가 됩니다.
Gemini API를 연결하는 것은 “세계적인 프로듀서를 섭외하는 과정”이라고 생각하면 돼요.

프롬프트

Gemini API를 활용하는 파이썬 파일을 작성하세요.

참고 문서: @https://ai.google.dev/gemini-api/docs/get-started/tutorial?lang=python&hl=ko

파일명: 한류뮤즈_제미니가이드.py

모델: gemini-2.5-flash

Gemini API Key를 적용하세요.

<< 3단계에서는 새로운 파이썬 파일을 만들어야하므로, + 버튼을 눌러 새 채팅창을 연 후, tab 왼쪽 x버튼을 눌러 자동연동된 파일썬 파일을 해제시키기>>

<<참고 문서 다음에 https://ai.google.dev/gemini-api/docs/get-started/tutorial?lang=python&hl=ko 이 링크 복사 붙여넣기>>

  • 링크 앞에 자동으로 @ 표시가 붙어야함. 안붙으면 수동으로 링크앞에 @ 넣어줄것.

  • 제미니 api키는 각자 자신이 발급받은 무료 api키를 넣어줄것.

    -> https://aistudio.google.com/app/apikey?pli=1 제미니 api키 발급받는곳

4단계 – 씨앗플레이리스트_생성기.py

왜 필요한가?

이건 앨범 트랙리스트 작성과 같아요.
앨범에는 곡 제목이 먼저 정해지고, 그 다음에 가사가 채워지죠.
마찬가지로 엑셀에 제목들을 먼저 넣고, 본문은 비워둔 상태에서 AI가 나중에 채워 넣습니다.
이게 바로 씨앗을 뿌리는 작업이에요.

프롬프트

엑셀 파일을 생성하는 파이썬 스크립트를 작성하세요.

파일명: 씨앗플레이리스트_생성기.py

현재 작업 디렉토리에 루미스테이지.xlsx 파일을 새로 생성합니다.

A1 셀에 "제목", B1 셀에 "본문"을 기록합니다.

A2 ~ A6에는 “많은 사용자가 검색할 법한” 블로그 포스팅 제목 샘플 5개를 채웁니다.

B2 ~ B6은 모두 비워둡니다.

파일을 저장하고 닫습니다.

한국의 새로운 채팅 버튼의 스크린 샷

<<이번에도 새로운 파이썬 파일이 필요하므로, 3단계와 동일하게 시작하기>>

한국어 문자 메시지의 스크린 샷

<< Run도 눌러주고 가운데 초록색 버튼 Keep도 눌러주기>>

5단계 – AI_작사작곡_세션.py

왜 필요한가?

여기서는 작곡·작사 세션이에요.
앞서 만든 트랙리스트(A열 제목)를 불러와, Gemini라는 AI 작곡가에게 가사를 부탁하는 거죠.
AI가 써주는 본문은 마치 멜로디에 맞춘 가사처럼 B열에 채워집니다.

프롬프트

@geminiapi.py 를 분석한 후, Gemini API 사용방법을 파악하고, 아래 기능을 하는 AI_작사작곡_세션.py 파일을 만듭니다.

1. 루미스테이지.xlsx 파일을 엽니다.

2. A열(제목)의 모든 행을 리스트로 불러옵니다.

3. 각 제목을 Gemini API에 입력하여 서론–본론–결론 구조의 블로그 본문을 생성합니다.

4. 생성된 본문을 동일 행의 B열(본문)에 기록합니다.

5. 데이터가 있는 2행부터 마지막 행까지 순회하며, 콘솔에 "현재 n행: 제목" 형식으로 진행 상황을 출력합니다.

6. 모든 행에 대한 처리가 끝나면 수정된 데이터를 루미스테이지.xlsx에 덮어쓰기 방식으로 저장합니다.

7. 네트워크 오류나 API 호출 실패 같은 예외가 발생하면 행 번호 + 에러 메시지를 출력하고 다음 행으로 넘어갑니다.

  • + 버튼을 누르고 tab 앞에 x를 누른다.

    • 프롬프트 복사 및 붙여넣기 -> send

      << 첫문장의 geminiapi.py앞에 @가 붙어야함>>

    • Run 눌러주기

6단계 – SEO_감성믹싱_프롬프트

왜 필요한가?

이건 믹싱 작업이에요.
곡은 이미 완성됐지만, 음향 엔지니어가 소리를 다듬듯이 SEO 규칙과 감성 톤을 섞어 글을 완성도 있게 만드는 거예요.
검색엔진이 잘 잡아주도록 키워드 분포를 맞추고, 독자에게 감성적으로 다가가도록 표현을 조율합니다.

프롬프트

Gemini API에 주입할 고급 프롬프트 규칙은 아래 내용을 최대한 반영해서 재구성합니다.

model = genai.GenerativeModel('gemini-2.5-flash')

def generate_blog_content(main_keyword, sub_keyword, word_count_limit_per_paragraph, examples_stats_quotes):
    """
    Gemini API를 사용하여 아래 프롬프트 구조에 따라 블로그 본문을 생성합니다.
    """
    prompt = f"""
    당신은 **네이버 상위노출 SEO 전문 블로그 작가이자, 독자의 감성을 자극하는 스토리텔러**입니다. 
    목표는 검색엔진과 사람 모두를 사로잡는 글을 작성하는 것입니다. 
    SEO 원칙에 따라 구조를 만들고, 그 안에 감각적이고 공감가는 스토리를 담아 네이버 1페이지에 노출되도록 합니다. 

    """ 실행 워크플로우
    1) 웹검색:
    - 주요 키워드와 세부 키워드로 반드시 검색한다.
    - 신뢰할 수 있는 출처 3~5개를 요약한다.
    - 기사/블로그 문장을 그대로 복사하지 말고 사실만 추출한다.
    - 불확실한 경우 "확인되지 않았다"고 명시한다.
    - ⚠️ 웹검색 결과는 사실 확인과 아이디어 참조에만 사용하며,
    본문에는 “출처: …”, “[1] …” 같은 인용 표기를 넣지 않는다.
    반드시 블로그 톤으로 재구성한다.
    2) 필수 형태소 자동 추천: 
    - 웹검색 요약, 주요 키워드, 세부 키워드를 기반으로
    명사/형용사/동사 중심의 **필수 형태소 3~5개**를 자동으로 선정한다.
    - 글 전체에서 최소 1회 이상 자연스럽게 포함한다.
    3) 글 작성:
    - 검색 요약 + 주요 키워드 + 세부 키워드 + 자동 추천된 필수 형태소를 기반으로 작성한다.
    - 추측 금지, 복붙 금지. 사실은 재구성하여 블로그 톤으로 풀어낸다.

    """ 글쓰기 규칙
    1. 구조:
    - 글 전체는 '문제 상황 → 원인 분석 → 활용법/방법/팁 → FAQ → 마무리' 흐름을 따른다.
    - 내부 구조는 유지하지만 "문제/해결/가이드" 같은 메타어는 출력하지 않는다.
    - 소제목은 본문 내용과 연관된 핵심 단어·행동·결과로 자연스럽게 짓는다.
    2. 서두:
    - TL;DR 요약을 "요약:"으로 시작해 1~2문장으로 작성한다.
    3. 문체:
    - 따뜻하고 친근한 톤을 유지한다.
    - 모든 단락은 {word_count_limit_per_paragraph}자 이하로 간결하게 작성한다.
    - 단락은 2~3문장, 줄바꿈을 자주 넣어 가독성을 높인다.
    - 오감을 자극하는 표현, 방향/색깔/온도가 느껴지는 단어를 활용한다.
    4. SEO:
    - 주요 키워드는 본문 전체에 고르게 5회 이상 등장해야 한다.
    - 제목, 첫 문단, 결론에는 반드시 포함한다.
    - 세부 키워드는 소제목, 단락 첫 문장, FAQ, 결론에 반드시 포함한다.
    - 필수 형태소는 Gemini가 자동 추천한 단어를 반드시 1회 이상 포함한다. (현재는 자동 추천 기능 없으므로 임시로 '키워드'로 대체)
    5. 리스트:
    - 방법, 팁, 절차는 숫자/불릿형으로 정리한다.
    6. FAQ:
    - 반드시 포함한다. (최소 1개 이상)
    - "많이들 궁금해하시는 부분" 같은 메타 문구 없이, Q/A 형식으로 바로 작성한다.
    7. 사례/데이터:
    - 최신 통계나 생활 사례를 1~2개 넣는다. 없으면 합리적 가상 사례를 작성한다. (제공된 사례/통계/인용: {examples_stats_quotes})
    8. 마무리:
    - 즉시 실행할 수 있는 행동 팁을 제시한다.
    - 댓글 유도 문장을 포함한다.
    - 관련 해시태그 5~8개를 추천한다.

    ''' 사용자 입력값
    - 주요 키워드: {main_keyword}
    - 세부 키워드: {sub_keyword}
    - 원하는 글자 수: 500자 이내 (전체 글자 수, 각 단락은 {word_count_limit_per_paragraph}자 이내)
    - 넣고 싶은 사례/통계/인용: {examples_stats_quotes}

    🔵 출력 구조 예시 (실제 출력은 이 예시를 따르되, 메타어는 포함하지 않음)
    [제목: {main_keyword} 포함, 35자 이내]
    요약: 이 글은 {main_keyword}와 관련된 고민과 해법을 소개합니다.

    {소제목1: 독자의 고민이나 문제 상황을 드러내는 자연스러운 표현}
    {120자 이하 단락}

    {소제목2: {sub_keyword}가 포함된 제목}
    {120자 이하 단락}

    {소제목3: 원인이나 배경 설명}
    {120자 이하 단락}

    {소제목4: 활용법/방법/팁}
    1) …
    2) …
    3) …

    {소제목5: 사례/데이터 제시}
    {120자 이하 단락}

    Q. {sub_keyword} 관련 질문
    A. {간단한 해결책/팁}

    오늘부터 실천해 보세요
    {즉시 실행 팁 3~5개 + {main_keyword}/{sub_keyword} 포함 결론}

    추천 해시태그: #{main_keyword} #{sub_keyword} … (5~8개)

    ✅ 출력 후 체크리스트 (G 내부적으로 활용)
    [O] 주요 키워드: 제목/첫 문단/결론 포함 
    [O] 세부 키워드: 소제목/첫 문장/FAQ/결론 포함 
    [O] 필수 형태소: gemini 자동 추천 단어 포함 여부 
    [O] 키워드 분포: 본문 전체에 고르게 5회 이상 
    [O] 소제목: 메타 표현 금지, 본문 내용 기반 명명 
    [O] 가독성: {word_count_limit_per_paragraph}자 이하 문장, 2~3문장 단락, 줄바꿈 반영 
    [O] 정보의 질: 웹 검색 사실 기반 

    ☑️ Pain Point: 독자의 고민 2~3개 언급 + 해결책 제시 
    ☑️ 감성 톤: 오감 묘사, 방향/색깔/온도 단어 활용 
    ☑️ 웹검색 반영: 사실만 참조, 복붙 금지, 출처 표기 금지 
    ☑️ 필수 형태소: Gemini 자동 추천 3~5개 단어 적용 (현재 자동 추천 기능 없으므로 임시로 '키워드'로 대체)

<< 새 채팅창을 열고, 자동연동된 tab부분을 닫은후, @Add Context를 누르기>>

<< @Add Context 누른후 하위 메뉴에 나오는 'AI_작사작곡_세션.py' 선택>>

<<6단계 프롬프트 복사 붙여넣고 send>>

  • 제미니 1.5 버전은 수동으로 2.5로 변경하기

  • 초록색 Keep 버튼 눌러주기

    << 프롬프트 부분에 수정이 잘 되지않거나 잘못된 부분이 있으면 직접 수동으로 수정하기>>

  • <<수동으로 코드 수정했다면, 검토요청하기>>

7단계 – 한강라이브_업로드봇.py

왜 필요한가?

이건 뮤직비디오 촬영 후 공개하는 순간이에요.
앨범이 준비됐으면 팬들에게 보여줘야죠.
엑셀에 정리된 제목과 본문을 불러와 네이버 블로그에 올리는 건 마치 유튜브에 MV를 업로드하는 일과 같습니다.

프롬프트

엑셀 데이터를 네이버 블로그에 자동 업로드하는 한강라이브_업로드봇.py 파일을 작성하세요.

@루미_포털입장.py 와 @한류뮤즈_제미니가이드.py코드를 참조합니다.

루미스테이지.xlsx 파일의 2행부터 마지막 행까지 반복합니다.

A열 = 제목, B열 = 본문

네이버 로그인 후 각 행의 제목과 본문을 블로그 글쓰기 화면에 입력하고 저장 버튼을 클릭합니다.

  • 처음 + 버튼을 눌러 새 채팅창을 만들고, tab 왼쪽 x 표시를 눌러 닫아주는 부분은 동일

  • 루미_포털입장과 한류뮤즈_제미니가이드 앞에 @ 붙어야함.

8단계 – 루미_콘솔to무대_GUI.py

왜 필요한가?

이건 콘서트 컨트롤 패널이에요.
버튼만 누르면 조명, 음악, 무대 세팅이 한 번에 돌아가는 것처럼, GUI를 통해 “씨앗 생성 → AI 본문 → 발행”을 한눈에 조작할 수 있습니다.
마지막에 exe로 만들면 팬들도 클릭 한 번으로 무대를 켤 수 있는 거죠.

프롬프트

GUI와 exe 실행 파일을 구현하세요.

완성된 코드를 기반으로 GUI 화면을 적용합니다.

세련된 버튼과 입력창을 추가합니다.

exe 파일로 빌드했을 때, 실행 시 GUI 화면이 뜨도록 구현합니다.

한국 웹 사이트의 스크린 샷

9단계 – 원클릭_컴백무대.exe

왜 필요한가?

마지막은 컴백 무대입니다.
팬들은 클릭 한 번으로 무대를 볼 수 있듯, 사용자는 키워드 하나만 입력하면 AI가 본문을 완성하고 블로그에 자동으로 올립니다.
이건 곧 원클릭 컴백입니다.

프롬프트

@루미_포털입장.py 과 @AI_작사작곡_세션.py 를 참조합니다.

사용자가 키워드만 입력하더라도 자동으로 블로그 본문이 생성되어 네이버 블로그 제목과 본문에 글이 작성되게 exe 파일과 gui를 구현해줍니다.
UI 디자인은 고급스럽고 세련되게 만듭니다.

사용자는 아래 사항들을 입력하고, 블로그글 생성 버튼을 누르면, 자동으로 블로그글이 생성됩니다.

주요 키워드
세부 키워드
글자수

여기서부터는 응용의 영역..

만약 DIST 폴더에 있는 EXE 파일을 실행했을때 오류가 난다면,

커서에 붙여넣고 '오류났다'고 말해주기

혼자 열일하는중..

'엑세스가 거부되었다' 라는 메세지가 뜰때는, 에러가 발생한 EXE 프로그램을 닫고 다시 실행해주기.

에러가 계속 발생할때는 작업을 멈추고 파일을 과감하게 삭제한 후, 8단계에서 신공연마를 마무리하기.. 주화입마 조심!

18기 블로그글쓰기 여러분 4주동안 고생 많으셨습니다(__)~*

👉 이 게시글도 읽어보세요