アフィリエイトとXの自動化 その4

前回まででXの設定が終わりました。

早速自動化スクリプトを作っていきたいのだが、なにをどう使えばいいのかよくわからなくなったので、ChatGPTを使って整理してみる事にした。

結論から言うと4つのKeyを使えばよくOAuthはいらないようだ

どの情報を使って投稿すればいいか?

簡単な自動投稿をする場合

  • API Key
  • API Key Secret
  • Access Token
  • Access Token Secret

この4つを使用してOAuth 1.0a認証を行い、Xに投稿することができます。

OAuth 2.0を使う場合

  • Client ID
  • Client Secret
  • (場合によってはAccess Tokenも使用)

OAuth 2.0を使う場合は、アクセストークンを取得するための追加の手続きが必要です。個人での自動投稿なら、OAuth 1.0aのAccess Tokenを使うのが手軽です。

それでは早速スクリプトを作っていく

import tweepy

# 取得した各種キーとトークンを設定
API_KEY = "あなたのAPIキー"
API_SECRET = "あなたのAPIキーシークレット"
ACCESS_TOKEN = "あなたのアクセストークン"
ACCESS_TOKEN_SECRET = "あなたのアクセストークンシークレット"

# 認証を設定
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

# APIインスタンスを作成
api = tweepy.API(auth)

# ツイートを投稿
tweet_text = "こんにちは、Pythonからの自動投稿です!"
api.update_status(tweet_text)

print("ツイートを投稿しました!")

実行したところエラーになる

Unauthorized: 401 Unauthorized
89 – Invalid or expired token.

再度確認してみるとXのAPIのバージョンによって、tweepy.API(auth) の認証方式が変更されているようだ。以下のスクリプトを再度作成してもらった。

import tweepy

# APIキーとトークン
API_KEY = "あなたのAPIキー"
API_SECRET = "あなたのAPIキーシークレット"
ACCESS_TOKEN = "あなたのアクセストークン"
ACCESS_TOKEN_SECRET = "あなたのアクセストークンシークレット"

# OAuth1.0a認証
client = tweepy.Client(
    consumer_key=API_KEY,
    consumer_secret=API_SECRET,
    access_token=ACCESS_TOKEN,
    access_token_secret=ACCESS_TOKEN_SECRET
)

# ツイートを投稿
response = client.create_tweet(text="こんにちは、Pythonからの自動投稿です!")
print(f"ツイートが投稿されました: {response.data}")

これでうまくいくことが分かった。APIキーとトークンを別ファイルにしておきたいので、その変更を実施する。

config.py を作成し、以下のように記述します。

API_KEY = "あなたのAPIキー"
API_SECRET = "あなたのAPIキーシークレット"
ACCESS_TOKEN = "あなたのアクセストークン"
ACCESS_TOKEN_SECRET = "あなたのアクセストークンシークレット"

そして、スクリプトから呼び出す様に変更

import tweepy
import config  # 作成したconfig.pyをインポート

# 認証を設定
client = tweepy.Client(
    consumer_key=config.API_KEY,
    consumer_secret=config.API_SECRET,
    access_token=config.ACCESS_TOKEN,
    access_token_secret=config.ACCESS_TOKEN_SECRET
)

# ツイートを投稿
response = client.create_tweet(text="Pythonからの自動投稿!")
print(f"ツイートが投稿されました: {response.data}")

別ファイルにして実行する方法は他にもいろいろあるようですが、いったんこのやり方でOKにします。

コメント

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