2013-03-26 3 views
1

В общем, код должен собирать твиты, обрабатывать и хранить в db некоторые статистические данные. Я использую phirehose lib для Twitter Stream API, поэтому он постоянно транслирует твит. Насколько я понимаю, я не могу разобрать твиты в том же процессе, поэтому я должен разбирать твиты в другом процессе, поэтому phirehose lib должен получать твиты и хранить их где-то или ставить в очередь в памяти для других процессов (или процессов), которые будут проанализировать их и сохранить в db. Поэтому я не хочу изобретать колесо, так что могут быть некоторые фрагменты кода или некоторые lib, которые позволяют такую ​​обработку данных?Twitter Streaming API. Как async обрабатывает твиты в php?

ответ

0

Я отвечаю на это довольно поздно, но другие могут оказаться полезными. Хотя Phirehose может работать, он выглядит довольно хрупким. Он не реализует полный HTTP-клиент, а скорее вручную отправляет заголовки и пытается проанализировать ответ.

Я бы рекомендовал использовать надлежащий HTTP-клиент. Вам не нужен неблокирующий ввод-вывод, если вы хотите использовать только один поток, но это может быть полезно, потому что вы можете написать результаты в другом месте, продолжая использовать поток Twitter.

Один из таких клиентов - Artax, который поддерживает потоковые ответы из коробки. Его можно легко комбинировать с streaming JSON parser. Вы можете find a full example в репозитории упомянутого анализатора JSON, вы можете использовать отдельный пакет для подписи запроса.

Эта комбинация уже проанализирует излучаемый поток, вам просто нужно сделать то, что вам нужно сделать с помощью твитов, например. суммируйте свои статистические данные и напишите их где-нибудь. Если вы не хотите блокировать потребление потока во время этого, вам потребуется что-то, что поддерживает неблокирующий ввод-вывод для записи ваших данных.

/** @var Response $response */ 
$response = yield $client->request(
    (new Request($uri, "POST")) 
     ->withHeader("authorization", $authorization) 
); 

if ($response->getStatus() !== 200) { 
    exit(1); 
} 

$parser = new StreamingJsonParser($response->getBody(), true); 

while (yield $parser->advance()) { 
    // do whatever you want with your tweet here 
    var_dump($parser->getCurrent()); 
} 
Смежные вопросы