tweepyを使ったtwitterデータ取得2



# twitterからデータ取得やってみる


## ■背景・目的
- 背景
    - 前回はストリームデータ取得して終わったので、今回は他のデータを取得してみる


- 目的
    - まずはtweepyで実装して、以下を明らかにしたい
        - twitterのAPIを使って取得したデータはどのような形式か
        - twitterのAPIを使って得られるデータはどのようなものがあるか←今ここ
        - API取得したデータの前処理方法
        - 加工データを使ったデータ分析







 
## ■コード
```python: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オブジェクトのメソッドを使えば、もっといろいろなことができそうなので、今後も実験する必要あり
 
## ■改善点


## ■参考
-  参考動画part2
    -  https://www.youtube.com/watch?v=rhBZqEWsZU4

- APIリファランス
    - https://kurozumi.github.io/tweepy/api.html#tweepy-api-twitter-api-wrapper