bella discussione.Me piace: D @andy: grande, per me la prima volta che qualcuno potrebbe spiegare la differenza vera accurata e io a farlo: D @Marcos Dimitrio Concordo
Io ho eseguito un pool di thread maledettamente brutto di Twitter Demoni API che fanno esattamente quello tranne la cosa push $ _POST da facebook se ho capito bene. Controlla i tweet in tempo reale per gli array di centinaia/migliaia di cluster di parole chiave tramite lo streamin api Firehose. Questa è la strada da percorrere o subire una sconfitta terribile altrimenti: D IMHO, naturalmente. Questa è la metà di due demoni chiamati getTweets e parseTweets.
<?php
ob_start();
require_once('config/phirehose-config.php');
require_once('lib.php');
$oDB = new db;
// run as a daemon aka background process
while (true) {
// Process all statuses
$query = 'SELECT cache_id, raw_tweet ' .
'FROM json_cache';
$result = $oDB->select($query);
while($row = mysqli_fetch_assoc($result)) {
$cache_id = $row['cache_id'];
// $status = unserialize(base64_decode($row['raw_tweet']));
$tweet_object = json_decode($row['raw_tweet'],false);
// JSON payload for statuses stored in the database
// serialized base64 raw data
// Delete cached copy of tweet
// $oDB->select("DELETE FROM json_cache WHERE cache_id = $cache_id");
// Limit tweets to a single language,
// such as 'en' for English
//if ($tweet_object->lang <> 'nl') {continue;}
// Test status update before inserting
$tweet_id = $tweet_object->id_str;
if ($oDB->in_table('tweets','tweet_id=' . $tweet_id)) {continue;}
$tweet_text = $oDB->escape($tweet_object->text);
$created_at = $oDB->date($tweet_object->created_at);
if (isset($tweet_object->geo)) {
$geo_lat = $tweet_object->geo->coordinates[0];
$geo_long = $tweet_object->geo->coordinates[1];
} else {
$geo_lat = $geo_long = 0;
}
$user_object = $tweet_object->user;
$user_id = $user_object->id_str;
$screen_name = $oDB->escape($user_object->screen_name);
$name = $oDB->escape($user_object->name);
$profile_image_url = $user_object->profile_image_url;
// Add a new user row or update an existing one
$field_values = 'screen_name = "' . $screen_name . '", ' .
'profile_image_url = "' . $profile_image_url . '", ' .
'user_id = ' . $user_id . ', ' .
'name = "' . $name . '", ' .
'location = "' . $oDB->escape($user_object->location) . '", ' .
'url = "' . $user_object->url . '", ' .
'description = "' . $oDB->escape($user_object->description) . '", ' .
'created_at = "' . $oDB->date($user_object->created_at) . '", ' .
'followers_count = ' . $user_object->followers_count . ', ' .
'friends_count = ' . $user_object->friends_count . ', ' .
'statuses_count = ' . $user_object->statuses_count . ', ' .
'time_zone = "' . $user_object->time_zone . '", ' .
'last_update = "' . $oDB->date($tweet_object->created_at) . '"' ;
if ($oDB->in_table('users','user_id="' . $user_id . '"')) {
$oDB->update('users',$field_values,'user_id = "' .$user_id . '"');
} else {
$oDB->insert('users',$field_values);
}
// percist status to database
$field_values = 'tweet_id = ' . $tweet_id . ', ' ....
//... Somethings are to be for da cook alone, its hard work
foreach ($entities->hashtags as $hashtag) {
$where = 'tweet_id=' . $tweet_id . ' ' .
'AND tag="' . $hashtag->text . '"';
if(! $oDB->in_table('tweet_tags',$where)) {
$field_values = 'tweet_id=' . $tweet_id . ', ' .
'tag="' . $hashtag->text . '"';
$oDB->insert('tweet_tags',$field_values);
}
}
foreach ($entities->urls as $url) {
if (empty($url->expanded_url)) {
$url = $url->url;
} else {
$url = $url->expanded_url;
}
$where = 'tweet_id=' . $tweet_id . ' ' .
'AND url="' . $url . '"';
if(! $oDB->in_table('tweet_urls',$where)) {
$field_values = 'tweet_id=' . $tweet_id . ', ' .
'url="' . $url . '"';
$oDB->insert('tweet_urls',$field_values);
}
}
}
if(DEBUG){
echo ob_get_contents();
ob_clean();
}else{
ob_clean();
}
// Longer sleep equals lower server load
sleep(1);
}
?>
Ideale anche per ragni e crawler per i quali avere il mio personale. Dimostrami un modo migliore per farlo, tutto considerato come le risorse e la scalabilità come un widget di sito Web connesso in modo permanente per gli aggiornamenti di stato FB è davvero come utilizzare Echelon come un televisore remoto di nuovo imho).
fonte
2015-08-21 18:38:10
Hai guardato in WebSockets? Qualcosa come http://socketo.me/ potrebbe essere sufficiente. In generale, però, eseguire una richiesta su un intervallo dal client di solito fa il trucco. – som
Volevo utilizzare la libreria di socket php ufficiale http://php.net/manual/en/book.sockets.php ma come implementarlo con il browser –
Penso che quello che stai cercando sia un tutorial su websockets in PHP . Perché non cercarlo e poi fare domande in base ai risultati? – som