[Python] tweepyを使ってみる (1)

Twitter APIs

Twitter APIを通してTwitterを利用することができます。

APIを利用するためには、まず、以下で開発者として登録を行います。

https://developer.twitter.com/en/apps

その後、”create an app”を行い、以下の4つのキーを取得します。

  • API_KEY
  • API_SECRET_KEY
  • ACCESS_TOKEN
  • ACCESS_TOKEN_SECRET

この4つのキーを用いることで、APIを利用することができます。

そもそもAPIとかOAuthって何?という場合は、以下の説明が大変分かりやすいです。

一番分かりやすい OAuth の説明

PythonでTwitter APIを使う

日本語でたくさんのやってみる系の記事があります。

スクラッチで頑張る

Twitter APIを使って自動でTweetする

oauth部分はライブラリを使う

Pythonでサクッと簡単にTwitterAPIを叩いてみる

APIラッパー

twitterAPIのpythonラッパーは他にもあると思いますが、ざっと見ると下の4つが良く使われるようです。

tweepy

twitter

python-twitter

twython

どの方法でやってみるか悩みますが、githubで一番☆の多いtweepyを使ってみます。

tweepy

公式は以下です。

Tweepy

tweepyを使って、トランプ大統領のtweetを取得してみます。

APIの認証情報を保存

APIの認証情報を保存します。

今回は’credentials_twitter.py’という名前で、以下のファイルを作成します。

# Twitter APIの認証情報.
API_KEY = 'xxxxxxxxxxxxxxx'
API_SECRET_KEY = 'xxxxxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxxxxxxxxx'
ACCESS_TOKEN_SECRET = 'xxxxxxxxxxxxxxx'

ここからは、インタラクティブモードで進めます。

まずは、tweepyと今作成した認証情報を読み込みます。

>>> import tweepy
>>> import credentials_twitter

OAuth認証

OAuth認証を行い、apiインスタンスを作成します。

>>> auth = tweepy.OAuthHandler(credentials_twitter.API_KEY, credentials_twitter.API_SECRET_KEY)
>>> auth.set_access_token(credentials_twitter.ACCESS_TOKEN, credentials_twitter.ACCESS_TOKEN_SECRET)
>>> api = tweepy.API(auth)

たったこれだけの操作で、apiインスタンスを通して、Twitterを操作することができるようになります。

Tweetsの取得

トランプ大統領の最近のtweetを2つ取得してみます。

>>> tweets  = api.user_timeline(screen_name='realDonaldTrump', count=2)
>>> tweets
[Status(_api=<:tweepy.api.API object at 0x000001AC976BD438>, _json={'created_at': 'Tue Jun 11 03:41:17 +0000 2019', 'id': 1138290077740740610, 
# 省略
 possibly_sensitive=False, lang='und')]

良く分からない情報がたくさん出力されました。

tweetはJSON形式で返ってきます。

まずは、API自身のドキュメントを参照して、大体どんな情報があるのか確認します。

Tweet objects

次に、pythonのオブジェクトとして、dirで属性を確認します。

dir([object])

>>> dir(tweets[0])
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_api', '_json', 'author', 'contributors', 'coordinates', 'created_at', 'destroy', 'entities', 'extended_entities', 'favorite', 'favorite_count', 'favorited', 'geo', 'id', 'id_str', 'in_reply_to_screen_name', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id_str', 'is_quote_status', 'lang', 'parse', 'parse_list', 'place', 'possibly_sensitive', 'retweet', 'retweet_count',
'retweeted', 'retweets', 'source', 'source_url', 'text', 'truncated', 'user']

上の属性を参考に、分かりやすそうな情報を引っ張ってみます。

>>> print(tweets[0].id)
1138290077740740610
>>> print(tweets[0].text)
#AmericaFIRST #MAGA�� https://t.co/Ae51wFELD0
>>> print(tweets[0].created_at)
2019-06-11 03:41:17
>>> print(tweets[0].source)
Twitter for iPhone
>>> print(tweets[0].retweet_count)
3624

CSVファイルに保存する

20個tweetを取得して、いくつかの項目をcsvファイルに保存します。

>>> tweets  = api.user_timeline(screen_name='realDonaldTrump', count=20)
>>> import csv
>>> with open('trump_tweets.csv', 'a') as f:
...     writer = csv.writer(f)
...     writer.writerow(['id', 'text', 'created_at', 'source', 'retweet_count'])
...     for tweet in tweets:
...         id = tweet.id
...         text = tweet.text.encode('utf-8')
...         created_at = tweet.created_at
...         source = tweet.source.encode('utf-8')
...         retweet_count = tweet.retweet_count
...         writer.writerow([id, text, created_at, source, retweet_count])
...
41
# 省略
226
>>>

無事にcsvファイルに取得した情報が保存できてます。

以下に続きます。

前回からの続きです。 tweepy を使ってtweetの取得ができるようになったので、取得したtweetをpandasデータフレームとしてまとめ、matplotlibを用いて視覚化することを行ってみます。 pandas pandasとは、pytho...