はじめに
tweepyはTwitter APIを簡単に利用できるようにしたPythonのライブラリです。tweepyの機能は色々あるのですが、今回はDM(Direct Message)の機能について説明します。
tweepyでDMを操作することはできないと書かれている記事があったのですが、公式ドキュメント見ると普通に出来るんですがね。どこの情報ですかね。。。
本記事を悪用してスパムDMなどを不特定多数の人に大量送信すると、アカウント凍結の原因となります。絶対に悪用してはいけません。
また、Twitter APIはDMの制限が若干キツめなので短時間に色々やるとAPIに制限がかかる可能性があります。余裕を持って実行してください。
付け加え
- この記事はtweepyの最新バージョン(2021/12/31現在)に対応しております。
- この記事ではDM操作の基本的な機能のみ説明しております。細かい機能についての説明はしていません。
- APIのバージョンは必ず1.1を使ってください。2.0ではエラーになります。
本記事のようにソースコード内にトークンを直接書くのはオススメしません。
改訂履歴
- 2022/05/22 「DMの取得(2)」を訂正しました。
- 2022/12/13 コメントにてご質問を受けた部分の説明を追加しました。
DMを操作する
それでは早速DMを操作してみます。
前提条件
- Twitter Developerに登録していること
- Python3が動作するサーバー・PCがあること
- tweepyライブラリがpipでインストールされていること
DM送信にはRead
、Write
、Direct Message
の権限が必要です。この記事のコードを実行してもDMが送信できないなどと文句を言う前に、API権限をよく確認しましょう。
DM送信
tweepyでDMを送信します。
DMを送信するには、API.send_direct_message
を使います。
-
recipient_id
には送信したい相手のIDを入力します。(Screen Name
のことではありません。) -
message
には相手に送信したいメッセージを入力します。
実行例
import tweepy
def main():
# API Key
consumer_key = "xxxx"
consumer_secret = "xxxx"
access_token = "xxxx"
access_token_secret = "xxxx"
# 認証処理等
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
# 送信したいメッセージ
message = "Hello, World!"
recipient_id = 0000000000000000
result = api.send_direct_message(recipient_id=recipient_id, text=message)
print(result.id) # このIDは後々使います。
if __name__ == "__main__":
main()
DM削除
tweepyで送信したDMを削除します。(※自分から消えるだけで相手には残ります。)
DMを削除するには、API.delete_direct_message
を使います。
-
message_id
には削除したいDMのIDを入力します。
message_id
はAPI.send_direct_message
を実行したときに返される、DirectMessage
オブジェクトに含まれています。
よく分からなければ、本記事のDM送信のコードを実行したときに表示されるIDを入力してください。
実行例
import tweepy
def main():
# API Key
consumer_key = "xxxx"
consumer_secret = "xxxx"
access_token = "xxxx"
access_token_secret = "xxxx"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
message_id = 0000000000000000
api.delete_direct_message(id=message_id)
if __name__ == "__main__":
main()
DMの取得
tweepyで特定のDMの内容を取得します。
特定のDMを取得するには、API.get_direct_message
を使います。
-
message_id
には取得したいDMのIDを入力します。
message_id
はAPI.send_direct_message
を実行したときに返される、DirectMessage
オブジェクトに含まれています。
よく分からなければ、本記事のDM送信のコードを実行したときに表示されるIDを入力してください。
実行例
import tweepy
def main():
# API Key
consumer_key = "xxxx"
consumer_secret = "xxxx"
access_token = "xxxx"
access_token_secret = "xxxx"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
message_id = 0000000000000000
print(api.get_direct_message(id=message_id))
if __name__ == "__main__":
main()
DMの取得(2)
tweepyでDMを取得します。
※上記とは違い、過去30日以内のすべてのダイレクトメッセージイベント(送信と受信の両方)を取得します。時系列の逆順に並べ替えられます。上記は指定されたIDのメッセージのみの情報を返します。
DMを取得するにはAPI.get_direct_messages
を使います。("s"があることに注意)
dm_dic_message
変数にメッセージデータが、dictionary
オブジェクトとして格納されます。
公式リファレンス
import tweepy
def main():
# API Key
consumer_key = "xxxx"
consumer_secret = "xxxx"
access_token = "xxxx"
access_token_secret = "xxxx"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
dm_obj = api.get_direct_messages()
for dm_object in dm_obj:
dm_dic = dm_object.message_create
dm_dic_message = dm_dic['message_data']
message = dm_dic_message['text']
print(message)
if __name__ == "__main__":
main()
さいごに
全ての動作確認はできていないので、不具合があれば教えてほしいです。
参考文献
有志による日本語翻訳のドキュメントは最新バージョンに対応できていないので、参考にしておりません。