mysql文字化け対策+StreamingAPI
[client] default-character-set=utf8 port = 3306 socket = /tmp/mysql.sock [mysqld] テキトウにport = 3306 テキトウにsocket = /tmp/mysql.sock テキトウにskip-locking テキトウにkey_buffer = 16M テキトウにmax_allowed_packet = 1M テキトウにtable_cache = 64 テキトウにsort_buffer_size = 512K テキトウにnet_buffer_length = 8K テキトウにread_buffer_size = 256K テキトウにread_rnd_buffer_size = 512K テキトウにmyisam_sort_buffer_size = 8M default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8
です。
twitterは
<?php error_reporting(0); $user = 'modeverv'; $password = 'パス'; $stream = fopen("http://{$user}:{$password}@stream.twitter.com/1/statuses/sample.json", "r"); $objPdo = new PDO("mysql:host=localhost;dbname=twitterST;charset=utf-8", "ユーザー", "パス"); $objPdo->exec("SET CHARACTER SET utf8"); //念のため while ($json = fgets($stream )) { $twitter= json_decode($json,true); try { if(preg_match('/[ァ-ヶーぁ-ん]/u',$twitter['text'])){ $sql = "INSERT INTO status(name,text,cdate) VALUES (:user,:tex,now()); "; $stmt = $objPdo->prepare($sql); $stmt->bindValue(':user', $twitter['user']['name'], PDO::PARAM_STR); $stmt->bindValue(':tex', $twitter['text'], PDO::PARAM_STR); $stmt->execute(); echo $twitter['user']['name']':'.$twitter['text'] . PHP_EOL; } } catch(Exception $e) { echo $e->getMessage(); } } ?>
ですです。
ワールドカップが熱いということがわかった。
帰ります。
結果 件数など
落ちもせずに(try-catchしているから当たり前ですが。。)まぁ、よく動いくれます。
StreamingAPIの取得結果は以下のとおり。
datestr count(*)
2010-06-30 00 19692
2010-06-30 01 79078 <= ワールドカップ?
2010-06-30 02 29099
2010-06-30 03 13357
2010-06-30 04 7606
2010-06-30 05 5592
2010-06-30 06 8797
2010-06-30 07 15593
2010-06-30 08 19047
2010-06-30 09 8575 <= 通勤時間中でプログラムを回していない
2010-06-30 10 16579
2010-06-30 11 17072
2010-06-30 12 23100
2010-06-30 13 20195
2010-06-30 14 18556
2010-06-30 15 19173
2010-06-30 16 20691
2010-06-30 17 23322
2010-06-30 18 26760
2010-06-30 19 30947
2010-06-30 20 32154
2010-06-30 21 35886
まぁ、だいたいこんなものかなぁ、と。