どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

PythonでTwitterのタイムラインを取得する

 

本記事ではPythonTwitter APIのライブラリTweepyを使って、自分のタイムラインと指定したユーザーのタイムラインの取得方法について書いていきます。

本記事では以下のことをやっています。

  • タイムラインの取得方法
  • 取得したタイムラインの中身を取り出す
  • 取得件数を指定する

 

 

環境準備

Tweepyを利用してTwitterのタイムラインを取得するためには、TweepyのインストールとTwitterにDeveloper登録の申請をする必要があります。

もうやったよ、という方はここは読み飛ばしてください。

Tweepyはpipでインストールできます。

pip install tweepy

 

Developer登録は下の記事を参考にしてみてください。

www.pytry3g.com

基本的な使い方

まずはタイムラインの取得について、基本的な使い方です。

import tweepy

# 認証キーの設定
consumer_key = "API key"
consumer_secret = "API secret key"
access_token = "Access token"
access_token_secret = "Access token secret"

# OAuth認証
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# APIのインスタンスを生成
api = tweepy.API(auth)

# ここにやりたいこと書く、今回だとタイムラインの取得について

上のプログラムでは、Twitter APIを利用するためにOAuth認証し、APIに接続するコードです。コメントに書いてある通り、今回は一番下の行以降にタイムラインを取得するコードを書いていきます。

タイムラインは自分自身のアカウントと指定したユーザーのものを取得することができます。どちらもデフォルトで最新のツイートから20件まで取得することができます。

自分自身のアカウントのタイムライン(※Developer登録で使用したアカウント)を取得するにはhome_timeline()を使います。参考リンク

status_list = api.home_timeline()

 

指定したユーザーのタイムラインを取得するには、ユーザーのスクリーンネームuser_timeline()に渡します。参考リンク

# @はあってもいいし、無くても大丈夫
# api.user_timeline(screen_name="@pytry3g")
status_list = api.user_timeline(screen_name="pytry3g")

取得したタイムラインstatus_listはStatusオブジェクトが入ったリストになっています。

デフォルトでは20件までしか取得することができません。もっと多くのツイートを取得したい場合は、引数のcountで取得件数を指定することができます。

# user_timeline()でもcountの設定は可能
status_list = api.home_timeline(count=100)

上の例では、ツイートの取得件数を100に設定しています。ただし、countで指定できる取得件数は最大で200です。

さらに多くのツイートを取得したい場合は、Cursorを使う方法があります。Cursorについては、本記事の後半に書いてあります。

 

ちなみに、user_timeline()に自分自身のアカウントを指定してタイムラインを取得することはできますが、home_timeline()を使って取得できる内容とは異なります。

home_timeline()では、自分が投稿したツイートだけではなく、フォローしているユーザーのツイートも取得します。一方で、user_timeline()では、自分が投稿したツイート(例:リプライ、リツイートとか)だけを取得し、自身がフォローしているユーザーのツイートは取得しません。

取得したタイムラインの中身を見る

ここからは取得したタイムラインの中身の見方について書いてみます。

取得したタイムラインはリストの形式になっているので、for文で一つずつツイートを取り出して中身を見てみましょう。

from datetime import timedelta # 日本時間に直すために使う

for status in api.home_timeline():
    print("ツイートのID\t", status.id)
    print("ツイートした時間\t", status.created_at + timedelta(hours=+9))
    print("ツイート本文\t", status.text)
    print("ユーザ名\t", status.user.name)
    print("スクリーンネーム\t", status.user.screen_name)
    print("フォロー数\t", status.user.friends_count)
    print("フォロワー数\t", status.user.followers_count)
    print("概要(自己紹介が書かれているやつ)\t", status.user.description)
    print("-"*30)

とりあえず、よく使いそうな情報だけを取り出してみました。ツイートの情報はStatusオブジェクト、ツイートをしたユーザーに関する情報はStatusオブジェクトのuserから見ることができます。

ツイートの情報は他にも色々あるので、もっと詳しく知りたい方はこちらを参考にしてみてください。

Cursorを使って大量のツイートを取得する

countだと、最大200件のツイートしか取得できませんでしたが、Cursorを使うことにより、約3200件のツイートを取得することが可能になります。参考リンク

使い方は簡単で、Cursorにタイムラインを取得するメソッドを渡して、items()に取得件数を指定するだけです。もし、取得件数を指定しなければ、最大で3200件前後のツイートを取得することができます。

# enumerateを使っているのは、取得件数の確認のためです。
for i, status in enumerate(tweepy.Cursor(api.user_timeline, screen_name="pytry3g").items(500)):
    print("#{}:({}) {}".format(i+1, status.id, status.text))
    print('-'*30)

このサンプルプログラムでは取得件数を500に指定しています。

指定しない場合は下のようになります。

# enumerateを使っているのは、取得件数の確認のためです。
for i, status in enumerate(tweepy.Cursor(api.user_timeline, screen_name="pytry3g").items()):
    print("#{}:({}) {}".format(i+1, status.id, status.text))
    print('-'*30)

一度に大量のツイートを取ってこようとすると、エラーが出てプログラムが途中で止まってしまう可能性があるので、APIインスタンス生成時のコードを以下のようにすることで途中停止を回避することができます。

api = tweepy.API(
    auth,
    wait_on_rate_limit=True,
    wait_on_rate_limit_notify=True
)

Twitter APIの使い方をまとめた記事

タイムラインの取得方法だけではなく、他の使い方について書いた記事です。

www.pytry3g.com