[개발이야기#034] 내가 해보고 싶은 것 - 포스팅 큐레이션 글 목록을 자동 포스팅 하기 [postingcuration]

in #kr6 hours ago (edited)

안녕하세요 가야태자 @talkit 입니다.

오늘은 어제에 이어서 포스팅 큐레이션 글을 정리해서 자동으로 스팀잇에 포스팅 하는 프로그램을 작성해보겠습니다.

관련글

[개발이야기#028] 내가 해보고 싶은 것 - 자동 보팅 프로그램 SQLite vs DuckDB [postingcuration]

[개발이야기#029] 내가 해보고 싶은 것 - 자동 보팅 프로그램 사용자 및 포스트 테이블 생성하기 [postingcuration]

[개발이야기#031] 내가 해보고 싶은 것 - 자동 보팅 프로그램 사용자 등록 프로그램 작성하기 [postingcuration]

[개발이야기#032] 내가 해보고 싶은 것 - 자동 보팅 프로그램 사용자 게시글 수집기 작성하기 [postingcuration]

[개발이야기#034] 내가 해보고 싶은 것 - 포스팅 큐레이션 글을 자동으로 정리해보자 [postingcuration]

코드 컨셉

제가 작성하고자 했던 코드는 우선 어제 글에서 말씀 드린대로, 매일 아침 아홉시에 markdown 파일로 특정 폴더에 저장해둡니다.

해당 파일을 읽어서 정해진 다른 글과 함께 스팀잇에 포스팅 한다.

오늘의 컨셉은 간단 합니다. ^^

소스 코드

from steem import Steem

import os

from datetime import datetime

  

# Steemit 계정 정보

STEEM_USERNAME = 'your-steemit-id'

STEEM_POSTING_KEY = 'your-posting-key'  # 여기에 실제 posting key를 넣어주세요

  

# Steemit 객체 생성

steem = Steem(keys=[STEEM_POSTING_KEY])

  

# 스팀잇 포스팅 함수

def post_to_steemit(markdown_content, title, tags):

    try:

        # 스팀잇에 포스팅하기

        steem.commit.post(

            title=title,

            body=markdown_content,

            author=STEEM_USERNAME,

            tags=tags

        )

        print("Successfully posted to Steemit.")

    except Exception as e:

        print(f"An error occurred while posting to Steemit: {e}")

  

def main():

    # 현재 날짜를 파일 이름에 추가

    today_str = datetime.now().strftime('%Y-%m-%d')

    filename = f"postingcuration-{today_str}.md"

  

    if not os.path.exists(filename):

        print(f"Markdown file '{filename}' not found.")

        return

    # Markdown 파일 읽기

    with open(filename, 'r', encoding='utf-8') as f:

        markdown_content = f.read()

    # 스팀잇 포스팅 제목 및 태그 설정

    title = f"스팀잇 포스팅 큐레이션 이벤트 참여자 글 - {today_str}"

    tags = ['kr', 'postingcuration', 'goodpost-kr']  # 태그 수정

  

    # 본문 작성

    intro_text = f"""

안녕하세요 가야태자 @{STEEM_USERNAME} 입니다.

  

<img src="https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmXQMzXyqRb2F3pgctYSDc6J4eww668agd6d1RkQofrJPT/IMG_8307.jpeg" alt="IMG_8307.jpeg" srcset="https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmXQMzXyqRb2F3pgctYSDc6J4eww668agd6d1RkQofrJPT/IMG_8307.jpeg 1x, https://steemitimages.com/1280x0/https://cdn.steemitimages.com/DQmXQMzXyqRb2F3pgctYSDc6J4eww668agd6d1RkQofrJPT/IMG_8307.jpeg 2x">

  

2024년 10월 04일 부터 스팀잇 포스팅 큐레이션 이벤트를 진행하고 있습니다.

  

해당 이벤트 참여자분들은:

  

@banguri

@dozam

@epitt925

@etainclub

@happycoachmate

@jungjunghoon

@kimyg18

@maikuraki

@parisfoodhunter

@parkname

@peterpa

@powerego

@shrah011

@talkit

@tsf-leejgn

@yoghurty

  

입니다.

  

참여자들이 작성하신 현재까지의 글은 아래와 같습니다.

"""

    # 포스팅 내용

    full_content = f"{intro_text}\n\n{markdown_content}"

    # Steemit에 포스팅

    post_to_steemit(full_content, title, tags)

  

if __name__ == "__main__":

    main()

코드 설명

1. 모듈 및 라이브러리 불러오기

steem-python 라이브러리를 통해 Steemit API와 통신을 합니다. os는 파일 시스템 관련 작업을 처리하기 위해 사용되며, datetime은 현재 날짜를 다루기 위해 사용됩니다.

2. Steemit 계정 정보 설정

STEEM_USERNAME에는 Steemit 유저 이름을 입력하고, STEEM_POSTING_KEY에는 해당 계정의 posting key를 입력해야 합니다. 이 key는 글 작성 시 인증을 위해 사용되므로 민감한 정보로 취급됩니다.

3. Steemit 객체 생성

Steem 클래스를 사용해 Steemit API와의 연결을 설정합니다. Posting key는 API 호출 시 인증을 위한 키로 사용됩니다.

4. Steemit 포스팅 함수 정의

post_to_steemit 함수는 주어진 마크다운 내용을 Steemit에 포스팅하는 역할을 합니다. 이 함수는 제목, 본문, 태그를 인자로 받아 Steemit에 글을 업로드합니다. 포스팅 중 문제가 발생할 경우, 오류 메시지를 출력하도록 예외 처리를 하고 있습니다.

5. 메인 함수

main 함수에서는 포스팅할 마크다운 파일을 읽어옵니다. 현재 날짜를 기준으로 파일 이름을 생성하고, 해당 파일이 존재하지 않으면 프로그램이 종료됩니다.

파일이 존재하면 마크다운 형식의 본문을 읽어와서 포스팅할 제목과 태그를 설정한 후, 본문을 작성합니다. intro_text 변수에 포스팅의 서두를 정의하고, 파일에서 읽어온 마크다운 내용을 추가한 후 Steemit에 포스팅을 요청합니다.

6. 본문 작성 및 포스팅

본문은 Steemit의 큐레이션 이벤트 참여자 목록과 소개글로 구성되어 있습니다. 큐레이션 이벤트에 참여한 사용자들의 계정 이름이 intro_text에 나열되며, 그 이후 마크다운 파일의 내용을 full_content에 추가합니다.

7. 스크립트 실행

마지막으로 if __name__ == "__main__": 부분에서 main 함수가 호출됩니다. 스크립트를 실행하면 해당 파일이 실행되며, 현재 날짜에 맞는 파일이 Steemit에 포스팅됩니다.

주요 기능 정리

  • Steemit API를 사용해 자동으로 포스팅을 업로드합니다.
  • 지정된 마크다운 파일에서 본문을 읽어와 Steemit에 포스팅합니다.
  • 제목, 태그, 본문을 자동으로 구성하며, 날짜별로 파일을 다룹니다.
  • 예외 발생 시 에러 메시지를 출력하여 문제 해결을 도와줍니다.

결론 및 정리

오늘까지해서 다음과 같은 일련의 과정이 마무리 되네요. 아직 포스팅이 남았습니다.

  1. 사용자를 등록하는 프로그램을 작성한다.
  2. 사용자를 등록한다.
  3. 등록된 사용자의 글을 수집해서 DuckDB에 저장한다.
  4. DB를 분석해서 #postingcuration 에 해당하는 글만 사용자별로 정리한다.
  5. 정리된 글을 자동으로 포스팅 한다.
  6. 해당 글에 자동으로 매일 매일 한번씩 보팅한다.

언제가 될지는 모르겠지만 다음 글에서 6번을 수행하면 제 목표는 일단 끝납니다.

실제로 프로그램 작성은 다 끝나서 다음과 같이 자동으로 보팅을 진행하고 있습니다.

image.png

그래서 제가 요즘 보팅 파워 때문에 ^^ 수동 보팅을 못하고 있습니다. T.T

image.png

감사합니다.



Posted through the ECblog app (https://blog.etain.club)

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 62539.28
ETH 2437.94
USDT 1.00
SBD 2.67