TwitterAPI で取得したツイートを MongoDB に保存する(Windows、pythonで)

以前に書いた、こちらの記事 「TwitterAPI でツイートを大量に取得」 で、ツイートを取得するプログラムを作ってみました。この時は、取得したツイートを print して終わりだったのですが、せっかくなので保存することを考えてみます。

保存先は MongoDB です。スキーマの定義が不要で楽そうだし、キー・バリュー形式でデータ保存するので TwitterAPI との相性もよさそうだからです。

- 目次 -

スポンサーリンク

MongoDB 環境づくり

インストール

インストールはいたって簡単でした。

  • MongoDB のサイト から下記インストーラー(時点で最新)をダウンロード
    mongodb-win32-x86_64-2008plus-ssl-3.2.6-signed.msi
  • ② インストール (デフォルトのままで OK)
  • ③ データ用、ログ用のディレクトリを作成 (どこでもいいし、名前も任意)
       たとえば
        データ用 E:\MongoDB\data
        ログ用  E:\MongoDB\log

起動確認

インストール先ディレクトリへ移動し、

起動。–dbpath にデータ用ディレクトリ、–logpath にログ用ディレクトリ\ログファイル名

Mongoシェル

Mongoシェル は対話型のクライアントで、コマンドベースで MongoDB を操作できます。Oracle にとっての SQL*Plus みたいなものです。

起動は、インストール先ディレクトリへ移動し

と入力するだけです。

バッチファイル

MongoDB をサービスとして登録可能なようですが、たまに使いたいだけなので、それはちょっと大げさ。バッチファイルを作成することにしました。

MongoDB 起動用

Mongoシェル 起動用

pymongo

python から MongoDB を操作するためにパッケージ pymongo を使います。インストールは



これで環境まわりは OK。

ツイート保存

ツイート取得機能は 「TwitterAPI でツイートを大量に取得」 で作成済みなので、それをそのまま利用します。(以降のサンプルでは http://ailaby.com/twitter_api/#id6_1 のソースを twitterAPI.py として保存して使用)

MongoDB に保存

以下のプログラムで、”渋谷” を含むツイートを 50,000 件取得し MongoDB に保存します。DB名、コレクション名は

  • DB名 : mydb
  • コレクション名 : shibuya

にしました。ちなみに “コレクション” というのは RDB の “テーブル” に相当します。

tweet をそのまま insert してもいいのですが、TwitterAPI のレスポンスには結構いろいろな付加情報がのっており、その分サイズも大きいので、ここでは欲しい項目だけ tweet2 に移しかえて保存しています。トータルの実行時間は一時間強でした。

MongoDB から読み込み

書き込んだツイートを読みだします。

Mongo シェルで確認

保存した内容は Mongo シェルでも確認できます。

MongoDB 終了

Mongoシェルの終了は

MongoDB の終了は ctrl-C です(データ書き込み中だとこわい。正しい落とし方が他にあるのかも)。

スポンサーリンク
その他の記事
  1. python勉強中。初心者です。
    「TwitterAPI でツイートを大量に取得」に記載されている「ソース」をコピペして、TweetsGetter.pyというpythonファイル名でセーブしました。次に、「MongoDB に保存」に記載されているコードをコピペして、getTweets_saveMongo.pyというファイル名でTweetsGetter.pyと同じディレクトリにセーブして、getTweets_saveMongo.py実行させたところ、以下のエラーとなります。
    修正方法をご教示願います。

    >python getTweets_saveMongo.py
    Traceback (most recent call last):
    File "getTweets_saveMongo.py", line8, in
    from twitterAPI import TweetsGetter
    ModuleNotFoundError: No module named 'twitterAPI'

  2. 自己解決しました。TweetsGetter.pyというpythonファイル名でセーブするのではなく、twitterAPI.pyでセーブし直したら解決しました。お騒がせしました。

  3. 管理人様、いつも参考にさせていただいております。
    大量にツイートをmongoDBに保存しようとこちらを参考に実行したところ、最初のツイート取得は問題なく行えました。しかし取得上限に達しリセットされるまで待機状態になると復活せず、
    TimeoutError: [WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しな かったため、確立された接続は失敗しました。
    というメッセージが出てきます。
    別のPCで行ったところ問題なく実行されるのですが、この場合何が原因かわかりますでしょうか。

a.okuya へ返信する コメントをキャンセル