redwebcreation/twitter-stream-api
Laravel/PHP package for consuming the Twitter Streaming API. Provides an easy way to connect, authenticate, and listen to real-time tweets/events, letting you filter streams and handle incoming data in your app with minimal setup.
Installation
composer require redwebcreation/twitter-stream-api
Ensure your project has PHP ≥ 8.0 and Laravel ≥ 8.0.
Configuration
php artisan vendor:publish --provider="RedWebCreation\TwitterStreamApi\TwitterStreamApiServiceProvider"
config/twitter-stream-api.php with your Twitter API Bearer Token (from Twitter Developer Portal).First Use Case: Basic Stream
use RedWebCreation\TwitterStreamApi\Facades\TwitterStream;
$stream = TwitterStream::filter(['track' => 'laravel']);
$stream->on('tweet', function ($tweet) {
// Process tweet in real-time
dd($tweet->text);
});
Filtering Streams
$stream = TwitterStream::filter([
'track' => 'php,laravel',
'follow' => '1234567', // User ID
'locations' => '-122.75,36.8,-121.75,37.8' // Bounding box
]);
Handling Events
tweet, limit, disconnect):
$stream->on('tweet', fn($tweet) => logger()->info($tweet->text));
$stream->on('limit', fn() => logger()->warning('Rate limit exceeded!'));
Long-Running Streams
$stream->on('tweet', fn($tweet) => dispatch(new ProcessTweet($tweet)));
Reconnecting on Disconnect
$stream->retryOnDisconnect(3); // Retry 3 times
$stream->on('tweet', fn($tweet) => event(new TweetReceived($tweet)));
$stream->on('tweet', fn($tweet) => Tweet::create($tweet->toArray()));
limit events to adjust stream rules dynamically.Bearer Token Expiry
config/twitter-stream-api.php.Rate Limits
limit events gracefully:
$stream->on('limit', fn() => sleep(60)); // Wait before reconnecting
Connection Drops
retryOnDisconnect() or implement a watchdog service.Data Parsing
entities, user). Use json_decode() or Laravel’s collect() for deep inspection:
$entities = collect($tweet->entities)->toJson();
debug to true in config/twitter-stream-api.php to log raw API responses.Authorization: Bearer {token} header is included in requests (use Laravel’s tap() for debugging):
$stream->getClient()->tap(fn($client) => logger()->debug($client->getHeaders()));
Custom HTTP Client Override the default Guzzle client:
TwitterStream::setClient(app()->makeWith(\GuzzleHttp\Client::class, [
'timeout' => 30,
'headers' => ['User-Agent' => 'MyApp/1.0']
]));
Event Modifiers Transform tweet data before processing:
$stream->on('tweet', fn($tweet) => $stream->emit('processed_tweet', $this->sanitizeTweet($tweet)));
Rule Management Dynamically update stream rules at runtime:
$stream->addRules(['track' => 'new_keyword']); // Requires API v2 rules endpoint
How can I help you explore Laravel packages today?