【コード公開】【Python】TwitterのStream APIにてデータ収集





汎用性の広いPythonを0から習得するためのフロー及び実際にPythonで開発を行い開発案件を獲得するまでの筋道について解説しているチュートリアル資料と

コーディングの参考となる実際にPythonを使って作ったツールのソースコードを無料で配布していますので、こちらも併せてご覧ください。

初心者・入門者でも30日間で学習できるおすすめPython学習方法

 

おすすめのPython学習サービスをまとめてみました。挫折することなく一直線にエンジニアを短期集中で目指している人はこちらから確認してください。 

【おすすめ】Python学習サイトPyQが初心者に選ばれる理由

プログラミングを学ぶ上で作りたいものがない人へ提案させてください

 

Twiiter Stream APIについて

REST APIについては仕事上で利用することは多いですが、Streaming APIを利用することは初めてなので少しワクワクしてます!

さて、Streaming APIはざっくり言うとある条件でヒットさせた場合に、通知を待っているクライアントに対してプッシュ通知を一斉配信する仕組みです。プッシュ通知とは、サーバで発生したイベントをキッカケとして、クライアントからの要求なしに情報を送信することができる技術のことです。

 

Twitterでは以下のStreaming APIが用意されています。

● Public streams
Twitter上で流れる公開データのストリームのこと。特定のユーザやトピックをフォローしたり、データマイニングに適しています。

● User streams
ユーザ1人のストリームのこと。Twitterのシングルユーザビューで参照できるほぼ全てのデータを網羅する。

● Sites streams
ユーザストリームのマルチユーザ版。サイトストリームは、多くのユーザに代わってTwitterに接続しなければならないサーバを対象としている。

 

ぶっちゃけ記載していてうまく理解できていない私がいますが、そこは利用時にしっかり調査すればよし!!

と言うことで、今回はPublic streamsであるAPIを利用します。

 

2. プログラムの概要

 

今回のプログラムの流れです。

1. 必要なモジュールをインポート
2. Twitter APIを実行するために必要な変数用意
3. StreamListenerを継承するクラスを作成
4. Twitterオブジェクトの生成
5. Listenerクラスのインスタンス生成
6. 指定の検索ワードをフィルタして受信開始

 

上記の流れでプログラムを作成していきます。

 

必要なモジュールをインポート

 

import tweepy
from datetime import timedelta

 

1では、tweepyとtimedeltaをインポートします。timedeltaはツイートの時間を日本時間に直すために利用します。

 

Twitter APIを実行するために必要な変数用意

 

CK = 'xxxx' # Consumer Key
CS = 'xxxx' # Consumer Secret
AT = 'xxxx' # Access Token
AS = 'xxxx' # Accesss Token Secert

 

各種キーの値は、作成したtwitter開発者ページから取得したキーを代入します。
参考ページ:【Python】twitter APIを使用するための各種キーを取得する手順

 

StreamListenerを継承するクラスを作成

 

# StreamListenerを継承するクラスListener作成
class Listener(tweepy.StreamListener):
    def on_status(self, status):
        status.created_at += timedelta(hours=9)#世界標準時から日本時間に

        print('------------------------------')
        print(status.text)
        print("{name}({screen}) {created} via {src}\n".format(
                                                               name=status.author.name, screen=status.author.screen_name,
                                                               created=status.created_at, src=status.source))
        return True

    def on_error(self, status_code):
        print('エラー発生: ' + str(status_code))
        return True

    def on_timeout(self):
        print('Timeout...')
        return True

 

3では、StreamListenerを継承するクラスListenerを作成します。

 

Twitterオブジェクトの生成

 

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

 

4では、OAuthHandlerインスタンス(auth)に、”Consumer Key”, “Consumer Secret”をセットします。
セットが終わったあとは、auth.set_access_tokenに、”Access Token”, “Accesss Token Secert”をセットします。

 

Listenerクラスのインスタンス生成

 

 # Listenerクラスのインスタンス
listener = Listener()

 

5では、listener変数にてListenerクラスのインスタンスを生成します。

 

指定の検索ワードをフィルタして受信開始

 

# 受信開始
stream = tweepy.Stream(auth, listener)
stream.filter(track = ["プログラミング"])# 指定の検索ワードでフィルタ

 

6では、ようやく受信開始となりますが、stream.filterを利用して、任意の単語を含む全てのツイートをストリーミングします。
trackパラメータは、ストリームする検索語の配列です。

 

★twitter-stream1.py★

 

# twitter-stream1.py
import tweepy
from datetime import timedelta

CK = 'xxxx' # Consumer Key
CS = 'xxxx' # Consumer Secret
AT = 'xxxx' # Access Token
AS = 'xxxx' # Accesss Token Secert

 # StreamListenerを継承するクラスListener作成
class Listener(tweepy.StreamListener):
    def on_status(self, status):
        status.created_at += timedelta(hours=9)#世界標準時から日本時間に

        print('------------------------------')
        print(status.text)
        print("{name}({screen}) {created} via {src}\n".format(
                                                               name=status.author.name, screen=status.author.screen_name,
                                                               created=status.created_at, src=status.source))
        return True

    def on_error(self, status_code):
        print('エラー発生: ' + str(status_code))
        return True

    def on_timeout(self):
        print('Timeout...')
        return True

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

 # Listenerクラスのインスタンス
listener = Listener()
# 受信開始
stream = tweepy.Stream(auth, listener)
stream.filter(track = ["プログラミング"])# 指定の検索ワードでフィルタ

 

★出力結果★

 

みなさんも気になるワードでツイッターを分析してみてはいかがですか?^^

それでは!!

 

機械学習や分析の分野に興味があり、pythonを学びたいと思っている方は是非こちらもどうぞ↓

誰でも30日間で習得出来るpython学習法



ABOUTこの記事をかいた人

sugi

大学卒業後、IT企業に就職を果たす。システム開発・人工知能に触れながら大手企業と業務をこなす。2年半後脱サラし、現在フリーランス活動中。 2019年2月から起業する予定。 自社サービス及び製品を開発し、売り上げを立てている。