Skip to content

tweepyによるDM操作

Posted on:December 23, 2022 at 12:00 AM

はじめに

tweepyはTwitter APIを簡単に利用できるようにしたPythonのライブラリです。tweepyの機能は色々あるのですが、今回はDM(Direct Message)の機能について説明します。

tweepyでDMを操作することはできないと書かれている記事があったのですが、公式ドキュメント見ると普通に出来るんですがね。どこの情報ですかね。。。

本記事を悪用してスパムDMなどを不特定多数の人に大量送信すると、アカウント凍結の原因となります。絶対に悪用してはいけません。 また、Twitter APIはDMの制限が若干キツめなので短時間に色々やるとAPIに制限がかかる可能性があります。余裕を持って実行してください。

付け加え

本記事のようにソースコード内にトークンを直接書くのはオススメしません!!

DMを操作する

それでは早速DMを操作してみます。

前提条件

DM送信にはReadWriteDirect Messageの権限が必要です。この記事のコードを実行してもDMが送信できないなどと文句を言う前に、API権限をよく確認しましょう。

DM送信

tweepyでDMを送信します。
DMを送信するには、API.send_direct_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_idAPI.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_idAPI.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()

おわりに

全ての動作確認はできていないので、不具合があればQiitaで教えてほしいです。

参考文献

有志による日本語翻訳のドキュメントは最新バージョンに対応できていないので、参考にしておりません。