Live Twitter Stream Using Raspberry Pi and NodeJS

What's the Purpose?

The main use case was I wanted to see some geofenced Twitter tweets and/or some relevant keyword terms. Getting a bird's eye view of some relevant tweets seemed very interesting to me.

What do we need?

With this tutorial we will need the following:

Raspberry Pi

Twitter Streaming API access

NodeJS (Install Here)

Initial Setup

First we need to have access to Twitter's Streaming API. For that you will need to create an "Application" in Twitter's dev website. You can create a new one by logging in and visiting Create an Application - Twitter. Supply an Application name, Description and Website. Then agree to the terms.

Then click on the "Keys and Access Tokens" tab:

We now have our Consumer Key and Secret. Now it's time to generate an Access Token and Access Token Secret. Click on "Create my access token".

Afterwards you should see the newly generated Access Token and Access Token Key:

Now we have the following Twitter API variables:

Consumer Key

Consumer Secret

Access Token

Access Token Secret

Setup our initial project

We will first create a folder where our project files will reside. Then we will initialize the project by using npm init.

mkdir ~/twitter_stream/ ; cd ~/twitter_stream/ ; npm init ;

I just accepted all the defaults:

Install the dependencies

Now some fun. We get to install the dependencies our NodeJS app will use. The only one we will be using right now is ttezel's twit Node Twitter API. In order to install it for your project you'll use the npm command.

npm install twit --save

This will do two things. Install the client and all it's dependencies and also saves the dependency for your app inside the "package.json" file for later use.

Start the script

You may have already noticed on ttezel's twit GitHub page there are already TONS of examples in the README.md file.

Lets start by creating a file named index.js. And placing the following script inside the file:

var Twit = require ( 'twit' ) var T = new Twit ({ consumer_key : 'sUqQCLB5ufakekeyUT3xNew' , consumer_secret : 'SVE8gv1Uz0zpoaQRpTUADBcvESGk7j49CalsoFakegV9dU3Rhh' , access_token : '159618721-anotherFakeTokenUoEgaww2SBkpnAp3IXmTcZQUEp32o' , access_token_secret : '5XtPnLUDEtokenSecretpMdTWF5g8OXIYoQlHBAsZJ' }) // // filter the twitter public stream by the hashtag '#raspberrypi' and keyword // 'raspberry pi' // var stream = T . stream ( 'statuses/filter' , { track : [ '#raspberrypi' , 'raspberry pi' ] }); stream . on ( 'tweet' , function ( tweet ) { console . log ( tweet . text + ' (' + tweet . user . screen_name + ')' ); })

Now exit nano by hitting "ctrl+x" and type "y" and hitting enter. Then you can run the node script by typing:

node index.js

You should hopefully be seeing a live stream of tweets with the hashtag "#raspberrypi" and keyword "RaspberryPi" in them. Exciting! You can leave this up and get (almost) real-time feed of tweets about the Raspberry Pi. Now you can stay up to date with more Raspberry Pi information!

Live Stream of a specific Twitter User

Suppose you want to stalk your favorite Twitter account. My favorite Twitter account right now is WHY MY CAT IS SAD. We would first need to find out the account's User ID by using the following website: GET TWITTER ID. Using that service I found the account's User ID is 1083314617. We can then rewrite our code to just pull in those tweets:

var Twit = require ( 'twit' ) var T = new Twit ({ consumer_key : 'sUqQCLB5ufakekeyUT3xNew' , consumer_secret : 'SVE8gv1Uz0zpoaQRpTUADBcvESGk7j49CalsoFakegV9dU3Rhh' , access_token : '159618721-anotherFakeTokenUoEgaww2SBkpnAp3IXmTcZQUEp32o' , access_token_secret : '5XtPnLUDEtokenSecretpMdTWF5g8OXIYoQlHBAsZJ' }) // // filter the twitter public stream by the hashtag '#raspberrypi'. // var stream = T . stream ( 'statuses/filter' , { follow : '1083314617' }); stream . on ( 'tweet' , function ( tweet ) { console . log ( tweet . text + ' (' + tweet . user . screen_name + ')' ); });

Conclusion

Some of the hashtags I stream are #spacex, #nasa, and #tesla. What are some hashtags that you would follow?