見出し画像

PythonでAPIを使用せずにツイートを自動で投稿する

※記事はすべて無料で読めます。
こんにちは,ごきまるです。プログラムの計算結果や通知をTwitterを介して外出先で見れるようにしたいと思ったのですが,APIの有料化,申請が通らない等数々の問題に直面しました。

そこでAPIを使用せずにツイートを自動で投稿するプログラムを作ってみました。スクレイピングを行う記事は結構あるのですが,投稿する方はあまりなかったので順を追って解説します。
コードだけみたい方は「コードの実行」に飛んでください。(ソースコードの利用について,いかなる損害についても製作者は責任を負いません。)


ドライバーのインストール

初めにChromeを開いてバージョンを確認してください。
画面右上のメニュー→ヘルプ→Google Chromeについてを順番に押します。

開けたらバージョンを確認します。

上記のサイトでバージョンが同じものをダウンロードします。自分の場合はWindowsでVer.114なので,114の最も新しいものを選択してWindows版をダウンロードします。

zipを開くとchromedriver.exeがあるのでCドライブ直下にコピペします。
以上でドライバーのインストールは終了です。

プログラムの環境準備

プログラムに必要なseleniumをインストールします。以下のコマンドを実行してください。また,必要なモジュールがありましたら適宜インストールしてください。

pip install selenium

コードの実行

以下に作成したコードを載せます。プログラムを実行する前にメールアドレス,電話番号またはTwitterID,パスワードの三つを書き込んでください。
実行すると,TWEET_TEXTの内容をツイートしてくれます。

プログラム全体の流れとしては,
1.chromeを開く
2.Twitterのログイン画面を開く
3.メールアドレスを入力,次へボタンを押す
4.電話番号またはTwitterIDを入力,次へボタンを押す
※この部分は要求されない場合があるので,その場合は無視して5に移ります。
5.パスワードを入力,ログインボタンを押す
6.TWEET_TEXTの内容をTwitterに書き込む
7.ツイートするボタンを押す

 #APIなしで自動ツイートするプログラム 
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

def waitaminute(path):
    global variable
    variable = ''
    try:
        WebDriverWait(driver, PAGE_LOAD_TIMEOUT).until(
        EC.presence_of_element_located((By.XPATH, path))
        )
        variable = driver.find_element(By.XPATH, path)
    except:
        pass


# ChromeDriverのパスを指定
CHROMEDRIVER_PATH = "C:\chromedriver.exe"

# メールアドレス
LOGIN_ID = ""

# 電話番号またはTwitterID
LOGIN_ID2 = ""

# パスワード
PASSWORD = ""

# 送信するテキスト
TWEET_TEXT = ("This is a auto tweet.\n"
                "#test\n")

# ページ読み込みの待機時間(秒)
PAGE_LOAD_TIMEOUT = 10

# 要求したhtmlの要素が存在するための変数
variable = ''

# ChromeDriverの設定
driver_service = Service(CHROMEDRIVER_PATH)
driver_service.start()

# Chromeブラウザの起動
driver = webdriver.Chrome(service=driver_service)

# Twitterのログインページにアクセス
driver.get("https://twitter.com/login")

# ログインIDの入力
waitaminute('//input[@autocomplete="username"]')
login_id_input = variable
login_id_input.send_keys(LOGIN_ID)

#次へ
login_button = driver.find_element(By.XPATH, '//div[@class="css-18t94o4 css-1dbjc4n r-sdzlij r-1phboty r-rs99b7 r-ywje51 r-usiww2 r-2yi16 r-1qi8awa r-1ny4l3l r-ymttw5 r-o7ynqc r-6416eg r-lrvibr r-13qz1uu"]')
login_button.click()


# 電話番号またはユーザーIDの入力
waitaminute('//input[@data-testid="ocfEnterTextTextInput"]')
if variable != '':
    login_id2_input = variable
    login_id2_input.send_keys(LOGIN_ID2)

    #次へ
    login_button = driver.find_element(By.XPATH, '//div[@data-testid="ocfEnterTextNextButton"]')
    login_button.click()

# パスワードの入力
waitaminute('//input[@name="password"]')
password_input = variable
password_input.send_keys(PASSWORD)

# ログインボタンのクリック
login_button = driver.find_element(By.XPATH, '//div[@data-testid="LoginForm_Login_Button"]')
login_button.click()


# ツイートの投稿
waitaminute('//div[@data-testid="tweetTextarea_0"]')
tweet_input = variable
tweet_input.send_keys(TWEET_TEXT)

waitaminute('//div[@data-testid="tweetButtonInline"]')
tweet_button = variable
tweet_button.click()

time.sleep(3)
# WebDriverを終了する
driver.quit()

ページ読み込みの待機時間はデフォルトで10秒にしていますが,ページの読み込みに10秒以上時間がかかる場合は数字をより大きくしてください。
また,Twitter以外のサイトで使いたい場合はXPATHを適宜書き換えてください。

このプログラムで出来る事

このプログラムを用いることで,今日の天気を自動でつぶやいてくれたり,株価の急落急騰をお知らせするようなTwitterのbotが作れます。また,普段使っているプログラムに挿入するだけでも便利な通知botが出来るかもしれません。

このプログラムは元々,普段使っているポケモン厳選自動化プログラムが完了したことを通知するために作成しました。個人で使うだけならLINE notifyでもいいと思います。逆に,送りたい情報が大衆向けに発信したいものであればTwitter等に投稿する方が便利だと思います。

終わりに

このような自動化で,小型PCによる24時間稼働のbotみたいなものを作りたいと思っています。記事が面白いと思った方はスパチャお願いします!(ありがたい感謝のお礼があります)

ここから先は

22字

¥ 300

この記事が気に入ったらサポートをしてみませんか?