取得したデータを 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 からの情報収集を行うための基本的なプログラムが出来上がる。
次回の記事ではその辺りを。
- Python で Twitter からの情報収集 (環境構築編)
- Python で Twitter からの情報収集 (Twitter API 編)
- Python で Twitter からの情報収集 (MeCab による形態素解析編)