Raspberry PiとPython3でMongoDBを使うでRaspberry PiのPython3でMongoDBが使用できるようになったので、TwitterのStreaming APIでツイートをリアルタイムに収集して、MongoDBに格納してみる。
Raspbian StretchとPython3.5.3。
Streaming APIを利用するには以下4つのAPIキーとトークンが必要で、なければTwitterの開発者向けのページで申請しておく。
・Consumer Key (API Key)
・Consumer Secret (API Secret)
・Access Token
・Access Token Secret
MongoDBのインストールやPython3で使用するための準備はRaspberry PiとPython3でMongoDBを使うを参照。あとは、MongoDBのtestデータベースにツイートを格納するsampleコレクションを作成しておく。
Raspberry PiとPython3とTwitterでOCRボットを作ると同様にRequests-OAuthlibを使ってツイートを収集するので、pipでインストールしておく。
以下のPython3コードで「ラーメン」を含むツイートのデータを収集する。APIではJSONでデータを取得できるのでそのままMongoDBのコレクションに格納する。ただし、リツイートは収集しない。
上記コードを実行してしばらく待つ。
MongoDBに格納されたデータを確認する。ツイートはtextフィールドに格納されている。
環境
Raspbian StretchとPython3.5.3。
Twitter APIのキーとトークンの取得
Streaming APIを利用するには以下4つのAPIキーとトークンが必要で、なければTwitterの開発者向けのページで申請しておく。
・Consumer Key (API Key)
・Consumer Secret (API Secret)
・Access Token
・Access Token Secret
MongoDBの準備
MongoDBのインストールやPython3で使用するための準備はRaspberry PiとPython3でMongoDBを使うを参照。あとは、MongoDBのtestデータベースにツイートを格納するsampleコレクションを作成しておく。
ツイートのリアルタイム収集
Raspberry PiとPython3とTwitterでOCRボットを作ると同様にRequests-OAuthlibを使ってツイートを収集するので、pipでインストールしておく。
以下のPython3コードで「ラーメン」を含むツイートのデータを収集する。APIではJSONでデータを取得できるのでそのままMongoDBのコレクションに格納する。ただし、リツイートは収集しない。
import json
import re
from requests_oauthlib import OAuth1Session, OAuth1
from pymongo import MongoClient
# Twitter APIの認証情報
# Twitterの開発者向けのページで取得したキーとトークンを使う
CONSUMER_KEY = 'Consumer Key'
CONSUMER_SECRET = 'Consumer Secret'
ACCESS_TOKEN = 'Access Token'
ACCESS_TOKEN_SECRET = 'Access Token Secret'
# 認証情報の設定
tw = OAuth1Session(CONSUMER_KEY,
                client_secret=CONSUMER_SECRET,
                resource_owner_key=ACCESS_TOKEN,
                resource_owner_secret=ACCESS_TOKEN_SECRET)
def streaming():
    #Twitterデータのリアルタイム検索
    url = 'https://stream.twitter.com/1.1/statuses/filter.json'
    # 検索キーワード(ラーメン)の指定
    data={'track':'ラーメン'}
    # Streaming APIを使うときはオプションstream=Trueを指定
    r = tw.post(url, data=data, stream=True)
    # MongoDBに接続
    # localhostの27017ポート(デフォルト)に接続
    client = MongoClient('localhost', 27017)
    # testデータベース
    db = client.test
    # testデータベースのsampleコレクション
    col = db.sample
    for line in r.iter_lines():
        if line:
            status = json.loads(line.decode('utf-8'))
        else:
            continue
        # リツイートは収集しない
        pat = re.compile('\ART @.*? ')
        match = pat.match(status['text'])
        if match: continue
        # ツイートを表示
        print(status['text'] + '\n')
        # APIで取得したデータ(JSON)をそのままコレクションに格納
        col.insert(status)
if __name__ == '__main__':
    streaming()
上記コードを実行してしばらく待つ。
収集したデータの確認
MongoDBに格納されたデータを確認する。ツイートはtextフィールドに格納されている。
0 件のコメント:
コメントを投稿