Quantcast
Channel: Laravel News
Viewing all articles
Browse latest Browse all 1824

Automatically Send Tweets through Laravel Notifications

$
0
0

One of the exciting new features that came out in Laravel 5.3 was Laravel Notifications, and they allow you to send quick updates through a variety of services.

Included in the Laravel core is support for Email, Slack, and Nexmo but you can build your own or visit the community project where a lot of integrations have already been built.

As I am working on this site I wanted to automatically send a tweet whenever a new post is published and a package, for this has already been created by Christoph Rumpel. Let’s take a look at how easy it is to integrate the Twitter package and automatically tweet out new posts.

Twitter Package Setup

First, install the package:

composer require laravel-notification-channels/twitter

Next, add the provider to config/app.php

...
'providers' => [
    ...
     NotificationChannels\Twitter\TwitterServiceProvider::class,
],
...

Finally, create a new app on Twitter and add your config to the config/services.php file and your .env:

...
'twitter' => [
    'consumer_key'    => getenv('TWITTER_CONSUMER_KEY'),
    'consumer_secret' => getenv('TWITTER_CONSUMER_SECRET'),
    'access_token'    => getenv('TWITTER_ACCESS_TOKEN'),
    'access_secret'   => getenv('TWITTER_ACCESS_SECRET')
]
...

Tip: The access_token and access_secret can be found on the “Keys and Access Tokens” tab of your Twitter app page.

Sending the Tweet

For my setup, I have a Post model that I’ll be using to send out the tweet from, but you can use any model you already have. Just add the Notifiable trait to it:

class Post extends Model
{
    use Notifiable;

Next, create your notification class:

php artisan make:notification PostPublished

Open up this file and adjust the via method and add a toTwitter method. Here is the completed class:

<?php

namespace App\Notifications;

use Illuminate\Notifications\Notification;
use NotificationChannels\Twitter\TwitterChannel;
use NotificationChannels\Twitter\TwitterStatusUpdate;

class PostPublished extends Notification
{
    public function via($notifiable)
    {
        return [TwitterChannel::class];
    }

    public function toTwitter($notifiable) {
        return new TwitterStatusUpdate('You should follow @laravelnews https://laravel-news.com/');
    }
}

Now to call this all you have to do is grab a Post and send it off:

$post = Post::find(1);
$post->notify(new PostPublished());

The final change we need to make is to update the toTwitter method in the PostPublished class, so it includes the actual post data.

public function toTwitter($post) {
    return new TwitterStatusUpdate($post->title .' https://laravel-news.com/'. $post->uri, [$post->featured_image]);
}

The Post model is passed into the method, and then I just pull out the title, the full path to the post and add the post’s featured image as a second param.

That’s it!

These notification channels are simplifying integration with a lot of external services that in the past would have been a chore to setup manually.


Viewing all articles
Browse latest Browse all 1824

Trending Articles