WSL（bash）にツイートデータを取得・格納・分析できる環境を構築してみた

###背景
Windows環境において、**ツイートデータを取得・格納・分析するための環境** を構築したので、備忘録として整理しました。とくに、**分析においては、手軽にファイル操作**（grep、sed、awk、pythonなどを用いての）をしたかったので、[WSL（Windows Subsystem for Linux）](https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux)を有効にして、**bash(ubuntu)** を導入しました。

###１．手順概要

- 一連の環境は、**WSL1 のbash上で実現** することにしました。
- WSLに関しては、[Windows Subsystem for Linux (WSL1) をインストールしてみよう！](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)を参考にして導入しました。
- 今回、ファイル操作において、MongoDBも利用したかったので、WSL1 上においてMongoDBの利用実績のある、**ubuntu 18.04** でのbashを構築しました。

###２．詳細手順
#### python関連
pythonそのものついては、ubuntuを導入した際に、導入されていたので、改めて導入は不要。

- パッケージ導入用の**pip3**を導入

```
sudo apt install python3-pip
```
- pythonから **sqlite3をアクセス** できるようにする

```
pip3 install pysqlite3 
```
- **unicodecsv** をつかえるようにする

```
pip3 install unicodecsv 
```
- pythonからMongoDB操作のためのツール：**mongo_dao** の導入は、[odicchi/tweet_learning](https://github.com/odicchi/tweet_learning) から取得

- さらに、**pymongo** も必要となり以下のコマンドで導入

```
pip3 install pymongo
```
- また、python からツイートデータ操作にために便利な **tweepy** を導入

```
pip3 install tweepy
```
 
- さらに、Twitter API を操作するための認証関連を簡単に実現するために、**OAuth関連のパッケージ** 導入
 
```
pip3 install requests requests_oauthlib
```
#### データ格納関連
- **MongoDB** の導入は、[Windows Subsystem for Linux でデータベースを使ってみる](https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-database) を参考に、以下のコマンド発行して導入。データベースの起動・停止方法なども、参考先を活用。

```
sudo apt-get install mongodb
```
- **sqlite3** の導入

```
sudo apt-get install sqlite3 
```


###３．その他

- **WSLからWindowsファイルシステムにアクセス** するには、[WSLとwindows間のファイル連携](https://qiita.com/quzq/items/1096c638c0d86795be13)を参考にしました。たとえば、cドライブにアクセスしたい場合は、**/mnt/c** にて操作できるようです。 

###４．サンプル実行
- 構築環境において、サンプル実行として、Twitter において、**ある人（ID）がフォローしているアカウント（ID・アカウント名・スクリーン名）情報** を抽出した際に利用したpythonコードを掲載します。コードのベース部分は、[tweepy で フォローした人をリストアップする](https://3846masa.hatenablog.jp/entry/2015/02/10/163119) を活用させていただいております。

```
#!/usr/bin/python
import config
import tweepy

# ログイン設定
twitter_conf = {
    'consumer' : {
        'key'    : config.CONSUMER_KEY,
        'secret' : config.CONSUMER_SECRET
    },
    'access'   : {
        'key'    : config.ACCESS_TOKEN,
        'secret' :config.ACCESS_TOKEN_SECRET
    }
}

# 認証
auth = tweepy.OAuthHandler(
    twitter_conf['consumer']['key'],
    twitter_conf['consumer']['secret'])
auth.set_access_token(
    twitter_conf['access']['key'],
    twitter_conf['access']['secret'])

# tweepy初期化
api = tweepy.API(auth)
my_info = api.me()

friends_ids = []

id = 'XXXXXXX'　# ターゲットIDを指定

# フォローした人のIDを全取得
# Cursor使うとすべて取ってきてくれるが，配列ではなくなるので配列に入れる
for friend_id in tweepy.Cursor(api.friends_ids, user_id=id).items():
    friends_ids.append(friend_id)

# 100IDsずつに詳細取得
for i in range(0, len(friends_ids), 100):
    for user in api.lookup_users(user_ids=friends_ids[i:i+100]):
    	print (str(user.id) + " : " + user.name + " : @" + user.screen_name)
```
- また、認証用情報は、**config.py** というファイルを作成して、外出ししています。

```
CONSUMER_KEY = "XXXXXX"
CONSUMER_SECRET = "XXXXXX"
ACCESS_TOKEN = "XXXXXX"
ACCESS_TOKEN_SECRET = "XXXXXX"
```

 
##関連記事

1.[Windows Subsystem for Linux (WSL1) をインストールしてみよう！](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)
2.[Windows Subsystem for Linux でデータベースを使ってみる](https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-database)
3.[WSLとwindows間のファイル連携](https://qiita.com/quzq/items/1096c638c0d86795be13)
4.[tweepy で フォローした人をリストアップする](https://3846masa.hatenablog.jp/entry/2015/02/10/163119)
5.[WSL2のapt updateでエラーが出る](https://odaryo.hatenablog.com/entry/2020/01/15/210432)