[개발이야기#043] 내가 해보고 싶은 것 - 한국 스팀잇 M2E 사용자 모임 글 수집하기 - 게시글 정리하기

talkit -

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

관련글

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

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

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

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

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

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

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

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

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

[개발이야기#040] 내가 해보고 싶은 것 - 한국 스팀잇 M2E 사용자 모임 글 수집하기

[개발이야기#041] 내가 해보고 싶은 것 - 한국 스팀잇 M2E 사용자 모임 글 수집하기 - 사용자 등록

[개발이야기#042] 내가 해보고 싶은 것 - 한국 스팀잇 M2E 사용자 모임 글 수집하기 - 게시글 수집하기

머릿말

지난 번 글에서는 게시글을 수집하는 프로그램을 마리아 디비 용으로 수정 했습니다. 이번에는 게시글을 정리하는 프로그램을 마리아 디비용으로 수정 하겠습니다.

지난 번글인 #034에 해당하는 내용입니다. DuckDB를 이용해서 진행 했었는데 그걸 마리아 디비로 볔경하고, 내용을 kr-m2e 게시글로 수정해서 프로그램을 변경 하려고 합니다.

게시글 정리용 코드

import mariadb
import pandas as pd
from datetime import datetime

# MariaDB에 연결 (MariaDB를 사용)
def connect_db():
    try:
        conn = mariadb.connect(
            user="steemit",
            password="비밀번호",
            host="서버주소",
            database="steemit_postings"
        )
        return conn
    except mariadb.Error as e:
        print(f"Error connecting to MariaDB: {e}")
        return None

# 로그 함수
def log(message):
    print(f"{datetime.now()} - {message}")

# 특정 태그가 'kr-m2e'인 게시물 조회 함수
def fetch_kr_m2e_posts(conn):
    try:
        # 사용자별로 'kr-m2e' 메인 태그를 가진 게시물 조회 (최근 7개의 글만)
        query = """
            SELECT user_id, post_id, title, posting_date 
            FROM postings 
            WHERE main_tag = 'kr-m2e'
            ORDER BY user_id, posting_date DESC
        """
        df = pd.read_sql(query, conn)
        return df
    except Exception as e:
        log(f"An error occurred while fetching posts: {e}")
        return None

# Markdown 생성 함수
def generate_markdown(df):
    if df is None or df.empty:
        return "No posts found with the 'kr-m2e' tag."

    markdown_lines = ["# Posts with 'kr-m2e' Tag (Recent 7 posts per user)", ""]
    
    # 사용자별로 정리하여 최근 7개의 글만 표시
    grouped = df.groupby('user_id')
    for user_id, group in grouped:
        markdown_lines.append(f"## @{user_id}")
        recent_posts = group.head(7)  # 각 사용자별 최근 7개 글 선택
        for _, row in recent_posts.iterrows():
            post_url = row['post_id']
            title = row['title']
            posting_date = row['posting_date']
            markdown_lines.append(f"- [{title}]({post_url}) (Posted on: {posting_date})")
        markdown_lines.append("")  # 사용자별 빈 줄 추가
    
    return "\n".join(markdown_lines)

def save_markdown(content):
    # 현재 날짜를 파일 이름에 추가
    today_str = datetime.now().strftime('%Y-%m-%d')
    filename = f"kr-m2e-posting-{today_str}.md"
    
    try:
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(content)
        log(f"Markdown file '{filename}' has been created successfully.")
    except Exception as e:
        log(f"An error occurred while writing the markdown file: {e}")

def main():
    # MariaDB 연결
    conn = connect_db()
    if conn is None:
        return

    # 'kr-m2e' 메인 태그가 포함된 게시물 조회
    df = fetch_kr_m2e_posts(conn)

    # Markdown 생성
    markdown_content = generate_markdown(df)

    # 결과를 파일로 저장
    save_markdown(markdown_content)

    # 연결 종료
    conn.close()

if __name__ == "__main__":
    main()

코드 실행하기

파일 저장하기

select_posting_m2e.py

위와 같이 파일을 저장 합니다.

파이썬 가상환경 실행하기

conda activate steemitm2e

프로그램 실행하기

python select_posting_m2e.py

맺음말

이번에도 DuckDB에서 MariaDB로 데이터베이스를 변경하는 작업을 했습니다.

그리고, 불러오는 데이터를 #kr-m2e 관련 데이터로 만들어서 진행 합니다.

다음 글에서는 수집하고, 정리한 글을 자동으로 포스팅 하는 프로그램을 생성하겠습니다.

감사합니다.



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