[자동화 프로젝트 #6] DALL-E 3 연동: AI가 대표 이미지까지!

 

안녕하세요! 블로그 자동 포스팅 봇 만들기, 여섯 번째 시간입니다.
지난 5편에서는 우리 봇이 Gemini, ChatGPT 등 다양한 AI 작가들을 선택하여 글을 쓸 수 있도록 만들었습니다.

하지만 "백문이 불여일견"이라는 말처럼, 글의 첫인상을 좌우하는 것은 바로 이미지죠.

 

오늘은 OpenAI의 강력한 이미지 생성 AI, DALL-E 3를 연동하여, 우리 봇이 글의 주제에 딱 맞는 대표 이미지를 스스로
그려내는 놀라운 기능을 추가해 보겠습니다!

DALL-E 3 

DALL-E 3는 단순히 그림만 잘 그리는 AI가 아닙니다. 우리가 이 모델을 선택한 이유는 다음과 같습니다.

  • 뛰어난 문맥 이해도: "슬픔에 잠긴 안드로이드가 비 내리는 창밖을 보는 유화"처럼 복잡하고 추상적인
    문장을 놀라울 정도로 정확하게 이해하고 그려냅니다.
  • 간편한 API 연동: 다행히도, DALL-E 3는 우리가 이미 설치한 openai 라이브러리를 통해 ChatGPT와 동일한
    방식으로 매우 쉽게 사용할 수 있습니다.
  • 고품질 이미지: 블로그 대표 이미지로 사용하기에 전혀 손색없는 고해상도의 멋진 이미지를 생성합니다.

이미지 생성 코드 작성

DALL-E 3에게 이미지 생성을 요청하는 코드는 글 생성만큼이나 간단합니다. main.py에 이미지 생성을
전담하는 새로운 함수를 추가해 봅시다.

1 # main.py 파일
2
3 import openai
4 import requests # 이미지 URL에서 파일을 다운로드하기 위해 필요
5
6 def generate_image_and_get_path(log_queue, title):
7     log_queue.put("🎨 DALL-E 3에게 대표 이미지 생성을 요청합니다...")
8     try:
9         # 1. OpenAI API 키 가져오기
10 api_key = get_api_key('OPENAI_API_KEY')
11 client = openai.OpenAI(api_key=api_key)
12
13 # 2. 이미지 생성을 위한 프롬프트 만들기
14 # (블로그 제목을 기반으로, 텍스트나 워터마크 없는 깔끔한 이미지를 요청)
15 image_prompt = f"""
16 A high-quality, photorealistic image for a blog post titled '{title}'.
17 Centered main subject, aesthetically pleasing, with a clean background.
18 No text, no letters, no watermarks.
19 """
20
21 # 3. DALL-E 3에게 이미지 생성 요청
22 response = client.images.generate(
23 model="dall-e-3",
24 prompt=image_prompt,
25 size="1024x1024", # 블로그에 적합한 정사각형 사이즈
26 quality="standard",
27 n=1,
28 )
29
30 # 4. 생성된 이미지의 URL 받아오기
31 image_url = response.data[0].url
32 log_queue.put("✅ DALL-E 3가 이미지를 성공적으로 생성했습니다." )
33
34 # 5. URL에서 이미지 파일을 다운로드하여 임시 폴더에 저장
35 log_queue.put("이미지를 임시 파일로 다운로드합니다...")
36 image_response = requests.get(image_url)
37
38 # 'blog_image.png' 라는 이름으로 저장
39 image_path = os.path.join("임시폴더경로", "blog_image.png")
40 with open(image_path, "wb") as f:
41 f.write(image_response.content)
42
43 log_queue.put(f"✅ 이미지를 ' {image_path}'에 저장했습니다.")
44 return image_path
45
46 except Exception as e:
47 log_queue.put(f"❌ 이미지 생성 또는 다운로드 중 오류 발생: {e}")
48 return None

 

전체 작업 흐름에 통합하기

이제 남은 것은 이 이미지 생성 함수를 기존의 포스팅 과정에 자연스럽게 통합하는 것입니다.

[새로운 작업 순서]

  1. 글 생성: create_blog_post 함수로 블로그 제목과 본문을 먼저 만듭니다.
  2. 이미지 생성: 위에서 만든 generate_image_and_get_path 함수에 1번 단계에서 얻은 '제목'을 전달하여,
    글의 주제와 딱 맞는 이미지를 생성하고 임시 파일로 저장합니다.
  3. 이미지 업로드: 3편 (여기에-3편-링크)에서 만들었던 Selenium 로직을 이용해, 2번 단계에서 저장한
    '이미지 파일'을 티스토리 에디터에 붙여넣습니다.
  4. 최종 발행: 이미지와 텍스트가 모두 포함된 완전한 형태로 글을 발행합니다.

 

다음 이야기

이제 우리 봇은 글만 잘 쓰는 작가가 아니라, 글에 어울리는 그림까지 그릴 줄 아는 만능 "콘텐츠크리에이터"가 되었습니다!

 

하지만 아직 해결해야 할 마지막 관문이 남았습니다. 바로 "꾸준함"이죠. 다음 포스팅에서는 APScheduler를 이용해 이 모든 과정을 우리가 신경 쓰지 않아도 정해진 시간에 알아서 실행하는 완벽한 자동화 스케줄링 기능을 구현해 보겠습니다.

 

 

반응형
쿠팡 광고 배너

※ 위 배너는 쿠팡 파트너스 활동의 일환으로 이에 따른 일정액의 수수료를 제공받습니다