LoginSignup
3
4

TwitterをPythonで運用したい人向けの記事です。
Python初心者の方でもコードをコピペして実行できるような記事を心がけます。

この記事では、Python3.12.2での動作確認のみ行なっています。
Twikitのアップデートで動作しなくなる場合もありますのでご注意ください。

Twikitの導入

まず、今回メインで使用するTwikitについて説明します。
Twikitは、TwitterのAPIを簡単に操作できるようにするライブラリです。
Pythonで有名なtweepyと違うのは、APIキーなどの発行が不要なことです。
tweepyだと開発者ポータルから申請する必要がありますが、
twikitなら必要なのはユーザー名とパスワードだけです。

twikitはpipを使ってインストールできます。

Terminal
pip install twikit

Twikitの使い方

簡単な英語とPythonの文法が理解できればすぐに使えます。

ログイン

Twikitでは検索をするにしてもログインが必須です。
入力するべきパラメータは以下を参考にしてください。

パラメータ 入力するべき値 必須
auth_info_1 ユーザー名, メールアドレス, 電話番号 はい
auth_info_2* ユーザー名, メールアドレス, 電話番号 いいえ
password パスワード はい
main.py
from twikit import Client

client = Client("ja-JP")

client.login(auth_info_1="メールアドレス",
             password="パスワード")

client.login を使ってログインできます。
ただし、ログインするたびにアカウントに通知がいくので注意です。
スクリーンショット 2024-03-26 17.30.09.png
これの対策方法は、ログイン後にクッキーを保存しておくことです。
twikit ではクッキーの書き込みと読み込みができます。

main.py 初回保存
# with文で書き込む方法もあるが、今回は省略
from twikit import Client

client = Client("ja-JP")

client.login(auth_info_1="メールアドレス",
             password="パスワード")

# ログイン情報を cookies.json に保存する
client.save_cookies("cookies.json")

上記コードでは、通常通りログイン後、cookies.jsonへの保存を行なっています。

main.py クッキーからログイン
from twikit import Client

client = Client("ja-JP")

# ログイン情報を cookies.json から読み込む
client.load_cookies("cookies.json")

# 処理
# ...

クッキーを読み込むことでログインの処理が省けるので色々メリットがあります。

  1. アカウントが凍結されづらくなる
  2. ログイン処理を省くので新規ログイン通知が来なくなる
  3. ログイン処理を省くのでちょっとだけ速くなる

ツイート

Twikitを使ってPythonからツイートしてみましょう。
Twikitでは画像や投票も追加できます。

anatomy-of-poll---before-voting.png

試しに、「テストツイート」とツイートするコードを書いてみましょう。

main.py
from twikit import Client

client = Client("ja-JP")
client.load_cookies("cookies.json")

# ツイートを作成
client.create_tweet("テストツイート")

client.create_tweet を使うことでツイートを行うことができます。
次は、画像や動画付きでツイートしてみましょう。

main.py
from twikit import Client

client = Client("ja-JP")
client.load_cookies("cookies.json")

# ローカルの画像をツイート
media_list = [
    client.upload_media("media1.png"),
    client.upload_media("media2.mp4", wait_for_completion=True)
]

client.create_tweet("テストツイート", media_list)

ローカルから画像を投稿するには client.upload_media を使う必要があります。
また、動画などのサイズの大きいファイルはwait_for_completionをTrueにするのがおすすめです。(ファイルが完全にアップロードされるまで待機してくれます)

ツイート検索

Twikitではアプリのように話題、最新、メディアからツイートを検索できます。

試しに、「大谷翔平」というキーワードを含んだツイートを検索してみましょう。

main.py
from twikit import Client

client = Client("ja-JP")
client.load_cookies("cookies.json")

tweets = client.search_tweet("大谷翔平", "Latest")
for tweet in tweets:
    print("-------------------------------")
    print(tweet.text)

client.search_tweetでツイートを検索することができます。
今回は最新のツイートを検索したいので"Latest"ですが"Topic"にすることで話題のツイートも検索できます。また、for tweet in tweetsのようにしてTweetオブジェクトを取り出し、必要な要素を出力するのが通常の使い方です。
今回のコードでは、Tweetオブジェクトから本文をプリントしています。
実行結果は以下の画像をご確認ください。
スクリーンショット 2024-03-26 18.02.34.png

また、特に指定しない場合は20個のツイートを取得するのでご注意ください。
パラメータcountで1〜20ツイートまで取得できます。

パラメータcountは「返ってくる値の数」を制限するだけです。
実際はAPIから20個のツイートを取得しているので、API制限の回避には有効的ではありません。

「おはよう」というツイートを検索して、5個のツイートをいいねしてみましょう。

main.py
from twikit import Client

client = Client("ja-JP")
client.load_cookies("cookies.json")

tweets = client.search_tweet("おはよう", "Latest", 5)
for tweet in tweets:
    tweet.favorite()

3つ目のパラメータcountに5を指定することで、ツイート数を5個までに制限しています。また、tweet.favorite()でツイートをいいねできます。
リツイートは tweet.retweet() など直感でわかりやすい関数名になっています。

ユーザー検索

Twikitでのユーザー検索を解説します。

試しに、「田中」というクエリ(キーワード)を含んだユーザーを検索してみましょう。

main.py
from twikit import Client

client = Client()
client.load_cookies("cookies.json")

users = client.search_user("田中")
for user in users:
    # ユーザーネームとスクリーンネームをプリント
    print(user.name, user.screen_name)

client.search_userでユーザーを検索できます。検索したユーザーネームとスクリーンネームをプリントしています。
スクリーンショット 2024-03-27 18.29.32.png

次に、スクリーンネームから検索してみましょう。
スクリーンネームは、@から始まるやつです。

main.py
from twikit import Client

client = Client()
client.load_cookies("cookies.json")

user = client.get_user_by_screen_name("reqeeee")
print(user.name)

client.get_user_by_screen_nameでスクリーンネームからUserオブジェクトを取得できます。
パラメータscreen_nameには@を抜いた値を入れてください。

@ を入れてしまったら
main.py
from twikit import Client

client = Client()
client.load_cookies("cookies.json")

user = client.get_user_by_screen_name("@reqeeee")
print(user.name)

# ---------------------
>>> main.py

KeyError: 'user'

このように、正しい値を入力しないとKeyErrorが

タイムライン検索

Twikitでの、タイムライン取得を解説します。

試しに、アプリ内での「おすすめ」からツイートのいいね数を取得してみましょう。

main.py
from twikit import Client

client = Client()
client.load_cookies("cookies.json")

tweets = client.get_timeline()
for tweet in tweets:
    print(f"いいね数: {tweet.favorite_count}")

client.get_timeline()でおすすめのツイート(タイムライン)を取得することができます。tweet.favorite_countでツイートのいいね数を取得できます。

スクリーンショット 2024-03-27 18.54.08.png

次に、アプリ内での「フォロー中」からツイートのリツイート数を取得してみましょう。

Twikitのバグか、私の環境が悪いのか不明ですが、執筆時点ではコードを実行してもエラーが発生します。

main.py
from twikit import Client

client = Client()
client.load_cookies("cookies.json")

tweets = client.get_latest_timeline()
for tweet in tweets:
    print(f"リツート数: {tweet.retweet_count}")

client.get_latest_timeline()でフォロー中のツイートを取得することができます。
tweet.retweet_countでツイートのリツイート数を取得できます。

Tips

レートリミット(API制限)

頻繁に検索したり、いいねをしすぎるとAPI制限になります。
ここでは詳細な制約などを解説します。

一般的には15分間隔で制限がリセットされます。

アクション 回数(15分)
ツイートの投稿, 削除 50
タイムラインの取得 900
ユーザー検索 75
リストの作成 300
リストの削除 300
リストの更新 300
フォロー、フォロワー取得 15
DMの取得 15

ただ、いいねは24時間で1000件という制限があります。
細かい制限は以下のサイトを参考にしてください。

知りたいことは大体書いてます。
スクリーンショット 2024-03-27 13.44.04.png

最後に

Twikitでほとんど完結するぐらい色んなことができるので、ぜひお試しください。
パッと書いた記事なので、定期的に更新していく予定です。

Python中級者の方であればドキュメントを読んで複雑なコードも書けるはずです。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4