TwitterをPythonで運用したい人向けの記事です。
Python初心者の方でもコードをコピペして実行できるような記事を心がけます。
この記事では、Python3.12.2での動作確認のみ行なっています。
Twikitのアップデートで動作しなくなる場合もありますのでご注意ください。
Twikitの導入
まず、今回メインで使用するTwikitについて説明します。
Twikitは、TwitterのAPIを簡単に操作できるようにするライブラリです。
Pythonで有名なtweepyと違うのは、APIキーなどの発行が不要なことです。
tweepyだと開発者ポータルから申請する必要がありますが、
twikitなら必要なのはユーザー名とパスワードだけです。
twikitはpipを使ってインストールできます。
pip install twikit
Twikitの使い方
簡単な英語とPythonの文法が理解できればすぐに使えます。
ログイン
Twikitでは検索をするにしてもログインが必須です。
入力するべきパラメータは以下を参考にしてください。
パラメータ | 入力するべき値 | 必須 |
---|---|---|
auth_info_1 | ユーザー名, メールアドレス, 電話番号 | はい |
auth_info_2* | ユーザー名, メールアドレス, 電話番号 | いいえ |
password | パスワード | はい |
from twikit import Client
client = Client("ja-JP")
client.login(auth_info_1="メールアドレス",
password="パスワード")
client.login
を使ってログインできます。
ただし、ログインするたびにアカウントに通知がいくので注意です。
これの対策方法は、ログイン後にクッキーを保存しておくことです。
twikit ではクッキーの書き込みと読み込みができます。
# with文で書き込む方法もあるが、今回は省略
from twikit import Client
client = Client("ja-JP")
client.login(auth_info_1="メールアドレス",
password="パスワード")
# ログイン情報を cookies.json に保存する
client.save_cookies("cookies.json")
上記コードでは、通常通りログイン後、cookies.json
への保存を行なっています。
from twikit import Client
client = Client("ja-JP")
# ログイン情報を cookies.json から読み込む
client.load_cookies("cookies.json")
# 処理
# ...
クッキーを読み込むことでログインの処理が省けるので色々メリットがあります。
- アカウントが凍結されづらくなる
- ログイン処理を省くので新規ログイン通知が来なくなる
- ログイン処理を省くのでちょっとだけ速くなる
ツイート
Twikitを使ってPythonからツイートしてみましょう。
Twikitでは画像や投票も追加できます。
試しに、「テストツイート」とツイートするコードを書いてみましょう。
from twikit import Client
client = Client("ja-JP")
client.load_cookies("cookies.json")
# ツイートを作成
client.create_tweet("テストツイート")
client.create_tweet
を使うことでツイートを行うことができます。
次は、画像や動画付きでツイートしてみましょう。
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ではアプリのように話題、最新、メディアからツイートを検索できます。
試しに、「大谷翔平」というキーワードを含んだツイートを検索してみましょう。
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オブジェクトから本文をプリントしています。
実行結果は以下の画像をご確認ください。
また、特に指定しない場合は20個のツイートを取得するのでご注意ください。
パラメータcount
で1〜20ツイートまで取得できます。
パラメータcountは「返ってくる値の数」を制限するだけです。
実際はAPIから20個のツイートを取得しているので、API制限の回避には有効的ではありません。
「おはよう」というツイートを検索して、5個のツイートをいいねしてみましょう。
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でのユーザー検索を解説します。
試しに、「田中」というクエリ(キーワード)を含んだユーザーを検索してみましょう。
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
でユーザーを検索できます。検索したユーザーネームとスクリーンネームをプリントしています。
次に、スクリーンネームから検索してみましょう。
スクリーンネームは、@
から始まるやつです。
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
には@
を抜いた値を入れてください。
@ を入れてしまったら
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での、タイムライン取得を解説します。
試しに、アプリ内での「おすすめ」からツイートのいいね数を取得してみましょう。
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
でツイートのいいね数を取得できます。
次に、アプリ内での「フォロー中」からツイートのリツイート数を取得してみましょう。
Twikitのバグか、私の環境が悪いのか不明ですが、執筆時点ではコードを実行してもエラーが発生します。
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件という制限があります。
細かい制限は以下のサイトを参考にしてください。
最後に
Twikitでほとんど完結するぐらい色んなことができるので、ぜひお試しください。
パッと書いた記事なので、定期的に更新していく予定です。
Python中級者の方であればドキュメントを読んで複雑なコードも書けるはずです。