1

通常,代码应该收集推文,对其进行处理并将一些统计信息存储在数据库中。我将 phirehose 库用于 Twitter Stream API,因此它不断地流式传输推文。据我了解,我无法在同一进程中解析推文,因此我应该在其他进程中解析推文,因此 phirehose lib 应该获取推文并将其存储在某处或将它们排队到内存中以供其他进程(或进程)使用,这将解析它们并存储在数据库中。所以我不想重新发明轮子,所以可能有一些代码片段或一些库,允许这样的数据处理?

4

1 回答 1

0

我很晚才回答这个问题,但其他人可能会觉得它有帮助。虽然 Phihose 可能会起作用,但它看起来很脆弱。它没有实现完整的 HTTP 客户端,而是手动发送标头并尝试解析响应。

我建议使用适当的 HTTP 客户端。如果您只想使用单个流,则不需要非阻塞 I/O,但这会很有帮助,因为您可以在其他地方写入结果,同时继续使用 Twitter 的流

一个这样的客户端是Artax,它支持开箱即用的流式响应。它可以很容易地与流式 JSON 解析器结合使用。您可以在上述 JSON 解析器的存储库中找到完整示例,您可能希望使用单独的包进行请求签名。

该组合已经解析了发出的流,您只需要对推文做您需要做的事情,例如总结您的统计数据并将它们写入某处。如果您不想在这样做时阻塞流消耗,则需要支持非阻塞 I/O 的东西来写入数据。

/** @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());
}
于 2017-07-10T10:21:31.690 回答