【TwitterAPI】全自動で文章生成&Xに投稿をするプログラム【OpenAI API】

eye catch プログラミング

はじめに

こんにちは、kitakaです。

現在私はAITuberというものを運用しています。
X(旧Twitter)では、OpenAI API(ChatGptのAPI版)により生成した文章を毎朝自動ポストしています。

今回は、Python × OpenAI API × TwitterAPI による自動ツイートをするプログラムの作成・運用方法をご紹介します。

事前準備

プログラムを作成する前に以下の事前準備をしましょう。

  • Pythonをインストール
  • レンタルサーバーに登録する
  • OpenAIのAPIキーを発行する
  • TwitterのAPIキーを発行する

まずは上記について解説します。

Pythonをインストール

公式サイトからPythonインストーラーをダウンロード

  • Python公式サイト にアクセスします。
  • 最新バージョンのPythonインストーラーをダウンロードします。

インストーラーを実行

  • ダウンロードしたインストーラー(python-3.10.0-amd64.exeなど)をダブルクリックして実行します。

Pythonのインストールウィザードに従う

  • “Install Now” を選択して、デフォルトの設定でインストールします。
  • インストール中に「Add Python to PATH」をチェックしておくと、後でコマンドラインからPythonを簡単に実行できます。

インストールの完了

  • インストールが完了したら、コマンドプロンプト(cmd)を開いて python --version を実行し、インストールされたPythonのバージョンが表示されることを確認します。

レンタルサーバーに登録する

Cronにプログラムを登録するためのレンタルサーバーが必要となります。

ご自分のPCでも可能ですが、常にPCを起動している必要があるのでレンタルサーバーがおすすめです。

私はブログもやっているのでXserverに契約をしていますが、
プログラムを動かすだけならもっと安いレンタルサーバーで良いと思います。

OpenAIのAPIキーを発行する

OpenAIのアカウントを作成し、APIキーを発行してください。

APIは従量課金制ですが、1000円ほどで大量の文章を作成できます。
ツイートの文章生成程度であれば数千~数万ツイート分は使用できると思います。

TwitterのAPIキーを発行する

TwitterDeveloperに登録をし、APIキーを発行してください。

TwitterAPIは無料のためクレジットカードの登録なども必要ありません。

プログラムを作成する

事前準備が済んだら本題のプログラムを作成していきます。

文章の自動生成

プログラムは下記となります。

from openai import OpenAI
import re

# API定義
ORGANIZATION_ID = "org-******************"
API_KEY = "sk-******"

client = OpenAI(
  organization = ORGANIZATION_ID,
  api_key = API_KEY
)

# gptへの指示
user_content = "Twitterに投稿する文章を80文字以内で生成してください。ハッシュタグは含めないでください。"

# 文章を生成
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages = [
      {"role": "system", "content": 
            "名前:メモリア\n"
            + "一人称:メモリア\n"
            + "性別:女\n"
            + "口調:敬語は使用せず、ため口で喋る。\n"
            + "語尾:「だよね」\n"},
      {"role": "user", "content": user_content}
    ],
    temperature=1.0,
    max_tokens=120,
)

# 生成文章の抽出
text = response.choices[0].message.content

print(text)

ORGANIZATION_ID、API_KEYは発行したキーを記載してください。

ポイントとしては、リクエスト実行の際に指定している下記のパラメータです。

  • model:使用するGPTのバージョンを記載します。
  • messages :GPTへの指示を記載します。
    system・userというロールを定義してください。
    systemには口調やキャラの設定、userには実際に生成する文章の条件等を指定します。
  • temperature:文章の確率分布の数値です。数値が高いほどランダム要素がある文章が生成されます。
  • max_tokens:文章の最大文字数です。指定した数値以上の文字数の文章が生成されると文章が途切れてしまうため、messagesのuserロールでも文字数の指定をしています。

上記のプログラムを実行すると下記の文章が生成されました。

パラメータの指定によって様々な文章が生成されるので色々試してみるといいかもしれません。

Xへの画像つきツイートのポスト

プログラムは下記となります。

import tweepy

#Twitter APIキーとトークン
bearer_token = "*****"
consumer_key = "*****"
consumer_secret = "*****"
access_token = "*****"
access_token_secret = "*****"

# tweepyでTwitter API V1.1のオブジェクトを作成
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# tweepyでTwitter API V2.0のオブジェクトを作成
client = tweepy.Client(
   bearer_token=bearer_token,
   consumer_key=consumer_key, consumer_secret=consumer_secret,
   access_token=access_token, access_token_secret=access_token_secret
)

# 画像をTwitterにアップロード
image_path = 'test.png'
media = api.media_upload(filename=image_path)

# Tweet
message = "テストツイート"
client.create_tweet(text=message, media_ids=[media.media_id])

解説します。

前提として、Tweppyというライブラリを利用してツイートを行っています。

API実行のため、Twitter API のオブジェクトを作成しています。
 画像のアップロード→Twitter API V1.1
 ツイート→Twitter API V2.0

画像なしで文章だけポストする場合はV1.1は不要で、実行時は下記プログラムでOKです。

client.create_tweet(text=message)

上記は分かりやすくするためにmessageに文字列を直接指定していますが、
前項で生成した文章をmessageに入れてあげればプログラムの完成です。

起動用シェルを作成

クーロンに登録するための起動用シェルを作成しましょう。

#!/bin/sh
cd /home/*****
~/anaconda3/bin/python autoTwitter.py

Pythonを実行しているだけなので特にポイントはありません。
anacondaに入っているPythonで実行しています。

プログラムをクーロンに登録

上記までの手順で、APIによる文章生成とポストをすることができるようになりました。

これだけだと手動でプログラムを実行しなければならないので、
決まった時間に毎日プログラムを自動起動できるようにCronの登録をしましょう。

今回はXserverでの手順をご紹介します。
※プログラムのサーバーへのアップロードは割愛します。

Cronの設定追加

レンタルサーバーのトップページ画面にて、サーバー管理をクリックします。

アカウントの項目からCron設定をクリックします。

Cron設定追加画面で起動用シェルを追加します。

今回は毎朝7時に実行するように設定をします。

確認画面へ進み、登録完了をすると設定完了となります。

結果を確認

正常にツイートすることができました!

実際のツイートがこちら。

おわりに

今回は、Twitterで自動投稿をする方法を紹介いたしました。
2024年現在、無料のTwitterAPIではツイートの投稿をすることのみができます。

今後、他機能のAPIの無料化や値段が安くなったりすることがあれば、返信の自動化なども実装してみたいですね。

ちなみにTwitterでは、API以外での自動化は禁止されていますのでしないようにしましょう。
(Seleniumによるブラウザ操作など)

コメント

タイトルとURLをコピーしました