【Python × OpenAI API】その2 Twitter APIを使ったXへの自動投稿

はじめに

【Python × OpenAI API】の第2弾です。今回はOpenAI APIで投稿文を生成し、Twitter APIでXへ自動投稿するツールを作成していきます。開発環境は別記事で作成したものを前提にしておりますので、こちらの記事を参考にしてください。

【Python × OpenAI API】Dockerによる環境構築編

目次1. はじめに2. 環境構築手順1. 環境変数の定義2. gitignoreの指定3. 依存パッケージの定義4. Dockerfileの作成5. Docker Composeの作成3. 動作確認まとめ 1. はじめに…

開発環境の準備

以下のディレクトリ構成に基づいて各ファイルを作成していきます。

my-openai-project/
│
├── .env                    # 前回作成済み
├── .gitignore              # 前回作成済み
├── Dockerfile              # 前回作成済み
├── compose.yaml            # 前回作成済み
├── requirements.txt        # 前回作成済み
└── src/                    # 前回作成済み
    ├── test.py             # 前回作成済み
    └── chatbot/            # 今回作成するPythonスクリプト!
        ├── gpt_api.py      # OpenAI APIを使用して投稿文を生成するPythonスクリプト
        ├── twitter_api.py  # Twitter APIを使用して投稿するPythonスクリプト
        └── tweet.py        # 上記のスクリプトを実行するPythonスクリプト

1. 環境変数の追加

「.env」ファイルにTwitter API用の環境変数を追加します。

OPENAI_API_KEY=YOUR_API_KEY

# 以下を追加
TWITTER_CONSUMER_KEY=YOUR_CONSUMER
TWITTER_CONSUMER_SECRET=YOUR_CONSUMER_SECRET
TWITTER_ACCESS_TOKEN=YOUR_ACCESS_TOKEN
TWITTER_ACCESS_TOKEN_SECRET=YOUR_ACCESS_TOKEN_SECRET
TWITTER_BEARER_TOKEN=YOUR_BEARER_TOKEN

2. 環境変数の設定方法の修正

環境変数が増えてきたので、個別に設定するのではなく、ファイルを指定して環境変数を読み込むように修正します。

services:
  app:
    build: .
    volumes:
      - ./src:/app

    # environmentセクションを削除
    environment:
      OPENAI_API_KEY: ${OPENAI_API_KEY}

    # env_fileセクションを追加し、.envファイルを指定
    env_file:
      - .env

3. ライブラリの追加

Twitter APIを使用するためにtweepyをインストールします。「requirements.txt」に「tweepy」を追加します。

openai==0.27.9

# 以下を追加
tweepy

4. コンテナのビルド(リビルド)

上記1と2の変更をコンテナに反映させるためにビルドを実行します。VS CodeのDevcontainerを使っている場合は、「コンテナのリビルド」を実行してください。

以上で開発環境の準備は完了です。

プログラムの作成

今回作成するプログラムは以下のような構成になっています。

①:OpenAI APIを使用してXに投稿する文章を生成するスクリプト(gpt_api.py)
②:Twitter APIを使用して文章をXに投稿するスクリプト(twitter_api.py)
③:①と②を実行する実際にツイートするスクリプト(tweet.py)

1. 投稿文を生成するスクリプト

Few-Shotプロンプトを使用して例文に沿った文章をChatGPTに作成してもらいます。

import os
import openai


openai.api_key = os.environ["OPENAI_API_KEY"]

def make_tweet():
    request = "私はIT関連の企業に勤める入社一年目の新入社員です。私に代わってTwitterに投稿するツイートを140字以内で作成してください。\n\nツイートを作成する際は、以下の例文を参考にしてください。\n\n"
    tweet1 = "例文1: 仕事でPythonを使うことになりそうだから、現在勉強中!プログラミングとか難しくてよくわからないよ...\n\n"
    tweet2 = "例文2: 最近ChatGPTについていろいろ調べてるんだけど、あれってなんでも質問に答えてくれてすごいよね!とりあえずPythonを使って、簡単な会話をするプログラムを書いてみるつもり。うまくできるかな?\n\n"
    content = request + tweet1 + tweet2

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "user", "content": content},
        ],
    )

    return response.choices[0]["message"]["content"]

2. Xに投稿するスクリプト

引数に指定された文字列をツイートする「post関数」を作成します。

import tweepy
import os


consumer_key = os.environ["TWITTER_CONSUMER_KEY"]
consumer_secret = os.environ["TWITTER_CONSUMER_SECRET"]
access_token = os.environ["TWITTER_ACCESS_TOKEN"]
access_token_secret = os.environ["TWITTER_ACCESS_TOKEN_SECRET"]
bearer_token = os.environ["TWITTER_BEARER_TOKEN"]


def post(tweet):
    client = tweepy.Client(
        bearer_token,
        consumer_key,
        consumer_secret,
        access_token,
        access_token_secret
    )

    client.create_tweet(text=tweet)

3. 実行用スクリプト

1と2で作成したスクリプトを実行するためのスクリプトを作成します。

import gpt_api
import twitter_api


tweet = gpt_api.make_tweet()
print(tweet)
twitter_api.post(tweet)

動作確認

VS Codeで開発コンテナーを起動している状態でターミナルを開き「tweet.py」を実行します。

# python src/chatbot/tweet.py
最近始めたバグ取り作業、難しいけど面白い!エラー文を読んで解決するプロセスが何ともやりがいを感じる。引き続き勉強中💻 #プログラミング #新人

ターミナル上に生成された投稿文が出力されています。Xを確認すると同じ内容のものが投稿されていることが確認できました!

まとめ

今回の記事では、PythonとTwitter APIを活用して、X(旧Twitter)への自動投稿機能を実装する方法を解説しました。OpenAI APIと組み合わせることで、画像生成やキャプションの自動生成など、さらなる機能拡張も視野に入れることができます。

SNS運用の効率化や自動化に興味がある方にとって、有用なアプローチであり、Pythonのスクリプトを活用すれば、日常的なタスクをより効率的に処理できる可能性があります。

次回もOpenAI APIを使用して便利ツールを作成していきたいと思うのでぜひお楽しみに!