【Twitter API】Twitter 情報取得・返信・リツイート【Python】

thumbnail for this post

前回の記事「Twitterで予約投稿」で使ったPythonのTwitter向けライブラリTweepyには投稿以外にもいろいろな機能があります。
使いそうなところをざっくりみて組み合わせるとどんなことができるか見てみましょう。

プログラミングしないで予約投稿をしたい場合はSocialDog使いましょう。

SocialDog


紹介記事: 【フォロワー数向上】Twitter便利アプリSocialDogを参照してください。

Tweepyで扱うオブジェクト

Tweepyでは2つの情報が主に使われます。

  • Statusオブジェクト: メッセージを表すオブジェクト
  • Userオブジェクト: ユーザを表すオブジェクト

どのような情報が含まれているか見てみましょう(抜粋)。

Statusオブジェクト

created_at : 2020-03-02 02:01:32 #つぶやかれた日時
id : 1234297757487075329 #メッセージのID
text : "テストfrom Twitter API" #メッセージの中身
in_reply_to_status_id : None # 返信の場合はNoneの代わりにメッセージのIDが入る
in_reply_to_user_id : None # 返信の場合はNoneの代わりに相手のuser IDが入る
in_reply_to_screen_name : None # 返信の場合はNoneの代わりに相手のscreen nameが入る
author <Userオブジェクト> #このツイートのUser Object

User オブジェクト

 id : 1222129198740819968
 id_str : '1222129198740819968'
 name : 'へーさくさく🌳物欲ITチャリダー'
 screen_name : 'heisakusaku'
 description : 'キリン(仮)。ツイッターって...'
 followers_count : 75
 friends_count : 97
 listed_count: 1
 created_at : 'Tue Jan 28 12:08:16 +0000 2020'
 favourites_count=2216

フォロワー少なくて可愛そう。。

ほっとけ。ぴえん

Tweepy APIの使い方

正式ドキュメントはここにあります。

web API Reference — tweepy 3.8.0 documentation

使い方としては、以下のお決まりの認証プロセスの後にAPIを使った処理を書いていけば動きます。
キーの取得に関しては前回の記事「Twitterで予約投稿」を参照してください。

Tweepy利用の固定部分

import tweepy
# ここに取得したキーを書く
CONSUMER_KEY = 'xxxxxxxxxxx'
CONSUMER_TOKEN = 'xxxxxxxxxxx'
ACCESS_KEY = 'xxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_TOKEN)
auth.set_access_token(ACCESS_KEY, ACCESS_TOKEN)
api = tweepy.API(auth)
# ここからAPIを使った好きな処理を書く

それではいろいろ試してみましょう。

RT(リツイート)されたメッセージをリストアップ

  • API名: API.retweets_of_me([since_id][, max_id][, count][, page])
    これは、自分のツイートの中でリツイートされたもの20個を出してくれます。
    ただ、リツイートのリツイート等も含まれるため「自分のオリジナルメッセージがリツイートされたかどうか」を知るのはちょっと難しいです。

以下のようにするとある程度フィルタできます。

results = api.retweets_of_me()
for res in results:
    print("text: {}".format(res.text[:20])) if not res.entities['urls'] and not res.entities['user_mentions'] else next
結果はこんな感じです。
text: 【失敗サイト録5】5. キリン()
text: 4年に一度しかないニンニクの日#閏日
text: どっちやねん https://t.co/
text: Windowsのgvimはモード毎に「英
text: マスクしないで咳するやつ降りろや電車
text: ネットワーク外部性って言葉があって
text: これめっちゃ美味しい!見かけたら買った方

もっとバズった例は無いの?

残念ながら、大量にリツイートされるとどうなるのかとかは経験がなくてわかりません。。。泣

リプライ・メンションのリストアップ

  • API名: API.mentions_timeline([since_id][, max_id][, count])
    先程のリツイートと同様ですね@でメンションされたメッセージリストがでます。
text: @heisakusaku ですねー歩き疲
text: @heisakusaku うふ(〃艸〃)
text: @heisakusaku 一度サイズ固定
text: @heisakusaku ありがとうござ
text: @heisakusaku テストrepl
text: @heisakusaku テストrepl
text: @heisakusaku へーさく兄やん
text: @heisakusaku へーさん、懺悔
text: @heisakusaku 共感ありがとう
text: @heisakusaku オモシロそうで

「テストrepl」でかさ増ししてるね!

リプライしてみる

  • API名: API.update_status(status[, in_reply_to_status_id][, auto_populate_reply_metadata][, exclude_reply_user_ids][, attachment_url][, media_ids][, possibly_sensitive][, lat][, long][, place_id][, display_coordinates][, trim_user][, enable_dmcommands][, fail_dmcommands][, card_uri])

リプライは普通にツイートする"update_status"にリプライ先のメッセージidをin_reply_to_status_idに入れて使います。
例えば、自分でメッセージをツイートして、そこにさらにリプライを重ねたりすることができます。

やってみましょう。

messages = ["テストfrom Twitter API","リプライ from Twitter API", "リプライのリプライ from Twitter API"]
my_status = api.update_status(messages.pop(0))
for mes in messages:
    my_status = api.update_status(mes,in_reply_to_status_id = my_status.id)

まとめ

本当は「自分のメッセージがRTされたのを発見」→「自動的にそれをリツイート」といったことをやりたかったのですが、RT検索結果が自分のオリジナルツイートかどうか知る方法が難しく、今の所そこまでの自動化はできていません。
ですが、シンプルな使い方だけでもいろいろなことに使えます。

  • フォロワー数を日々記録
  • RT数を記録したり
  • 予約投稿で複数メッセージをリプライでつなげて投稿

やってみてください。

enjoy!!

続きの記事:

og_title
【Twitter API】自己リツイートの自動化でフォロワー増【Python】 | enjoyall

投げ銭していただける場合は、amazonで15円からできます。宛先はheisakuあっとcomichi.comで。

マイナスは入れられないの?

comments powered by Disqus