0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAI APIとReddit APIを使った自動記事投稿スクリプトを作ってみた

Last updated at Posted at 2024-11-13

はじめに

OpenAIのAPIを使用してテーマに基づいた記事を自動生成し、Reddit APIを通じて投稿するPythonスクリプトを作成してみました。このスクリプトで、指定したテーマの記事を生成し、Redditにワンクリックで投稿することができます。

スクリプトの概要

このスクリプトは、以下の2つの主要なAPIを使用:

  1. OpenAI API:指定されたテーマについてChatGPTが記事を生成します。
  2. Reddit API:生成された記事をRedditの指定されたサブレディットに投稿します。

前提条件

このスクリプトを実行するには、以下の準備が必要です:

  • OpenAI APIキー:OpenAI APIにアクセスするために必要
  • Reddit APIの認証情報:Reddit APIにアクセスするためのclient_idclient_secretusernamepasswordが必要
  • Pythonライブラリopenaiprawを使用します。以下のコマンドでインストールできます:
    pip install openai praw
    

設定ファイルの作成

認証情報を扱うために、config.jsonというファイルを作成し、以下のように記入してください。

{
    "openai_api_key": "your_openai_api_key",
    "reddit_client_id": "your_reddit_client_id",
    "reddit_client_secret": "your_reddit_client_secret",
    "reddit_user_agent": "your_user_agent",
    "reddit_username": "your_reddit_username",
    "reddit_password": "your_reddit_password"
}

スクリプトの詳細

以下がスクリプトの全体像です。

import os
import json
import openai
import praw
import argparse

# JSONファイルから設定情報を読み込む関数
def load_config():
    with open('config.json', 'r') as file:
        config = json.load(file)
    return config

# 設定の読み込み
config = load_config()

# OpenAI APIキーの設定
client = openai.OpenAI(api_key=config['openai_api_key'])

# Reddit APIの認証情報設定
reddit = praw.Reddit(
    client_id=config['reddit_client_id'],
    client_secret=config['reddit_client_secret'],
    user_agent=config['reddit_user_agent'],
    username=config['reddit_username'],
    password=config['reddit_password']
)

# OpenAI APIを使って記事を生成する関数
def generate_article(theme):
    messages = [
        { "role": "system", "content": "You are a helpful assistant who writes articles based on given themes to post on Reddit." },
        { "role": "user", "content": f"Write an unique and interesting article on the theme. If the theme is written in Japanese, write an article in Japanese. Otherwise write in English.: {theme}" }
    ]

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        temperature=0.7,
        max_tokens=800  # 必要に応じてトークン数を調整
    )
    
    return response.choices[0].message.content.strip()

# Redditに投稿する関数
def post_to_reddit(subreddit_name, title, content):
    subreddit = reddit.subreddit(subreddit_name)
    subreddit.submit(title, selftext=content)
    print(f"Posted to r/{subreddit_name}: {title}")

# メイン関数
def main():
    parser = argparse.ArgumentParser(description="OpenAI APIを使って記事を生成し、Redditに投稿するスクリプト")
    parser.add_argument("theme", type=str, help="記事のテーマ")
    parser.add_argument("--subreddit", type=str, default="test", help="投稿先のサブレディット")
    args = parser.parse_args()

    # 記事を生成
    article_content = generate_article(args.theme)
    title = f"テーマ: {args.theme}"

    # Redditに投稿
    post_to_reddit(args.subreddit, title, article_content)

if __name__ == "__main__":
    main()

スクリプトの使い方

  1. このスクリプトを実行するには、以下のようにコマンドラインからテーマを指定します:

    python script_name.py "記事のテーマ" --subreddit "投稿先のサブレディット名"
    
  2. script_name.pyの部分を実際のスクリプトファイル名に置き換え、記事のテーマに投稿したいトピックを指定してください

スクリプトの解説

  • generate_article関数:OpenAIのAPIを呼び出して、指定したテーマに基づく記事を生成します。トーンや最大トークン数を調整することで、生成される記事のスタイルや長さをカスタマイズできます
  • post_to_reddit関数:生成された記事をRedditに投稿します。サブレディット名を引数として指定することで、異なる投稿先に柔軟に対応できます

注意事項

  • APIの利用規約に従い、適切な使用を心がけてください。スパム行為や不適切なコンテンツの投稿は控えましょう
  • API料金:OpenAI APIの利用には料金が発生するため、生成量に応じてAPI使用料金を管理する必要があります

今後の改良ポイント

  • 投稿のスケジューリング:定期的に投稿するためのスケジューリング機能を追加
  • 投稿内容の検証:生成された内容がポリシーに違反していないかをチェックするフィルタリング機能
  • 複数のプラットフォーム対応:Reddit以外のプラットフォームにも対応できるように拡張

所感

OpenAI APIが使えるようになってかなりいろんなことができるようになりました。自動作成した記事を自動投稿することにどれだけの価値があるかはわかりませんが、SNSマーケティングとかには使えるのかも。

llm_japan というRedditのチャンネルでLLMに関する情報を手動投稿や自動投稿をしているので、よかったらご参加ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?