TwitterのAPIを使えば、プログラムによる自動ツイートが簡単にできます。
でも、TwitterはAPIの申請が面倒で嫌になります。
それなら、APIを使わずに自動ツイートを行えばいいのです。
ということで、この記事ではAPIなしの自動ツイートに関して解説していきます。
本記事の内容
- Twitter APIを使わずに自動ツイートする方法
- Twitterへのログイン
- Twitterにログインした状態でツイート
- 【サンプルコード】Twitter APIなしの自動ツイート
それでは、上記に沿って解説していきます。
Twitter APIを使わずに自動ツイートする方法
まずは、全体像を説明します。
ツイートするためには、ログイン済みが前提となります。
ログインしている状況でしかツイートはできませんからね。
つまり、自動ツイートとは以下の機能に分解できます。
- Twitterへのログイン
- Twitterにログインした状態でツイート
この機能を満たすプログラムであれば、自動ツイートが可能になります。
このようなプログラムを可能にするには、Seleniumを利用します。
Seleniumのインストールは、次の記事で解説しています。
あと、タイトルにも書いているようにPythonを開発言語とします。
Pythonは、このような自動処理に最も適したプログラム言語と言えます。
以上、Twitter APIを使わずに自動ツイートする方法の全体像を説明しました。
次は、分解した機能の一つである「Twitterへのログイン」を説明します。
Twitterへのログイン
詳細は、次の記事をご覧ください。
上記記事の内容通りに、ライブラリなども用意してください。
以上、Twitterへのログインに関する説明でした。
次は、プログラムによってツイートを行う方法を説明していきます。
Twitterにログインした状態でツイート
実は、簡単です。

これは、Twitterのシェアボタンです。
今では、大抵のページで目にします。
このシェアボタンの仕組みを利用するのです。
例えば、以下のページのシェアボタンをクリックします。
https://this.kiji.is/759887978843619328
すると、次の表示の画面に遷移します。

上の画面のURLは、以下となります。
https://twitter.com/intent/tweet?text=%E7%B1%B3%E3%82%B0%E3%83%BC%E3%82%B0%E3%83%AB%E3%80%81%E9%81%8E%E5%8E%BB%E6%9C%80%E9%AB%98%E7%9B%8A%E3%80%80%E3%82%B3%E3%83%AD%E3%83%8A%E8%BF%BD%E3%81%84%E9%A2%A8%E3%80%81MS%E3%82%82%E5%A5%BD%E8%AA%BF+%7C+2021%2F4%2F28+-+%E5%85%B1%E5%90%8C%E9%80%9A%E4%BF%A1&url=https%3A%2F%2Fthis.kiji.is%2F759887978843619328
このURLは、以下の形式で表現されています。
https://twitter.com/intent/tweet?text=テキスト&url=対象ページURL
この形式のURLが、シェアボタンに設定されているだけです。
そのため、私たちもシェアボタンの仕組みを利用します。
上記形式のURLに遷移すれば、入力までは完了していることになります。
あとは、「Tweet(ツイートする)」ボタンを押すだけです。
「Tweet」ボタンを押すのは、Seleniumを利用します。
ボタンを押せば、これでツイートの投稿が完了になります・
以上、Twitterにログインした状態でツイートすることを説明しました。
次は、実際にTwitter APIなしの自動ツイートを行っていきます。
Twitter APIなしの自動ツイート
以下のサンプルコードは、Twitter APIなしの自動ツイートを行います。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import urllib.parse
CHROMEDRIVER = "chromedriver.exeのパス"
TWITTER_BASE = "https://twitter.com/"
LOGIN_ID = "メールアドレスとかユーザ名"
PASSWORD = "パスワード"
def get_driver():
# ヘッドレスモードでブラウザを起動
options = Options()
# options.add_argument('--headless')
# ブラウザーを起動
driver = webdriver.Chrome(CHROMEDRIVER, options=options)
return driver
# twitterログイン
def do_login(driver):
# ログインURL
login_url = TWITTER_BASE + "login"
driver.get(login_url)
# 電話、メールまたはユーザー名のinput要素が読み込まれるまで待機(最大10秒)
elem_id = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.NAME, "session[username_or_email]"))
)
try:
# パスワードのinput要素
elem_password = driver.find_element_by_name("session[password]")
if elem_id and elem_password:
# ログインID入力
elem_id.send_keys(LOGIN_ID)
# パスワード入力
elem_password.send_keys(PASSWORD)
# ログインボタンクリック
elem_btn = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//div[@data-testid='LoginForm_Login_Button']"))
)
actions = ActionChains(driver)
actions.move_to_element(elem_btn)
actions.click(elem_btn)
actions.perform()
# 遷移
# 遷移後のURLでログイン可否をチェック
perform_url = driver.current_url
if perform_url.find(login_url) == -1:
# ログイン成功
return True
else:
# ログイン失敗
return False
else:
return False
except:
return False
# tweet投稿
def post_tweet(driver, text, url):
tweet_text = text
tweet_text = urllib.parse.quote(tweet_text, safe='')
tweet_url = url
tweet_url = urllib.parse.quote(tweet_url, safe='')
target_url = TWITTER_BASE + "intent/tweet?text=" + tweet_text + "&url=" + tweet_url
# 投稿画面へ遷移
driver.get(target_url)
# tweetボタンが読み込まれるまで待機(最大10秒)
elem_tweet_btn = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//div[@data-testid='tweetButton']"))
)
try:
actions = ActionChains(driver)
actions.move_to_element(elem_tweet_btn)
actions.click(elem_tweet_btn)
actions.perform()
except:
print("投稿エラー")
if __name__ == "__main__":
# Driver
driver = get_driver()
# ログイン
login_flg = do_login(driver)
if login_flg:
# ログイン成功
text = "投稿テストを行います"
url = "https://this.kiji.is/759884204002656256"
post_tweet(driver, text, url)
# driver.quit()
「Twitterにプログラムで自動ログインする【Python + Selenium】」のサンプルコードとほぼ同じです。
異なる箇所は以下の部分だけです。
if login_flg:
# ログイン成功
text = "投稿テストを行います"
url = "https://this.kiji.is/759884204002656256"
post_tweet(driver, text, url)
もちろん、post_tweet関数も新規で追加しています。
post_tweet関数に関しては、自動ログインと同じロジックです。
post_tweet関数で説明がいるとすれば、「urllib.parse.quote」でURLエンコードしていることでしょうか。
あと、それに伴ってurllib.parseをimportしています。
import urllib.parse
自動ログインのサンプルコードさえ理解できれば、今回は何も難しいことはありません。
では、上記のサンプルコードを実行してみましょう。

普通に投稿が行われます。
そして、ツイートとしても確認できます。
以上、Twitter APIなしの自動ツイートについて説明しました。



