LoginSignup
52

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-11-09

取得したデータを DB に格納

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

  • Python で Twitter からの情報収集 (環境構築編)

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 からの情報収集を行うための基本的なプログラムが出来上がる。
次回の記事ではその辺りを。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52