見出し画像

【起業日記#3】SNS(X)の完全自動化に成功しました!!

割引あり

前回の記事でとりあえずPythonでポストすることに成功しました。しかし、あのままでは何の役にも立ちません。

本記事ではXの完全自動化に成功したので、その方法を共有していきたいと思います。

有料級の情報だと思います。

完全自動化を実現するにあたって、以下のことをやりました。

  • 画像/動画投稿とテキストをポスト

  • ポスト内容一覧からランダムにポスト

  • スケジュールに設定した時間でポスト

この方法であらかじめポストする内容をたくさん用意しておけば完全自動でXを運用することが可能となります。

ポストする内容なChatGPTにでも考えてもらいたいと思います。


画像/動画投稿とテキストをポスト

事前に認証までは実装しておく必要があります。

# 動画ファイルのパス
video_path = 'test.mp4'  # アップロードする動画ファイルのパスを指定

try:
    # 動画をアップロード(Twitter API v1.1を使用)
    print("動画をアップロードしています...")
    media = api.media_upload(video_path, media_category='tweet_video')
    media_id = media.media_id_string
    print(f"動画がアップロードされました。メディアID: {media_id}")

    # テキストと動画をツイート(Twitter API v2を使用)
    message = "Hello World with Video!"
    response = client.create_tweet(text=message, media_ids=[media_id])
    print(f"ツイートが成功しました!ツイートID: {response.data['id']}")

except tweepy.TweepyException as e:
    print(f"エラーが発生しました: {e}")



ポスト内容一覧からランダムにポスト

今回はconfigファイルに投稿内容をまとめておいて、そこからランダムに選択してポストするような仕組みを採用しています。

import os
import tweepy
import time
from datetime import datetime
import config  # 設定ファイルをインポート
import random  # ランダム選択のためのモジュールをインポート

~~認証処理は割愛~~

# 投稿処理(Twitter API v2 を使用)
try:
    # ランダムに投稿情報を選択
    post_info = random.choice(config.POSTS)
    print(f"選択された投稿情報: {post_info}")

    # 動画をアップロード(Twitter API v1.1を使用)
    print("動画をアップロードしています...")
    media = api.media_upload(post_info['video_path'], media_category='tweet_video')

    # メディアの処理ステータスを確認
    if media.processing_info:
        while media.processing_info['state'] in ['pending', 'in_progress']:
            print(f"動画処理中...(ステータス: {media.processing_info['state']})")
            time.sleep(5)  # 処理が完了するまで待機
            media_status = api.get_media_upload_status(media.media_id)
            media.processing_info = media_status.processing_info

        if media.processing_info['state'] == 'failed':
            raise ValueError(f"動画のアップロードに失敗しました。エラー: {media.processing_info['error']['message']}")

    media_id = media.media_id_string
    print(f"動画がアップロードされました。メディアID: {media_id}")

    # テキストと動画をツイート(Twitter API v2を使用)
    response = client.create_tweet(text=post_info['tweet_text'], media_ids=[media_id])
    tweet_id = response.data['id']
    print(f"ツイートが成功しました!ツイートID: {tweet_id}")

    # 投稿したツイートに対して返信
    reply_response = client.create_tweet(text=post_info['reply_text'], in_reply_to_tweet_id=tweet_id)
    reply_tweet_id = reply_response.data['id']
    print(f"返信が成功しました!返信ツイートID: {reply_tweet_id}")

except tweepy.TweepyException as e:
    print(f"Twitter APIエラーが発生しました: {e}")
except ValueError as ve:
    print(f"エラー: {ve}")
except Exception as ex:
    print(f"予期しないエラーが発生しました: {ex}")



スケジュールに設定した時間でポスト

スケジュールの設定は他ファイルに作成していきます。

指定した時間になったら、自動ポスト処理が実装されているPythonファイルを実行するような処理となります。

import subprocess
import time
from datetime import datetime

def run_post_method():
    """同じフォルダ階層にあるpost_method.pyを実行する"""
    try:
        print("------------post_method.pyを実行しています...------------")
        subprocess.run(["python", "post_method.py"], check=True)
        print("post_method.pyの実行が完了しました。")
    except subprocess.CalledProcessError as e:
        print(f"post_method.pyの実行中にエラーが発生しました: {e}")

def is_time_to_run():
    """現在の時間が指定された時間であるかをチェック"""
    now = datetime.now()
    # 現在の時間(時:分)を文字列でチェック
    current_time = now.strftime("%H:%M")
    return current_time in [
        "01:00", "01:30",
        "02:00", "02:30",
        "03:00", "03:30",
        "04:00", "04:30",
        "05:00", "05:30",
        "06:00", "06:30",
        "07:00", "07:30",
        "08:00", "08:30",
        "09:00", "09:30",
        "10:00", "10:30",
        "11:00", "11:30",
        "12:00", "12:30",
        "13:00", "13:30",
        "14:00", "14:30",
        "15:00", "15:30",
        "16:00", "16:30",
        "17:00", "17:30",
        "18:00", "18:30",
        "19:00", "19:30",
        "20:00", "20:30",
        "21:00", "21:30",
        "22:00", "22:30",
        "23:00", "23:30"
    ]

def main():
    """定期的にチェックして、特定の時間になったらpost_method.pyを実行する"""
    while True:
        if is_time_to_run():
            run_post_method()
            # 次の分まで待機して、二重実行を防ぐ
            time.sleep(60)
        else:
            # 1分ごとに時間をチェック
            time.sleep(60)

if __name__ == "__main__":
    main()



コード全体

すべのコードは以下の通りです。

お見せできない部分もあるので、見せれる範囲で…(すみません)
すべのコードは有料とさせていただきます。

ここから先は

4,470字

この記事が気に入ったらチップで応援してみませんか?