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 件のコメント:
コメントを投稿