X(twitter) api v2を使って毎日の投稿を自動化する(2024/07)
① X apiキーを所得する
主にこれがメインで滅茶苦茶面倒な所です。
詳細に解説してくれているのでここを見てください。
ここにも書かれていますが、なんと現在Xには、7つのAPIキーがあります。
正気か???
Sign up for Free Accountを選ぶと無料でAPIキーが使えます。「250文字以上の英語の概要を送れ」と言われるので適当にChatGPTにでも水増しさせて送りましょう。どうせ自動で承認されます。
するとなんかdeveloper画面に移行するので出来たーと思うかもしれませんが、ここで油断せずに、「X(Twitter) Developer Portalで認証の設定」まで行いましょう。これをおこなうと、「①Client ID・➁Client Secret」(OAuth 2.0 Client ID and Client Secret)が入手できます。この二つはプログラムでは使いませんが、この設定を行っておかないとプログラムが認証エラーになります。
記事内にもありますが、Website URLはX(Twitter)のURLでも構いません。
その後は、「key and tokens」から以下の5つのキーを確保しましょう。
Consumer API Key / API Secret:
Bearer Token
Access Token / Access Token Secret:
ここまでやればほぼクリアしたも同然です。
➁ pythonコードをコピペする。
このコードをコピペして自身の適当なフォルダ(できればユーザー名直下がいい)に「autotweet.py」という名前で保存してください。
import os
import tweepy
import schedule
import time
from datetime import datetime
# Twitter API認証
# 頑張って所得する奴(所得だけでいいっぽい)
# client_id = ""
# client_secret = ""
consumer_api_key = "(キーを入力)"
consumer_api_secret = "(キーを入力)"
bearer_token = "(キーを入力)"
access_token = "(キーを入力)"
access_token_secret = "(キーを入力)"
# 基本となるフォルダのパス
base_folder = r"C:\(なんたらかんたら~~~)"
# 認証
client = tweepy.Client(
bearer_token=bearer_token,
consumer_key=consumer_api_key,
consumer_secret=consumer_api_secret,
access_token=access_token,
access_token_secret=access_token_secret
)
# Twitter API認証
auth = tweepy.OAuthHandler(consumer_api_key, consumer_api_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
print("認証ok")
# 画像投稿メイン処理
def post_image(image_folder):
sumi_folder = os.path.join(image_folder, "sumi")
if not os.path.exists(image_folder):
print(f"Folder does not exist: {image_folder}")
return
# フォルダ内のpngファイルを取得 →一番最初のやつを投稿する
png_files = [f for f in os.listdir(image_folder) if f.endswith('.png')]
# 最初のpngファイルを投稿
image_path = os.path.join(image_folder, png_files[0])
if not png_files:
print(f"No PNG files found in the folder: {image_folder}")
return
# フォルダ内のtxtファイルを取得 →ツイート内容へ
txt_files = [f for f in os.listdir(image_folder) if f.endswith('.txt')]
if not txt_files:
print(f"No TXT files found in the folder: {image_folder}")
return
else:
txt_path = os.path.join(image_folder, txt_files[0])
with open(txt_path, 'r', encoding='utf-8') as file:
tweet_text = file.read().strip()
try:
media = api.media_upload(image_path)
client.create_tweet(text=tweet_text, media_ids=[media.media_id])
print(f"Posted image: {png_files[0]} at {datetime.now()}")
# 投稿したファイルをsumiフォルダに移動
sumi_path = os.path.join(sumi_folder, png_files[0])
os.rename(image_path, sumi_path)
print(f"Moved {png_files[0]} to sumi folder")
except Exception as e:
print(f"Error posting image: {e}")
# base_folderの中にあるフォルダ一覧を取得
folders = [f for f in os.listdir(base_folder) if os.path.isdir(os.path.join(base_folder, f))]
# スケジュールを設定
for folder_name in folders:
# Convert folder_name from HHMM to HH:MM
time_str = f"{folder_name[:2]}:{folder_name[2:]}"
schedule.every().day.at(time_str).do(post_image, image_folder)
print(f"make schedule: {image_folder}, {time_str}")
# メインループ
while True:
schedule.run_pending()
time.sleep(60) # 1分ごとにチェック
フォルダー構造としては
という形で動作するようになっています。
コマンドプロンプトを起動して、
pip install tweepy schedule
と入力して、必要なライブラリをインストールしましょう。(pipやpythonがなければそれらも)
cdを使って、「autotweet.py」を保存したフォルダーに移動します。
python autotweet.py
でプログラムを立ち上げたら一生放置しておいてください。勝手に投稿してくれるはずです。