Python で Twitter から情報収集 (MySQL と Python の連携) 

# 取得したデータを DB に格納
集めてきた Tweet データを DB に格納する部分。
MySQL 用のドライバを利用して、Python から MySQL を操作する。

* Python で Twitter からの情報収集 (環境構築編)
    * 環境構築等は[こちら](http://qiita.com/Salinger/items/081754e9e211135fa6d1)

# MySQL 用ドライバ
環境構築時にインストールしたものを利用する。

# サンプルコード 
実際の使用法はサンプルコードを見てもらう方が早いはず。
サンプル中の `execute_sql()` 関数のようにしてやると、指定したDBでSQLを実行できる。

* mysql_tools.py

```
#!/usr/bin/env python                                                                                                                                             
# -*-coding:utf-8-*-                                                                                                                                              
import MySQLdb

### Functions                                                                                                                                                     
def main():
    local_db = {
        "host": "localhost",
        "user": "root",
        "passwd": "vagrant",
        "db_name": "twitter_logs"
        }

    # DB 作成                                                                                                                                                     
    create_db(local_db)

    # テーブル作成                                                                                                                                                
    create_hashtag_serch_table(local_db)

    # データのストア                                                                                                                                              
    hashtag_search_dict = {
        "tweet_id": u"10000000001",
        "datetime": u"2014-11-09 18:05:42",
        "user_id": u"123456789",
        "user_name": u"salinger",
        "display_name": u"J.D. Salinger",
        "search_hashtag": u"#salinger",
        "raw_tweet": u"ライ麦畑のつかまえ役、そういったものに僕はなりたいんだよ。馬鹿げてることは知ってるよ。でも、ほんとうになりたいものといったらそれしかないね。",
        "words": u"ライ麦,畑,の,つかまえ,役,、,そういった,もの,に,僕,は,なり,たい,ん,だ,よ,。,馬鹿げ,てる,こと,は,知っ,てる,よ,。,でも,、,ほんとう,に,なり,たい,もの,と,いっ,たら,それ,しか,ない,ね,。",
        "nouns": u"ライ麦,畑,役,もの,僕,ん,こと,ほんとう,もの,それ",
        "verbs": u"つかまえ,なり,馬鹿げ,てる,知っ,てる,なり,いっ",
        "adjs": u"ない"
        }

    insert_into_hashtag_search(local_db, hashtag_search_dict)
    return True

def create_db(db_info):
    connector = MySQLdb.connect(
        host = db_info["host"],
        user = db_info["user"],
        passwd = db_info["passwd"],
        charset = "utf8"
        )
    cursor = connector.cursor()
    sql = u"""
    CREATE DATABASE IF NOT EXISTS                                                                                                                                 
        %s                                                                                                                                                        
    CHARACTER SET                                                                                                                                                 
        utf8                                                                                                                                                      
    ;                                                                                                                                                             
    """ %(db_info["db_name"])
    cursor.execute(sql)
    connector.commit()
    cursor.close()
    connector.close()
    return True

def execute_sql(sql, db_info, is_commit = False):
    connector = MySQLdb.connect(
        host = db_info["host"],
        user = db_info["user"],
        passwd = db_info["passwd"],
        db = db_info["db_name"],
        charset = "utf8"
        )
    cursor = connector.cursor()
    cursor.execute(sql)
    if is_commit:
        connector.commit()
    cursor.close()
    connector.close()
    return True

def create_hashtag_serch_table(db_info):
    sql = """                                                                                                                                                     
    CREATE TABLE IF NOT EXISTS                                                                                                                                    
        hashtag_search(                                                                                                                                           
            id BIGINT PRIMARY KEY AUTO_INCREMENT,                                                                                                                 
            tweet_id BIGINT,                                                                                                                                      
            datetime DATETIME,                                                                                                                                    
            user_id BIGINT,                                                                                                                                       
            user_name VARCHAR(50),                                                                                                                                
            display_name VARCHAR(50),                                                                                                                             
            search_hashtag VARCHAR(140),                                                                                                                          
            raw_tweet TEXT,                                                                                                                                       
            words TEXT,                                                                                                                                           
            nouns TEXT,                                                                                                                                           
            verbs TEXT,                                                                                                                                           
            adjs TEXT                                                                                                                                             
        )                                                                                                                                                         
    ;                                                                                                                                                             
    """
    execute_sql(sql, db_info, is_commit = True)
    return True

def insert_into_hashtag_search(db_info, hashtag_search_dict):
    sql = """                                                                                                                                                     
    INSERT INTO                                                                                                                                                   
        hashtag_search                                                                                                                                            
    VALUES(                                                                                                                                                       
        NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'                                                                                    
        )                                                                                                                                                         
    ;                                                                                                                         
    """ %(
        hashtag_search_dict["tweet_id"],
        hashtag_search_dict["datetime"],
        hashtag_search_dict["user_id"],
        hashtag_search_dict["user_name"],
        hashtag_search_dict["display_name"],
        hashtag_search_dict["search_hashtag"],
        hashtag_search_dict["raw_tweet"],
        hashtag_search_dict["words"],
        hashtag_search_dict["nouns"],
        hashtag_search_dict["verbs"],
        hashtag_search_dict["adjs"]
        )
    execute_sql(sql, db_info, is_commit = True)
    return True


### Execute                                                                                                                                                       
if __name__ == "__main__":
    main()
```

# 動作チェック

```
(twi-py) $ python mysql_tools.py
(twi-py) $ mysql -u root -pvagrant twitter_logs
mysql> SHOW tables;
+------------------------+
| Tables_in_twitter_logs |
+------------------------+
| hashtag_search         |
+------------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM hashtag_search\G
*************************** 1. row ***************************
            id: 1
      tweet_id: 10000000001
      datetime: 2014-11-09 18:05:42
       user_id: 123456789
     user_name: salinger
  display_name: J.D. Salinger
search_hashtag: #salinger
     raw_tweet: ライ麦畑のつかまえ役、そういったものに僕はなりたいんだよ。馬鹿げてることは知ってるよ。でも、ほんとうになりたいものといったらそれしかないね。
         words: ライ麦,畑,の,つかまえ,役,、,そういった,もの,に,僕,は,なり,たい,ん,だ,よ,。,馬鹿げ,てる,こと,は,知っ,てる,よ,。,でも,、,ほんとう,に,なり,たい,もの,と,いっ,たら,それ,しか,ない,ね,。
         nouns: ライ麦,畑,役,もの,僕,ん,こと,ほんとう,もの,それ
         verbs: つかまえ,なり,馬鹿げ,てる,知っ,てる,なり,いっ
          adjs: ない
1 row in set (0.00 sec)
mysql>
```

DB作成、Table作成、データ格納が確認できた。

# 最後に
後は、ここまでの記事の内容を1つのプログラムにまとめて、お互いの入出力をうまく繋げば、
Python で Twitter からの情報収集を行うための基本的なプログラムが出来上がる。
次回の記事ではその辺りを。

* Python で Twitter からの情報収集 (環境構築編)
    * [http://qiita.com/Salinger/items/081754e9e211135fa6d1](http://qiita.com/Salinger/items/081754e9e211135fa6d1)
* Python で Twitter からの情報収集 (Twitter API 編)
    * [http://qiita.com/Salinger/items/020b670466a9835c94bb](http://qiita.com/Salinger/items/020b670466a9835c94bb)
* Python で Twitter からの情報収集 (MeCab による形態素解析編) 
    * [http://qiita.com/Salinger/items/529a77f2ceeb39998665](http://qiita.com/Salinger/items/529a77f2ceeb39998665)