IBM cloudのpersonality insightを使ってみたい、と思いすぐにぶつかった壁。
その際の備忘録。
###困ったこと
3000語以上の文章が必要(というか望ましい)とのこと。
そこでtwitterさんから有名人のtweetを拝借する。
1tweetあたり約15単語程度あるとみなし、1名あたり200tweet取得する。
ただし、大前提としてtwitter APIの登録をしておく必要がある。
私は以前に登録申請済みなので、ここでは同手順は省略する。
###実装方法
# -*- coding:utf-8 -*-
###
import tweepy
import re
import subprocess
# ユーザリスト
import user_list
# twitter APIの認証キー
# Access_token, Access_secret, Consumer_key, Consumer_secretの4つ
from auth import twitter_credentials as tc
###
def get_twitterdata(username, rfile):
# 認証キー読み込み、API設定
auth = tweepy.OAuthHandler(tc.Consumer_key, tc.Consumer_secret)
auth.set_access_token(tc.Access_token, tc.Access_secret)
api = tweepy.API(auth, wait_on_rate_limit = True)
# tweetを格納するリスト
tweets_data =[]
# 200tweetまでデータ取得
for tweet in api.user_timeline(screen_name=username, count=200):
# つぶやきテキストを取得
tmp_text=tweet.text
# 連続改行は1つに集約
tmp_text=re.sub('\n+','\n',tmp_text)
# tweetをリストへ追加
tweets_data.append(tmp_text + '\n')
# ファイル出力
with open(rfile, "w",encoding="utf-8") as wf:
wf.writelines(tweets_data)
###
if __name__ == '__main__':
# twitterのユーザ名を取得
userlist=user_list.username
for i in range(0,len(userlist)):
username = userlist[i]
rfile = "./data/tweet_"+str(i).zfill(3)+".csv"
try:
get_twitterdata(username, rfile)
# プライベート設定されているなど、取得できない場合は空ファイルを生成
except:
subprocess.run(["touch",rfile])
###ユーザリストの例
バレバレだけど、人名は伏せる。
username=[
"ariyoshihiroiki",
"matsu_bouzu",
"takapon_jp"
]
###結果
記述内容は著作権にかかるかもしれないので割愛
tweet_000.csv
tweet_001.csv
tweet_002.csv
ができる。
###あとがき
15分ごと(?)に取得できるデータ量は制限されているため、欲張るとかなり待たされる。
リツイートなど、本人の文章ではないものも取得してしまうので、除外してしまってもよいかも。