twitterからデータを取ってくる[python]

pythonを使ってtwitterからデータを取ってくる方法について書きたいと思います.

  • twitter開発者に登録
    まずtwitter developerに登録する登録する必要が有ります.また,twitterのアカウントに電話番号を紐付けてないと登録することができないので注意が必要です.
    登録するときはhttps://dev.twitter.com/にアクセスし下の方のTOOLSのManage Your Appsから登録します.
    また、keys and access tokesでaccess tokenを発行する必要があります。

  • tweepyのインストール tweepyさん優秀です。pipから簡単にインストールできます。
    pip install tweepy

  • コード 読み込んだデータをファイル出力してますが標準出力することも可能です

#! /usr/bin/env python
# -*- coding: utf-8 -*-


import tweepy
import json
import codecs
from datetime import datetime

"""
tweepyの詳細は
http://www.tweepy.org/
コードはgithubを参照
https://github.com/tweepy/tweepy/blob/v3.2.0/docs/index.rst
"""


#jsonのdatetimeエラー対策
def support_datetime_default(o):
    if isinstance(o, datetime):
        return o.isoformat()
    raise TypeError(repr(o) + " is not JSON serializable")


#キーワードに対してtweetを読み込む
def connect_tw():
    #CK,CS,AT,ASはtwitterの開発者コード
    CK = '' #Consumer Key
    CS = '' #Consumer Secret
    AT = '' #Access Token
    AS = '' #Accesss Token Secert
    
    #twitterにアクセスする処理
    auth = tweepy.OAuthHandler(CK, CS)
    auth.set_access_token(AT, AS)

    api = tweepy.API(auth)

    #keywordは任意
    keywords = u' テスト'
    #リストを用意する
    list = []
    #ツイートを取得しjson形式で書き込む
    for tweet in tweepy.Cursor(api.search, q=keywords).items(100):
        person = {
                u"user_id": tweet.user.id,
                u"screen_name": tweet.user.screen_name,
                u"description": tweet.user.description,
                u"created_at": tweet.created_at,
                u"text": tweet.text
        }
        list.append(person)
    return list

#json形式でファイルを作成する
def output_data(docs):
    
    d = datetime.now()
    filePath = datetime.strftime(d, "getTweet%Y-%m-%d-%H%M.json")
    f = codecs.open(filePath, 'w', 'utf-8')
    #収集されたデータをJSONファイルに格納する         
    json.dump(docs, f, default=support_datetime_default, indent=4, ensure_ascii=False)
    f.close()


def main():
    print 'get tweet'
    text = connect_tw()
    output_data(text)


if __name__ == "__main__":
    main()
  • 最後に tweepyさん優秀だけどstreamingAPI系が動かないので注意が必要です! streamingAPIについては後日書きたいと思います。