50) { $ct = 50; } elseif ($ct == '') { $ct = 20; } } #---------------------------------------------------------- # 検索 #---------------------------------------------------------- switch ($type_inquiry) { case "user": $url = 'http://search.twitter.com/search.atom?q=from%3A'; break; case "hash": $url = 'http://search.twitter.com/search.atom?q=%23'; break; } $url .= $keyword . '&rpp=' . $ct; #---------------------------------------------------------- # メイン処理 #---------------------------------------------------------- # DB に接続 $db = new mydb; $db->config(DB_HOST, 'sd_dba_OTkwMTE3', '4Bg7zA5l', 'sddb0040054174', CONNECT_WITH_MYSQL); $db->connect(); $db->set_db_encoding("utf8"); # DB の文字コードを UTF8 に # 前回のアクセス日時を拾ってくる $sql = sprintf("select max(lastupdate) from tbl_log where account = '%s';", $keyword); $db->execute($sql); # レコードがない、或いは前回アクセス時から 60 秒以上経過していれば、再取得を行う if ($db->recordcount != 0) { if (time() - $db->field(0) > 60) { read_from_server($ct, $url, $keyword); } } else { read_from_server($ct, $url, $keyword); } $sql = sprintf("select date_tweet, tweet from tbl_log where account = '%s' order by date_tweet desc limit %s", $keyword, $ct); $db->execute($sql); if ($db->error_description() != '') { echo $db->error_description(); echo $db->query; exit; } if ($db->recordcount != 0) { for ($i = 0; $i < $db->recordcount; $i++) { $japan_time = calcu_date($db->field(0, $i), BY_HOUR, 9); switch ($japan_time['D']) { case "Sun": $dayname = "日"; break; case "Mon": $dayname = "月"; break; case "Tue": $dayname = "火"; break; case "Wed": $dayname = "水"; break; case "Thu": $dayname = "木"; break; case "Fri": $dayname = "金"; break; case "Sat": $dayname = "土"; break; } $created_at = sprintf ("%04d年%02d月%02d日 %02d:%02d:%02d(%s)", $japan_time['Y'], $japan_time['n'], $japan_time['j'], $japan_time['G'], $japan_time['i'], $japan_time['s'], $dayname); $created_at = mb_convert_encoding($created_at, $char_set, "UTF-8"); $tweet = $db->field(1, $i); $enc = mb_detect_encoding($tweet); $text = mb_convert_encoding($tweet, $char_set, $enc); $tweets .= sprintf("%s
\n%s
\n", $created_at, $text); } # 表示 echo sprintf($tmpl, $char_set, $title, $tweets); } #---------------------------------------------------------- # ツイート取得関数 # # 引数 # $ct 取得するツイート数 # $url オープンする URL # $keyword キーワード # #---------------------------------------------------------- function read_from_server($ct, $url, $keyword) { # URL をオープン $req = fopen($url, 'r'); while (!feof($req)) { $buffer .= fread($req, 2048) or die("READ"); } # URL クローズ fclose($req) or die("CLOSE"); $xml = simplexml_load_string($buffer); foreach($xml->entry as $key => $value){ switch ($type_inquiry) { case "user": break; case "hash": break; } $updated = $value->updated; $year_month_day = explode("-", substr($updated, 0, 10)); $hour_min_sec = explode(":", substr($updated, 11, 8)); $year = $year_month_day[0]; $month = $year_month_day[1]; $day = $year_month_day[2]; $hour = $hour_min_sec[0]; $min = $hour_min_sec[1]; $sec = $hour_min_sec[2]; $japan_timestamp = mktime($hour, $min, $sec, $month, $day, $year); # DB に接続 $db = new mydb; $db->config(DB_HOST, 'sd_dba_OTkwMTE3', '4Bg7zA5l', 'sddb0040054174', CONNECT_WITH_MYSQL); $db->connect(); $db->set_db_encoding("utf8"); # DB の文字コードを UTF8 に # アクセス日時を取得 $now = time(); # 既に登録済みのツイートかチェック $sql = sprintf("select id from tbl_log where date_tweet = %s and account = '%s';", $japan_timestamp, $keyword); $db->execute($sql); if ($db->recordcount == 0) { $text = $value->title; $sql = sprintf("insert into tbl_log(date_tweet, tweet, account, lastupdate) values(%s, '%s', '%s', %s);", $japan_timestamp, $text, $keyword, $now); $db->execute($sql); } else { $sql = sprintf("update tbl_log set lastupdate = %s where date_tweet = %s and account = '%s';", $now, $japan_timestamp, $keyword); $db->execute($sql); } } } ?>