ツイート一覧を取得しよう

所要時間:20分

次に、ツイッターIDを入れると、そのIDのツイートを取得できるようにコードを実装していきましょう。

pandasのインストール

データを表形式で扱うために、pandasというライブラリを利用します。

まずは、ライブラリをインストールします。

pip install pandas

インストールしたら、twitter.pyで、ファイルをインポートしましょう。

ツイートの取得

さて、さっそくツイートを取得する関数を実装します。

ツイッターID(screen_name)を入れると、Pandasのデータフレーム形式でツイート一覧が取得できるような関数を実装します。

最終的には、以下のようなコードになります。

def get_tweets_df(user_id):
   columns = [
      "tweet_id",
      "created_at",
      "text",
      "fav",
      "retweets"
      ]
   tweets_df = pd.DataFrame(columns=columns) #1
   for tweet in tweepy.Cursor(api.user_timeline,screen_name = user_id, exclude_replies = True).items(): #2
       try:
           if not "RT @" in tweet.text: #3
               se = pd.Series([ #4
                       tweet.id,
                       tweet.created_at,
                       tweet.text.replace('\n',''),
                       tweet.favorite_count,
                       tweet.retweet_count
                   ]
                   ,columns
                   )
               tweets_df = tweets_df.append(se,ignore_index=True) #5
       except Exception as e:
           print (e)
   tweets_df["created_at"] = pd.to_datetime(tweets_df["created_at"]) #6
   return tweets_df

関数の定義

まず、関数の定義を行います。

def get_tweets_df(screen_name):
   return True

テーブルの定義

次に、Pandasで列を定義します。

取得するデータは、以下のようになります。

列名 概要
tweet_id ツイートのID 2840859504
created_at ツイート作成日 2019-02-01
text ツイート内容 スタバなう
fav いいね数 10
retweets リツイート数 10

まず、配列に列名を指定し、pandasのデータフレームメソッドでデータフレームを作成します。

def get_tweets_df(screen_name):
   columns = [ #列名を定義
      "tweet_id",
      "created_at",
      "text",
      "fav",
      "retweets"
      ]
   tweets_df = pd.DataFrame(columns=columns) #データフレームの作成
   return True

ツイッター検索

Twitter APIから、ユーザータイムラインを検索します。取得したツイートをfor文で回して、一つ一つ取り出していきます。

def get_tweets_df(screen_name):
   columns = [
      "tweet_id",
      "created_at",
      "text",
      "fav",
      "retweets"
      ]
   tweets_df = pd.DataFrame(columns=columns) 
   for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items(): #ツイッター検索
   return True

取得したデータを行(Series)に追加して、データフレームに代入

以下の部分で、取得したツイートの値をSeriesに追加し、さらにデータフレームにSeriesを追加します。

def get_tweets_df(screen_name):
   columns = [
      "tweet_id",
      "created_at",
      "text",
      "fav",
      "retweets"
      ]
   tweets_df = pd.DataFrame(columns=columns) 
   for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items(): 
       try:
           if not "RT @" in tweet.text: #リツイートは覗く
               se = pd.Series([ #APIから取得した値を列名に入れる
                       tweet.id,
                       tweet.created_at,
                       tweet.text.replace('\n',''), #改行を削除する
                       tweet.favorite_count,
                       tweet.retweet_count
                   ]
                   ,columns #列名を指定
                   )
               tweets_df = tweets_df.append(se,ignore_index=True) #データフレームに行を追加
       except Exception as e:
           print (e)
   return True

 

日付をdatetime型に変換し、データフレームをリターン

取得したツイートの日時を、datetime型に変換します。

これを行わないと、のちほどデータの集計ができません。

さっそく書いていきます。

def get_tweets_df(screen_name):
   columns = [
      "tweet_id",
      "created_at",
      "text",
      "fav",
      "retweets"
      ]
   tweets_df = pd.DataFrame(columns=columns)
   for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items(): 
       try:
           if not "RT @" in tweet.text: 
               se = pd.Series([ 
                       tweet.id,
                       tweet.created_at,
                       tweet.text.replace('\n',''),
                       tweet.favorite_count,
                       tweet.retweet_count
                   ]
                   ,columns
                   )
               tweets_df = tweets_df.append(se,ignore_index=True) 
       except Exception as e:
           print (e)
   tweets_df["created_at"] = pd.to_datetime(tweets_df["created_at"]) # datetime型に変換
   return tweets_df #データフレームをreturnする

動作するか確認

実際に動くかどうか、以下のようにコードを書いてみましょう。

def get_tweets_df(screen_name):
   columns = [
      "tweet_id",
      "created_at",
      "text",
      "fav",
      "retweets"
      ]
   tweets_df = pd.DataFrame(columns=columns)
   for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items(): 
       try:
           if not "RT @" in tweet.text: 
               se = pd.Series([ 
                       tweet.id,
                       tweet.created_at,
                       tweet.text.replace('\n',''),
                       tweet.favorite_count,
                       tweet.retweet_count
                   ]
                   ,columns
                   )
               tweets_df = tweets_df.append(se,ignore_index=True) 
       except Exception as e:
           print (e)
   tweets_df["created_at"] = pd.to_datetime(tweets_df["created_at"]) # datetime型に変換
   return tweets_df #データフレームをreturnする

print (get_tweets_df("manajob_jp"))

実行すると、ユーザーの過去ツイートが取得できるはずです。

次に、これらのツイートのデータを集計して、

  • 日付ごとにいいね数とリツイート数を合計する
  • リツイート数が多いもの順からソートする

といった関数を実装していきましょう。