From 7cba036af658141fa019eaad966cdbcf98166bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Dorn?= Date: Tue, 5 Jul 2022 16:19:22 -0400 Subject: [PATCH] fix stream being stuck forever --- src/TwitterResponse.php | 8 +++++++- src/TwitterStream.php | 14 +++++++------- tinker.php | 21 +++++++++------------ 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/TwitterResponse.php b/src/TwitterResponse.php index cdef14f..d595383 100644 --- a/src/TwitterResponse.php +++ b/src/TwitterResponse.php @@ -2,16 +2,22 @@ namespace RWC\TwitterStream; +use GuzzleHttp\Psr7\Response; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; use RWC\TwitterStream\Exceptions\TwitterException; class TwitterResponse implements ResponseInterface { - protected array $payload; + protected array $payload = []; public function __construct(protected ResponseInterface $response) { + // The response is a stream. + if ($response->getBody()->getMetadata('wrapper_type') === 'http') { + return; + } + $payload = json_decode($response->getBody()->getContents(), true, flags: JSON_THROW_ON_ERROR); if (array_key_exists('errors', $payload)) { diff --git a/src/TwitterStream.php b/src/TwitterStream.php index a64bf3d..41d9617 100644 --- a/src/TwitterStream.php +++ b/src/TwitterStream.php @@ -20,16 +20,16 @@ abstract class TwitterStream public function listen(Connection $connection, callable $callback): void { - $this->response = $connection->request('GET', $this->toURL(), ['stream' => true]); - $this->stream = $this->response->getBody(); - - $parser = new Parser(); + $response = $connection->request('GET', $this->toURL(), ['stream' => true]); + $parser = new Parser(); $parser->parseAsObjects( - $this->stream, - function () use ($callback) { + $response->getBody(), + function (object $item) use ($callback) { $this->received++; - $callback(...)->call($this, ...func_get_args()); + dump('here'); + + $callback(...)->call($this, $item); } ); } diff --git a/tinker.php b/tinker.php index 1dad617..e3fb44e 100644 --- a/tinker.php +++ b/tinker.php @@ -22,20 +22,17 @@ $connection = new Connection($bearerToken); $rule = new RuleManager($connection); +foreach($rule->all() as $r) { + $rule->delete($r->id); +} $res = $rule->new('cat videos but no images') - ->group(fn (RuleBuilder $builder) => $builder->query('cats')) - ->hasVideos() + ->query('cat') ->save(); -dd($res->getBody()->getContents(), $res->getStatusCode()); -// -// $stream -// ->listen(new Connection($bearerToken), function (object $tweet) { -// dump($tweet); -// }); -// -// foreach ($twitterStream->filteredTweets() as $tweet) { -// dump($tweet); -// } + +$stream + ->listen(new Connection($bearerToken), function (object $tweet) { + dump($tweet); + });