Tweepyメモ

#（１）準備
tweepyをpipでインストール
twitter apiを登録
python3を使用

#（２）単純にキーワード100件取得

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

#????には自身のコードを入力
#APIkey
CK="????????????????????"
#API key secret
CS="????????????????????"
#Access token
AT="????????????????????"
#Access token secret
AS="????????????????????"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)

#1ツイートずつループ
#Mリーグをキーワード、100記事取得
for status in api.search(q='#Mリーグ', count=100):
    #csv出力、timedeltaで日本時間に変更
    with open('test.csv','a',encoding='utf-8') as f:
        f.write('ツイートした時間:'+str(status.created_at + timedelta(hours=+9)) +'/'
        + 'ユーザー名:'+status.user.name + '/'
        + 'スクリーン名:'+status.user.screen_name + '/'
        + '本文:'+status.text
        +'\n'
        + '-'*100
        +'\n')
```

#（３）Cursorで500件取得
最大で200ツイートまでしか取得できないので
cursorを使う
以下の例はキーワードに'Mリーグ'として500件取得

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

#????には自身のコードを入力
#APIkey
CK="????????????????????"
#API key secret
CS="????????????????????"
#Access token
AT="????????????????????"
#Access token secret
AS="????????????????????"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)

#1ツイートずつループ
#Mリーグをキーワード、500記事取得
#enumerateを使ってインデックスも追加
for i,status in enumerate(tweepy.Cursor(api.search,q='#Mリーグ').items(500)):
    #csv出力、timedeltaで日本時間に変更
    with open('test2.csv','a',encoding='utf-8') as f:
        f.write(str(i) + '/' + 'ツイートした時間:'+str(status.created_at + timedelta(hours=+9)) +'/'
        + 'ユーザー名:'+status.user.name + '/'
        + 'スクリーン名:'+status.user.screen_name + '/'
        + '本文:'+status.text
        +'\n'
        + '-'*100
        +'\n')
```

#（４）期間指定、レート制限表示
キーワードを、"KONAMI麻雀格闘倶楽部"として、2020-10-10の日で取得する
一度に大量のツイートを取ってこようとすると、エラーが出てプログラムが途中で止まってしまう可能性があるので、APIのインスタンス生成時のコードを以下のようにすることで途中停止を回避することができる
期間指定は１週間前までしか取得できない

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

#????には自身のコードを入力
#APIkey
CK="????????????????????"
#API key secret
CS="????????????????????"
#Access token
AT="????????????????????"
#Access token secret
AS="????????????????????"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
# wait_on_rate_limit = レート制限が補充されるのを自動的に待つかどうか
# wait_on_rate_limit_notify = Tweepyがレート制限の補充を待っているときに通知を出力するかどうか
api = tweepy.API(auth,wait_on_rate_limit=True, wait_on_rate_limit_notify=True)


#sinceとunteilで時間指定
#item()で数指定なし
#enumerateを使ってインデックスも追加
for i,status in enumerate(tweepy.Cursor(api.search,q='KONAMI麻雀格闘倶楽部',since='2020-10-10_00:00:00_JST',until='2020-10-10_23:59:59_JST').items()):
    #csv出力、timedeltaで日本時間に変更
    with open('test4.csv','a',encoding='utf-8') as f:
        f.write(str(i) + '/' + 'ツイートした時間:'+str(status.created_at + timedelta(hours=+9)) +'/'
        + 'ユーザー名:'+status.user.name + '/'
        + 'スクリーン名:'+status.user.screen_name + '/'
        + '本文:'+status.text
        +'\n'
        + '-'*100
        +'\n')
```

#（５）ツイート数を集計
同じくキーワードを、"KONAMI麻雀格闘倶楽部"として、2020-10-10の日で全件取得する

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

#????には自身のコードを入力
#APIkey
CK="????????????????????"
#API key secret
CS="????????????????????"
#Access token
AT="????????????????????"
#Access token secret
AS="????????????????????"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
# wait_on_rate_limit = レート制限が補充されるのを自動的に待つかどうか
# wait_on_rate_limit_notify = Tweepyがレート制限の補充を待っているときに通知を出力するかどうか
api = tweepy.API(auth,wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

#sinceとunteilで時間指定
#item()で数指定なし
#enumerateを使ってインデックスも追加
count = 0
for i,status in enumerate(tweepy.Cursor(api.search,q='KONAMI麻雀格闘倶楽部',since='2020-10-10_00:00:00_JST',until='2020-10-10_23:59:59_JST').items()):
    count+=1

#csv出力、timedeltaで日本時間に変更
#ツイートしたカウントを保存
with open('test5.csv','a',encoding='utf-8') as f:
        f.write(str(count))
```

#（６）for文で指定した期間のツイート数を集計
同じくキーワードを、"KONAMI麻雀格闘倶楽部"として、今回は2020-10-10から、2020-10-14までのツイート数を取得する

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

#????には自身のコードを入力
#APIkey
CK="????????????????????"
#API key secret
CS="????????????????????"
#Access token
AT="????????????????????"
#Access token secret
AS="????????????????????"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
# wait_on_rate_limit = レート制限が補充されるのを自動的に待つかどうか
# wait_on_rate_limit_notify = Tweepyがレート制限の補充を待っているときに通知を出力するかどうか
api = tweepy.API(auth,wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

#rangeで指定した数だけ日にちを回す（range(5)なら、0,1,2,3,4）
for i in range(5):
    count = 0
    #日付を指定する（今回は2020-10-10から、2020-10-14まで）
    the_day = datetime(2020, 10, 10+i)
    #sinceとuntil用に加工する
    str_t1 = the_day.strftime('%Y-%m-%d')+'_00:00:00_JST'
    str_t2 = the_day.strftime('%Y-%m-%d')+'_23:59:59_JST'


    for status in tweepy.Cursor(api.search,q='KONAMI麻雀格闘倶楽部',since = str_t1,until = str_t2).items():
        count+=1


    #ツイートしたカウントを保存
    with open('data/test09.csv','a',encoding='utf-8') as f:
            f.write(the_day.strftime('%Y-%m-%d') + ',' + str(count) + '\n')

```

#（６）for文で指定した期間のツイート数を集計（遡り）
日にちを指定するのではなく、データを回す当日（本日）から遡って集計する場合は以下の通り

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

#????には自身のコードを入力
#APIkey
CK="????????????????????"
#API key secret
CS="????????????????????"
#Access token
AT="????????????????????"
#Access token secret
AS="????????????????????"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
# wait_on_rate_limit = レート制限が補充されるのを自動的に待つかどうか
# wait_on_rate_limit_notify = Tweepyがレート制限の補充を待っているときに通知を出力するかどうか
api = tweepy.API(auth,wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

#rangeで指定した数だけ日にちを回す（range(5)なら、0,1,2,3,4）
for i in range(5):
    count = 0
    #今日から遡って５日前までカウント
    the_today = datetime.today()
    the_beforeday = the_today - timedelta(days=i)
    #sinceとuntil用に加工する
    str_t1 = the_beforeday.strftime('%Y-%m-%d')+'_00:00:00_JST'
    str_t2 = the_beforeday.strftime('%Y-%m-%d')+'_23:59:59_JST'


    for status in tweepy.Cursor(api.search,q='KONAMI麻雀格闘倶楽部',since = str_t1,until = str_t2).items():
        count+=1


    #ツイートしたカウントを保存
    with open('data/test09.csv','a',encoding='utf-8') as f:
            f.write(the_day.strftime('%Y-%m-%d') + ',' + str(count) + '\n')

```