[개발이야기#037] 내가 해보고 싶은 것 - 자동 보팅 프로그램 정리 [postingcuration]

in #krlast month (edited)

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

관련글

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

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

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

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

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

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

[개발이야기#035] 내가 해보고 싶은 것 - 자동 보팅 프로그램 하루에 한번 보팅하는 프로그램[postingcuration]\

[개발이야기#036] 내가 해보고 싶은 것 - 자동 보팅 프로그램 스케쥴러 프로그램 [postingcuration]

머리말

오늘은 내가 해보고 싶은것 자동 보팅 프로그램을 마지막 글입니다. ^^

마지막이라기 보다는 다음글을 준비하고 있습니다.

제가 사용했던 데이터베이스가 DuckDB였는데 T.T 얘가 다중 접속을 지원하는 것으로 알았는데 다중 읽기 쓰기를 지원하는 거였습니다.

한 프로세스 안에서 쓰레드를 날리면 DB Pool방식으로 사용가능한데 T.T 저는 다중 접속이 가능한 것으로 알고 DuckDB를 사용했네요

그래서 중복 느낌일수도 있지만, MySQL 또는 MariaDB를 이용하는 프로그램으로 변경해볼 생각입니다.

이유는 지금은 ^^ 멈춰 있지만, talkit.steemstory.blog 프로젝트도 있기 때문입니다.

지금 열심히 DuckDB에 수집하고 있는 내용을 MySQL로 옮기는 작업부 진행 해야겠습니다. ^^

마무리 차원에서 글을 쓰고 조금 변경된 점이나 주의해야할 점 그리고, 회고 정도를 하고 이 글을 마치로 하고 하겠습니다.

테이블 생성 프로그램의 변경

import duckdb

  

# DuckDB에 연결 (파일 기반 데이터베이스)

conn = duckdb.connect('steemit_auto_posting.db')

  

# 사용자 테이블 생성 함수

def create_user_table():

    conn.execute("""

        CREATE TABLE IF NOT EXISTS users (

            user_id TEXT UNIQUE,

            nickname TEXT NULL,

            is_active CHAR(1) DEFAULT 'Y',

            registered_at TIMESTAMP,

            modified_at TIMESTAMP

        );

    """)

    print("User table created successfully (or already exists).")

  

# 포스팅 테이블 생성 함수

def create_posting_table():

    conn.execute("""

        CREATE TABLE IF NOT EXISTS postings (

            post_id TEXT UNIQUE,

            user_id TEXT REFERENCES users(user_id),

            title TEXT,

            body TEXT,

            tags TEXT,

            main_tag TEXT,

            voting_status BOOLEAN DEFAULT FALSE,

            posting_date TIMESTAMP,

            created_at TIMESTAMP,

            modified_at TIMESTAMP NULL

        );

    """)

    print("Posting table created successfully (or already exists).")

  

# voting_logs 테이블 생성 쿼리

# 포스팅 테이블 생성 함수

def create_voting_logs_table():

    create_voting_logs_table_query = """

    CREATE TABLE IF NOT EXISTS voting_logs (

        url TEXT PRIMARY KEY,  -- URL of the post being voted on

        user_id TEXT NOT NULL,  -- ID of the user who created the post

        voting_status BOOLEAN NOT NULL DEFAULT FALSE,  -- Status of the voting (TRUE if voted, FALSE otherwise)

        voting_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- Date and time of the vote

    );

    """

    conn.execute(create_voting_logs_table_query)

  

if __name__ == "__main__":

    create_user_table()

    create_posting_table()

    create_voting_logs_table()

create_steemit_database.py 이프로그램이 변경 되었습니다.

voting_logs 보팅이 되었는지 확인하기 위해서 저 테이블을 생성했고, 해당 테이블의 생성문을 추가 했습니다.

conda activate steemit
python create_steemit_database.py

를 수행하시면 기존에 있는 두개는 안건들고 마지막 테이블을 생성해 줍니다.

사용자 생성 프로그램

이 프로그램은 변화가 없습니다. 그대로 수행 하시면 됩니다 .^^

이 섹션이 좀 짧으니 설치 해야 될 프로그램들을 정리해보겠습니다.

프로그램 설치

아나콘다(파이썬 개발 통합환경)를 설치하셔야 합니다.

리눅스에 아나콘다 설치하기 https://steemit.com/blog/@talkit/015-linux-anaconda-python
윈도우즈에 아콘다 설치 하기 https://talkit.tistory.com/731

conda create -n steemit python=3.12
conda activate steemit
pip install pandas openpyxl steem duckdb

위와 같이 설치하시면 되구요.

단, 리눅스의 경우는 [개발이야기#030] 내가 해보고 싶은 것 - 엑셀파일을 이용해서 다중 이체 해보기 - 리눅스 개발 소스 수정 — Steemit 위 글을 참고해서 steemit 환경을 구성하시기 바랍니다. 단, Ubuntu라는 리눅스를 사용하고 있습니다.

혹시나 레드햇 계열(RHEL, CentOS, RockyLinux 등)에서 개발환경을 만드시는 분들은 댓글 남겨 주시면 글을 하나 적어 보도록 하겠습니다.

리눅스 설치부터 Python 개발 환경 까지를 적어 보겠습니다.

이제 개발 환경은 준비 되었네요

스팀 관련 프로그램이라면

conda activate steemit
python 실행할 프로그램명

위와 같이 구동하면 대부분 동작할 것입니다.

혹시나 동작이 안되면 댓글이나 포스팅을 겨 주시고 @talkit을 호출해주시면 달려가서 알려 드리겠습니다. ^^

포스팅 수집 프로그램

해당 프로그램도 변경된 것이 없습니다.

기존 프로그램 그대로 사용하시면 됩니다.

보팅 프로그램

보팅 프로그램도 변경 된게 없습니다.

기존 프로그램 그대로 사용하시면 됩니다.

스케쥴 실행 프로그램

저는 현재 스케쥴 프로그램을 두개로 나눠서 사용하고 있습니다.

이건 필요하시면 공개하도록 하겠습니다.

간단하게 복사해서 사용하고 있습니다.

``

import os

import time

  

# 실행할 파일 경로

SELECT_POSTING_SCRIPT = 'python select_postingcuration.py'  # postingcuration 글을 하나의 파일로 정리하기

COLLECT_POSTING_SCRIPT = 'python collect_steem_postings.py' # 스팀잇의 특정 사용자들의 글을 수집하기

VOTING_POSTING_SCRIPT = 'python auto_voting_user_account2.py' # 특정 사용자를 대상으로 Voting 하기

AUTO_POSTING_SCRIPT = 'python auto_posting_postingcuration.py' # postingcuration 글을 하나의 파일로 정리된 내용을 포스팅 하기

  

# 스케줄 시간 설정 (아침 9시)

SCHEDULE_HOUR = 11  # 프스팅 큐레이션 시간

SCHEDULE_HOUR2 = 13  # 프스팅 큐레이션 포스팅 시간

SCHEDULE_MINUTE = 0

  

def run_scheduler():

    while True:

        # 현재 시간 확인

        current_time = time.localtime()

  

        print("현재시간 : " + current_time)

        # collect_postingcuration.py를 매 시간 실행

        os.system(COLLECT_POSTING_SCRIPT)

        print("Finished running collect_postingcuration.py")

        os.system(VOTING_POSTING_SCRIPT)

        print("Finished running auto_voting_user_account2.py")

        # 스케줄 시간에 select_postingcuration.py 실행

        #if current_time.tm_hour == SCHEDULE_HOUR :

            #print("Running scheduled task for select_postingcuration...")

  

            # select_postingcuration.py 실행

            #os.system(SELECT_POSTING_SCRIPT)

            #print("Finished running select_postingcuration.py")

  

        # 스케줄 시간에 select_postingcuration.py 실행

        #if current_time.tm_hour == SCHEDULE_HOUR2 :

        #    print("Running scheduled task for auto_posting_postingcuration.py...")

  

            # select_postingcuration.py 실행

        #    os.system(AUTO_POSTING_SCRIPT)

        #    print("Finished running auto_posting_postingcuration.py")            

  

        # collect는 매 시간 실행하므로 1시간 대기

        time.sleep(2700)

  

if __name__ == "__main__":

    run_scheduler()

위 프로그램은 원래 3600초였던 시간을 2700초마다 실행하도록 변경 하였고, 여기서는 글의 수집과 보팅만을 담당합니다.

다른 프로그램은 수집한 데이터를 정리해서 스팀잇에 포스팅 하는 스케쥴러가 따로 있습니다.

전체적으로 어떻게 프로그램을 수행할 것인가?

저를 잘 따라하셨다면 아래와 같이 하시면 됩니다.

사용자 관리 프로그램 수행

conda activate steemit
python user_management.py

위 프로그램을 실행해서 글을 수집하고 보팅 하고자 하는 사용자를 추가하십시오.

steem_schedule.py

위 프로그램을 수정해서 글의 수집주기와 보팅 주기를 조정 하십시오.

conda activate steemit
python steem_schedule.py

위와 같이 수행하면 끝입니다. ^^

user_management.py
collect_steem_postings.py
auto_voting_user_account2.py
steem_schedule.py

이렇게 네개의 프로그램을 필수적으로 있어야 합니다.

select_postingcuration.py
auto_posting_postingcuration.py

위 두 프로그램은 옵션입니다. ^^

정리하는 글

지금까지 위 글을 작성하면서 앞으로 다음과 같은 작업을 해봐야겠다는 생각이 들었습니다.

  1. 싱글 디비를 다중을 지원하는 데이터베이스로 변환 -> 이유는 수집과 보팅 등이 프로그램이 다른데 T.T 동시에 데이터베이스를 열지 못해서 문제가 있습니다.
  2. 최대한 쉽게 설명을 해드린다고 했는데 개발자가 아니면 쉽지 않은 것 같습니다.
  3. 2번의 이유로 시간이 되면 어디 장소를 정해서 한번 개발 세미나 같은것을 해봤으면 좋겠습니다.
  4. 개발 프로젝트에서 제가 주로 하는 일이 개발 환경 구축인데 프로젝트의 절반은 개발 환경 구축 입니다. ^^
  5. 그리고, 앞으로 스팀잇에서 재미 있어할 프로그램들을 더 많이 개발해봐야겠다인데 -> d이건 KRW마이닝과 관련이 있어서 어떻게 될지 모르겠습니다. T.T

감사합니다.



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

Sort:  

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