ツイートの内容を取得しよう

所要時間:20分

次に、

  1. ツイッターのプロフィールのデータを取得する関数
  2. ツイッターの日付ごとの集計データを取得する関数
  3. リツイート数が多い順に並んだツイート一覧を取得する関数

を実装していきましょう。

ツイッターのプロフィールのデータを取得する関数

ツイッターのプロフィールのデータを取得する、get_profile関数を実装します。

def get_profile(screen_name):
   user = api.get_user(screen_name= screen_name)
   profile = {
       "id": user.id,
       "user_id": screen_name,
       "image": user.profile_image_url,
       "description": user.description
   }
   return profile

ツイッターの日付ごとの集計データを取得する関数

次に、日付ごとにいいね数とリツイート数が合計されているデータを集計する関数を実装していきましょう。

def get_grouped_df(tweets_df):
   grouped_df = tweets_df.groupby([tweets_df["created_at"].dt.date]).sum().sort_values(by="created_at", ascending=False)
   return grouped_df

リツイート数が多い順に並んだツイート一覧を取得する関数

最後に、リツイート数順にツイートが並んだ関数を実装していきましょう。

def get_sorted_df(tweets_df):
   sorted_df = tweets_df.sort_values(by="retweets", ascending=False)
   return sorted_df

動くか確認してみよう

最後に、これらの関数がうまく動くか確認してみましょう。

import tweepy
import os
from dotenv import load_dotenv
import pandas as pd

load_dotenv() 

CONSUMER_KEY = os.getenv("CONSUMER_KEY")
CONSUMER_SECRET = os.getenv("CONSUMER_SECRET")
ACCESS_TOKEN = os.getenv("ACCESS_TOKEN")
ACCESS_SECRET = os.getenv("ACCESS_SECRET")

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

api = tweepy.API(auth)

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"]) 
   return tweets_df

def get_profile(screen_name):
   user = api.get_user(screen_name= screen_name)
   profile = {
       "id": user.id,
       "user_id": screen_name,
       "image": user.profile_image_url,
       "description": user.description
   }
   return profile

def get_grouped_df(tweets_df):
   grouped_df = tweets_df.groupby([tweets_df["created_at"].dt.date]).sum().sort_values(by="created_at", ascending=False)
   return grouped_df

def get_sorted_df(tweets_df):
   sorted_df = tweets_df.sort_values(by="retweets", ascending=False)
   return sorted_df

get_tweets_df("manajob_jp")
grouped_df = get_grouped_df(tweets_df)
sorted_df = get_sorted_df(tweet_df)

# 動くか出力する
print (get_profile("manajob_jp"))
print (get_tweets_df("manajob_jp"))
print (get_sorted_df(tweet_df))

うまくいくと、それぞれの値が出力されます。

次に、これらのデータを利用して、HTMLにしていきましょう!