風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

【librtrt】Twitterで公式RT直後の発言を取得するためのPythonモジュールを試作

GitHub

【librtrt】Twitterで公式RT直後の発言を取得するためのPythonモジュール

勢いで GitHub に登録してみたはいいものの、使い方がよくわからない…教えて偉い人。

使い方

準備
  1. Python で PyYAML と tweepy を easy_install や pip 等でインストールしておく。
  2. config.yaml.sample を参考に、config.yaml というTwitter認証情報ファイルを作成して自分の認証情報(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)を保存し、__init__.py・AppAuthHandler.py・librtrt.py と同じディレクトリ上に配置。
使用例

■特にオプションを使用しない場合

from librtrt import Rtrt # librtrtのRtrt classをインポート
rtrt = Rtrt() # オブジェクト作成
rtrt_info_list = rtrt.get_rtrt() # 自分のツイートを公式RTした人のRT直後の発言を取得
rtrt.json_write() # JSON 形式でファイルに出力

のようにすると、

[
    {
        "rted_status": {
            "text": "@tari_tipa リツイート通知等から、RTしたユーザの前後のタイムラインを表示する機能を追加してみましたので、よろしければお試しください。\nhttp://t.co/bePuac5fnt\nかなり無理やりなので、精度は悪いですが…。", 
            "created_at": "2014-03-29 05:27:15", 
            "retweet_count": 1, 
            "id": "449779799842488321", 
            "user": {
                "protected": false, 
                "screen_name": "furyutei", 
                "profile_image_url": "http://pbs.twimg.com/profile_images/318199851/kaze2_normal.png", 
                "id": "46094747"
            }
        }, 
        "rtrts": [
            {
                "text": "自分の意見が反映されたよ!わいわい記念。 / 【近傍ツイート検索】リツイート通知などの近傍を表示する機能追加(ver.0.01b) - 風柳メモ http://t.co/loY0pLhuIp", 
                "created_at": "2014-03-29 12:05:06", 
                "retweet_count": 1, 
                "id": "449879923591639040", 
                "user": {
                    "protected": false, 
                    "screen_name": "tari_tipa", 
                    "profile_image_url": "http://pbs.twimg.com/profile_images/448123752262287360/yC10negM_normal.png", 
                    "id": "131547676"
                }
            }
        ]
    }, 
:(中略)
]

のような感じで、「最近RTされた自分のツイート(デフォルト5件まで)」の、「RTした人(デフォルト5人まで)のRT直後のツイート」が取得できる。


■Twitter認証情報の切り替え(オブジェクト作成時)

rtrt = Rtrt(config='another-config.yaml') # 別の認証情報ファイルを読み込み
rtrt = Rtrt(consumer_key='xxx', consumer_secret='xxx', access_token='xxx', access_token_secret='xxx') # 認証情報直接指定
rtrt = Rtrt(use_aauth=True) # Application-only authentication 有効化
# 有効にすると、OAuth 以外でも可能な動作には Application-only authentication を優先して使用

OAuthとApplication-only authenticationとでは、API制限に差がある


■RT直後の発言収集時(Rtrt#get_rtrt())

rtrt_info_list = rtrt.get_rtrt(retweeted_ids=['xxx','yyy',]) # 指定したIDのツイートを公式RTした人のRT直後の発言を取得
# 「最近RTされた自分のツイート」の代わりに、「retweeted_ids で指定したツイート(複数化)」の「RTした人の直後のツイート」を取得
rtrt_info_list = rtrt.get_rtrt(retweet_user_names=['mmm','nnn',]) # RTした人のうちで、指定したユーザ(screen_name)名のみに絞って抽出
rtrt_info_list = rtrt.get_rtrt(use_timeline=False, use_search=True)
# 「RTした人の直後のツイート」取得に、"statuses/user_timeline" の代わりに"search/tweets"を使用

statuses/user_timelineは最大3200件までしか遡れず、かつ、タイムスタンプで絞り込めないため、これを補う目的でsearch/tweetsも使えるようにしてある。ただし、どうも後者の精度は(Web版Twitterの検索と比べても)すこぶる悪いようで、今の所は使用に耐えない。

経緯

【近傍ツイート検索】特定ツイート前後のタイムラインを表示するユーザースクリプト試作 - 風柳メモ

を作っていた時に、かつてあった RtRT - (Find the) Reference to ReTweet - というサービス

RtRTは、自分の発言を公式RTした人が直後にどんな発言をしているかが分かるサービスです

http://pori.island.ac/php/rtrt/about.php

が、いまは動作していないらしいと目にして残念に思っていたところ、その作者のS治 えすじさん( id:esuji5 / @ )が、

RtRTはAPI廃止でダメになった→すまん、ありゃウソだった - esuji5's diary

という記事を書かれていたので興味をひかれ、これを参考にPythonモジュールを試作してみた。


それと、tweepy にて Application-only authentication を使用するために、

tweepyでApplication-only authenticationしてみた - Shogo's Blog

の記事内のソースをほぼそのまま使わせていただいた(AppAuthHandler.py)。

独り言

モジュールを作ってみたはいいものの、

  • API制限はやはりきつい。
  • 現状では statuses/user_timeline を使うしかなく、動作が重い上に遡れる件数に限りがある(search/tweets がもう少し使い物になればよいのに…)。
  • リツイートした人は最新の100人までしかわからないので、大量にRTされていた場合はどうしても早い段階でRTした人が埋もれてしまう。

ということで、あまり実用的でない気がする。
「自分のツイートがRTされた場合にすぐに見に行って、結果を保存する」という使い方くらいか?
もっと効率のよいやり方やおもしろい利用方法等あったら教えて欲しい。