twitterからデータ取得やってみる
■背景・目的
-
背景
- 前回はストリームデータ取得して終わったので、今回は他のデータを取得してみる
-
目的
- まずはtweepyで実装して、以下を明らかにしたい
- twitterのAPIを使って取得したデータはどのような形式か
- twitterのAPIを使って得られるデータはどのようなものがあるか←今ここ
- API取得したデータの前処理方法
- 加工データを使ったデータ分析
- まずはtweepyで実装して、以下を明らかにしたい
■コード
twitter_api2
from tweepy import API
from tweepy import Cursor
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import get_data.twitter_credentials as credentials
#ツイッタークライアント
class TwitterClient():
def __init__(self,twitter_user=None):
#認証
self.auth=TwitterAuthenticator().authenticate_twitter_app()
#APIクライアント これが重要
self.twitter_client=API(self.auth)
#ユーザの指定
self.twitter_user=twitter_user
def get_user_timeline_tweets(self,num_tweets):
tweets=[]
#APIクライアントのユーザタイムラインをcursorオブジェクトにして、ページネーション処理
for tweet in Cursor(self.twitter_client.user_timeline,id=self.twitter_user).items(num_tweets):
tweets.append(tweet)
return tweets
def get_friend_list(self,num_friends):
friend_list=[]
for friend in Cursor(self.twitter_client.friends,id=self.twitter_user).items(num_friends):
friend_list.append(friend)
return friend_list
def get_home_timeline_tweets(self,num_tweets):
home_timeline_tweets=[]
for tweet in Cursor(self.twitter_client.home_timeline,id=self.twitter_user).items(num_tweets):
home_timeline_tweets.append(tweet)
return home_timeline_tweets
#ツイッター認証
class TwitterAuthenticator():
def authenticate_twitter_app(self):
auth=OAuthHandler(credentials.consumer_key,credentials.consumer_secret)
auth.set_access_token(credentials.Access_token,credentials.Access_secret)
return auth
#ツイッターストリーミング
class TwitterStreamer():
def __init__(self):
self.twitter_authenticator=TwitterAuthenticator()
def stream_tweets(self,fetched_tweets_filename,hash_tag_list):
listener=TwitterListener(fetched_tweets_filename)
auth=self.twitter_authenticator.authenticate_twitter_app()
stream=Stream(auth,listener)
stream.filter(track=hash_tag_list)
#ツイッターリスナー
class TwitterListener(StreamListener):
def __init__(self,fetched_tweets_filename):
self.fetched_tweet_filename=fetched_tweets_filename
def on_data(self, raw_data):
try:
print(data)
with open(self.fetched_tweet_filename,'a') as tf:
tf.write(data)
return True
except BaseException as e:
print("Error on_data %s" % str(e))
return True
def on_error(self, status):
if status==420:
return False
print(status)
if __name__ == '__main__':
twitter_client=TwitterClient('realDonaldTrump')
print(twitter_client.get_user_timeline_tweets(1))
print(twitter_client.get_home_timeline_tweets(10))
print(twitter_client.get_friend_list(10))
# APIオブジェクトの他メソッドを使いたい場合→https://kurozumi.github.io/tweepy/api.html#tweepy-api-twitter-api-wrapper
■わかったこと
-s APIオブジェクトの機能を使うと、友達リストやホームタイームラインのツイート、特定ユーザのタイムラインツイートなど取得できる
-k Cursorオブジェクトを使うと、ページネーションを効率よく処理できる
■疑問、課題点
- APIオブジェクトのメソッドを使えば、もっといろいろなことができそうなので、今後も実験する必要あり