新米エンジニアの失敗再発防止メモ

自分そしてこの世界の皆が、同じ失敗をしないためのメモ

Twitterやってます!@rakuton_t
欲しいものリストのブタメンを送ってくれた方、ありがとうございます!

【python3+tweepy】TweepyではDM(ダイレクトメッセージ)を操作できない

TweepyではDirect Messageの送信・取得などの操作ができない

python3のライブラリ、TweepyはTwitter APIのバージョンアップに対応しきれていないからだ。

DMを送信する古いエンドポイント

POST https://api.twitter.com/1.1/direct_messages/new.json

新しいエンドポイント

POST direct_messages/events/new

のような違いがあるが、Tweepyでは古い方のエンドポイントを使っている。

別のライブラリをお勧めする

requests_oauthlib というライブラリをお勧めする。
こちらは下記のように自分でエンドポイントを指定するので、
以後エンドポイントが変更されたとしても対応可能だろう。

ダイレクトメッセージを取得するサンプルコード

import json
from requests_oauthlib import OAuth1Session

# 認証
twitter = OAuth1Session("consumer_key", "consumer_secret", "access_token", "access_token_secret")

# パラメータ設定
endpoint = 'https://api.twitter.com/1.1/direct_messages/events/list.json'
params = {'count':'50'}

# リクエスト送信
res = twitter.get(endpoint, params = params)

# レスポンスはJson文字列なので、Json文字列を辞書形式に変換
dic = json.loads(res.text)
print(dic)

他の操作もTwitter公式を見れば分かる

上記の書き方を覚えれば、
あとはTwitterAPI公式ドキュメントを確認すれば何でもできる。
上記のソースのendpointとparamsを書き換えるだけだ。
Docs — Twitter Developers

ちなみに、公式ドキュメントでこのように「POST」と書いてある場合、

POST direct_messages/events/new (message_create)

下記のように、postメソッドを使用する。

res = twitter.post(endpoint, params = params)

取得系はget、操作系はpostですね。
requests_oauthlib はライブラリ特有のクセがないのでおススメですね。

私の記事が役に立ったら、どうぞ何か買ってください!→ Amazon欲しいものリスト