Twitter ファイアホースからツイートを取得してデータベースに保存する PHP スクリプトを作成しました。理想的には、時間の経過とともにツイートを収集するように実行したいので、while(1)
ループにラップされます。
タイムアウトしているため、これは問題があるようです。ブラウザで実行すると、タイムアウトして 324 エラーが発生するまでに 30 秒以上実行されません。
質問:一定時間 (20 秒) 実行し、それ自体を自動停止してから再起動する方法はありますか? すべてcronジョブで(PS ... cronジョブの書き方がわかりません)?
背景: Godaddy でホストされているサイト。理想的には、そこにある私のホスティング サーバーでこれを実行したいと思います。
スクリプト:
<?php
$start = time();
$expAddress = "HOSTNAME";
$expUser = "USERNAME";
$expPwd = "PASSWORD";
$database = "DBNAME";
$opts = array(
'http' => array(
'method' => "POST",
'content' => 'keywords,go,here',
)
);
// Open connection to stream
$db = mysql_connect($expAddress, $expUser, $expPwd);
mysql_select_db($database, $db);
$context = stream_context_create($opts);
while (1) {
$instream = fopen('https://USERNAME:PASSWORD@stream.twitter.com/1/statuses/filter.json','r' ,false, $context);
while(! feof($instream)) {
if(time() - $start > 5) { // break after 5 seconds
break;
}
if(! ($line = stream_get_line($instream, 100000, "\n"))) {
continue;
}
else {
$tweet = json_decode($line);
// Clean before storing
// LOTS OF VARIABLES FOR BELOW...REMOVED FOR READABILITY
// Send to database
$ok = mysql_query("INSERT INTO tweets
(created_at, from_user, from_user_id, latitude, longitude, tweet_id, language_code,
place_name, profile_img_url, source, text, retweet_count, followers_count,
friends_count, listed_count, favorites_count)
VALUES
(NOW(), '$from_user', '$from_user_id', '$latitude', '$longitude', '$tweet_id', '$language_code',
'$place_name', '$profile_img_url', '$source', '$text', '$retweet_count', '$followers_count',
'$friends_count', '$listed_count', '$favorites_count')");
if (!$ok) { echo "Mysql Error: ".mysql_error(); }
flush();
}
}
}
?>