twikit をpythonで

公開日 : 2024年3月11日 更新日 : 2024年3月11日
はじめに
  • pythonで無料で使用することができるライブラリ、Twikitについて解説します
  • X(旧Twitter)アカウントの情報(ユーザーネーム、アカウント名、パスワード)を送信する必要があります。
  • Twikitのセキュリティに対する取り組みを筆者は調べていないので、Twikit専用のグーグルアカウント、X(旧Twitter)アカウントを用いることを推奨します。
  • TwikitはAPIキーを使用せず無料で以下を行うことができるX(旧Twitter)用ライブラリ。
    • エックセズの検索(ツイートの検索)
    • エックセズの検索(ツイートの投稿)
    • トレンドの取得
  • 以下、XのことをTwitterと呼び、エックセズをツイートと呼ぶことにします。
  • pip install twikit : で使用できるようになります
  • このページは検索結果を得ること以外のさまざまな挙動を説明します。基本的にはこのページを日本語でまとめていくことになります。
  • もろもろの説明が終わったあと、とくに需要がありそうな動作については個別にプログラムを提示します。
  • 以下はTwitterでpythonと検索し、その上位5件を表示するプログラムの例です。
    
from twikit import Client

client = Client('ja')

# 例
client.login(
auth_info_1='example_user',
password='00000000000'
)

results =client.search_tweet('python',count=5, product='Top')

for result in results:
print(result.text)
よく使いそうなクラスの説明
クラス名 コンストラクタの引数 説明
Client Client(language: str, **kwargs) ツイッターで行うだいたいの動作はこのクラスを通じて実行できるようです。これ以外のクラスはそれぞれの機能に特化しているようです。
Tweet Tweet(client: Client, data: dict, user: User = None) ツイート関連の操作を行うようです。
ツイートの作成、削除、
リツイート
お気に入り(いいね)の追加や削除
ブックマークの追加や削除、ツイートへの返信、
リツイートしたユーザーやいいねしたユーザーの取得
User User(client: Client, data: dict) ユーザーに関する操作を行えるようです。引数のdataはAPIを用いて取得し、インスタンス化することもできるそうですが、ClientのメソッドからUserインスタンスを生成できます。Clientが自分自身を指すのに対し、Userは自分以外を指します。
ユーザーのID
名前
プロフィール画像のURLなどの取得
指定したユーザーのツイートのツイートを取得
message Message(client: Client, data: dict, sender_id: str, recipient_id: str) DMに関する操作を扱うようです
Trend Trend(client: Client, data: dict) トレンドに関する操作が行えるようです
Clientクラスのメソッド
Clientクラスのメソッド
どのメソッドを呼び出すにも、loginメソッドを呼び出す必要がありそう
loginメソッド
    
client = Client('ja')
client.login(
auth_info_1='example_user',
auth_info_2='email@example.com',
password='00000000'
)
  • auth_info_1 : 必須 : ユーザーネームかメールアドレスか電話番号
  • auth_info_2 : 省略可 : ユーザーネームかメールアドレスか電話番号
  • password : パスワード
ツイートの検索:search_tweet
    tweets_result = client.search_tweet('query', 'Top', count=20, cursor=None) # 返り値はResult[Tweet]
第一引数 検索語句
第二引数 検索するツイートのタイプを指定Top,Latest,Mediaを設定することができ
Top : 人気のあるツイート
Latest : 最新のツイート
Media : 画像や動画などのメディアを含むツイートの検索
位地引数count 取得したいツイートの数。
cursor 追加のツイートを取得するためのトークン
ツイート:create_tweet
    client.create_tweet('おはよう') 
create_tweet(text: str = '', media_ids: list[str] | None = None, poll_uri: str | None = None, reply_to: str | None = None, conversation_control: Literal['followers', 'verified', 'mentioned'] | None = None)
text ツイートのテキスト内容
--- ---
media_ids 画像や動画のIDのリスト。upload_mediaメソッドでIDを取得する必要がある
poll_ur ツイートに添付するTwitterの投票カードのURI
reply_to このツイートが返信するツイートのID..idで取得できる
conversation_control ツイートの会話制御タイプ
followers ; フォロワーのみが返信
verified : 認証アカウントのみ
mentioned : ツイートで言及されたアカウントのみ
ユーザーの取得:get_user_by_screen_nameメソッド
    target_screen_name = 'example_user'
user = client.get_user_by_screen_name(target_screen_name) #戻り値はUserオブジェクト
target_screen_name : スクリーンネーム。プロフィールの@の後に続く文字列を指定する haon_code_X_profile 上のユーザーでは「haon-code」です
ツイートの取得
    target_tweet_id = '...'
tweet = client.get_tweet_by_id(target_tweet_id) # 戻り値はTweetオブジェクト
Tweetクラスの使いそうな属性
Tweet.id ツイートIDの取得
Tweet.user ツイートをしたUserオブジェクトを取得
Tweet.text ツイートのテキスト
Tweet.media ツイート内の画像や動画を取得
Tweet.mediaについて、
    
results =client.search_tweet('猫',count=3, product='Media')

print(type(results)) #

print(type(results[0])) #

print(type(results[0].media)) #

print(len(results[0].media)) # 1

print(type(results[0].media[0])) #

print(results[0].media[0]) # {'display_url': 'pic.twitter ~~~~

print(results[0].media[0]['media_url_https']) # https://~~~
  • resultsはResultオブジェクトで、Tweetオブジェクトのリストらしい
  • Tweetのメディア属性を指定すると、型はリストで、要素数は1らしい
  • リストの要素の型は辞書
  • 辞書を表示するとさまざまなキーがあることがわかるので、’media_url_https’を指定することでhttpsでアクセスできるURlが取得できる
Userクラスの使いそうな属性
User.id ユーザーのID
User.name ユーザーの名前
User.screen_name ユーザーのスクリーンネーム
User.profile_image_url ユーザーのプロフィール画像のURL
User.profile_banner_url ユーザーのバナー画像のURL
Userクラスの使いそうなメソッド
特定のユーザーのツイートを取得:get_tweetsメソッド
    get_tweets(tweet_type: Literal['Tweets', 'Replies', 'Media', 'Likes'], count: int = 40)
results = user.get_tweets('Tweets' ,count=1)
第一引数 Literal 取得するツイートの種類を指定.
Tweets : 投稿したツイート
Replies : 投稿した返信
Media : 投稿し、メディア(画像や動画など)を含むツイート
Likes : いいねしたツイ
位地引数count 取得するツイートの数を指定
ツイートの検索結果を取得する
    
from twikit import Client

client = Client('ja')

client.login(
auth_info_1='example_user',
password='000000000000000000'
)

results =client.search_tweet('猫',count=50, product='Latest')

for result in results:
print(result.text)
print('-'*100)

ツイートの検索結果のうち、画像のみを取得し、保存する
    
from twikit import Client
from urllib.request import urlretrieve
client = Client('ja')

client.login(
auth_info_1='example_user',
password='0000000'
)

results =client.search_tweet('ねこ',count=5, product='Media')
i = 0
for result in results:
url = result.media[0]['media_url_https']
print(url)
print('-'*100)
urlretrieve(url, f'Desktop/images/{i}.jpg')
i = i + 1



特定のユーザーのツイートを取得する
    
from twikit import Client
client = Client('ja')

client.login(
auth_info_1='eaxmple_user',
password='00000000000'
)

target_screen_name = '@以下の文字を記述。@は記述しないこと'
user = client.get_user_by_screen_name(target_screen_name)
results = user.get_tweets('Tweets' ,count=2)

for result in results:
print(result.text)
print('-'*100)