Tweet Dashboard Example
Build a Node-RED Dashboard that charts Twitter hashtag sentiment history
Last updated
Build a Node-RED Dashboard that charts Twitter hashtag sentiment history
Last updated
In this flow you can visualize the sentiment score of tweets :
In this flow you will need to configure your twitter API Credentials
The Twitter input node needs an active Twitter ID to gather tweets as data input
Double click on the twitter node when you insert it into node red and you will see something like this :
To set up a new twitter ID click on the pencil button on the side of Twitter ID
You will need an active twitter account and the API Key, API secret key , Access token and Access token secret to set up your account
Once you have your keys from your twitter app you can add the associated info into the Twitter input node!
[
{
"id":"f2ce3087.ee968",
"type":"tab",
"label":"Tweet Language ",
"disabled":false,
"info":""
},
{
"id":"3b13170a.8b5ba8",
"type":"inject",
"z":"f2ce3087.ee968",
"name":"Happy test",
"topic":"",
"payload":"{\"text\":\"every one is awesome\"}",
"payloadType":"json",
"repeat":"",
"crontab":"",
"once":false,
"onceDelay":"",
"x":160,
"y":140,
"wires":[
[
"1ccd705b.07ca2"
]
]
},
{
"id":"1ccd705b.07ca2",
"type":"change",
"z":"f2ce3087.ee968",
"name":"",
"rules":[
{
"t":"set",
"p":"tweet",
"pt":"msg",
"to":"payload",
"tot":"msg"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":380,
"y":180,
"wires":[
[
"19037133.924c87"
]
]
},
{
"id":"62a9afb1.aa101",
"type":"inject",
"z":"f2ce3087.ee968",
"name":"Sadness test",
"topic":"",
"payload":"{\"text\":\"This is miserable and sad\"}",
"payloadType":"json",
"repeat":"",
"crontab":"",
"once":false,
"onceDelay":"",
"x":170,
"y":200,
"wires":[
[
"1ccd705b.07ca2"
]
]
},
{
"id":"60cfb004.afcc18",
"type":"inject",
"z":"f2ce3087.ee968",
"name":"Angry test",
"topic":"",
"payload":"{\"text\":\"I hate this demo\"}",
"payloadType":"json",
"repeat":"",
"crontab":"",
"once":false,
"x":180,
"y":260,
"wires":[
[
"1ccd705b.07ca2"
]
]
},
{
"id":"e87cc8f9.0d3b1",
"type":"watson-text-to-speech",
"z":"f2ce3087.ee968",
"name":"text to speech",
"lang":"en-US",
"langhidden":"en-US",
"langcustom":"NoCustomisationSetting",
"langcustomhidden":"",
"voice":"en-US_AllisonVoice",
"voicehidden":"es-ES_EnriqueVoice",
"format":"audio/wav",
"password":"Go3dEL-Escher-B@ch-climB-0ak5!",
"apikey":"YptiEGxP7PZK71dQVZq96jBmZZ7Y9KxJcDwYO9Kt5WWp",
"payload-response":false,
"default-endpoint":true,
"service-endpoint":"https://stream.watsonplatform.net/text-to-speech/api",
"x":840,
"y":380,
"wires":[
[
"2b50d466.c015dc"
]
]
},
{
"id":"19037133.924c87",
"type":"function",
"z":"f2ce3087.ee968",
"name":"Remove URLS and replace #",
"func":"var tweet = msg.tweet.text;\nvar newtweet = tweet.replace(/#/g, \" Hash tag \");\n\n// regex from https://stackoverflow.com/questions/1500260/detect-urls-in-text-with-javascript\nmsg.payload = newtweet.replace( /(([a-z]+:\\/\\/)?(([a-z0-9\\-]+\\.)+([a-z]{2}|biz|com|co|edu|gov|info|net|org|ly))(:[0-9]{1,5})?(\\/[a-z0-9_\\-\\.~]+)*(\\/([a-z0-9_\\-\\.]*)(\\?[a-z0-9+_\\-\\.%=&]*)?)?(#[a-zA-Z0-9!$&'()*+.=-_~:@/?]*)?)(\\s+|$)/gi, \"see short URL \" );\nreturn msg;",
"outputs":1,
"noerr":0,
"x":640,
"y":160,
"wires":[
[
"7e5ec0f9.bbb5a8",
"37cf1c8a.bf4d54"
]
]
},
{
"id":"7e5ec0f9.bbb5a8",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"",
"active":true,
"tosidebar":true,
"console":false,
"tostatus":false,
"complete":"false",
"x":870,
"y":140,
"wires":[
]
},
{
"id":"dffc23d5.a9663",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"Tone categories",
"active":true,
"console":"false",
"complete":"payload",
"x":880,
"y":320,
"wires":[
]
},
{
"id":"9a0f3aa8.923ad",
"type":"function",
"z":"f2ce3087.ee968",
"name":"High Score",
"func":"var emotions = [];\nemotions = msg.response.document_tone.tone_categories\n .filter(function(c){\n if (c.category_id == \"emotion_tone\")\n {return c; }\n })[0].tones;\n \nvar myscore = 0;\nfor (var i=0; i<emotions.length; i++) {\n if(emotions[i].score > myscore) {\n msg.payload = emotions[i].score;\n msg.topic = emotions[i].tone_name;\n myscore = emotions[i].score;\n }\n}\n\nreturn msg;",
"outputs":1,
"noerr":0,
"x":170,
"y":360,
"wires":[
[
"16df6bd0.9e3004",
"1f4d73c0.0f3c14"
]
]
},
{
"id":"16df6bd0.9e3004",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"Score",
"active":true,
"console":"false",
"complete":"topic",
"x":370,
"y":360,
"wires":[
]
},
{
"id":"677da65d.953ad8",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"Print msg.response",
"active":true,
"console":"false",
"complete":"response",
"x":630,
"y":260,
"wires":[
]
},
{
"id":"37cf1c8a.bf4d54",
"type":"watson-tone-analyzer-v3",
"z":"f2ce3087.ee968",
"name":"Analyze Tone",
"tones":"emotion",
"sentences":"true",
"contentType":"false",
"tone-method":"generalTone",
"interface-version":"2016-05-19",
"default-endpoint":true,
"service-endpoint":"",
"x":390,
"y":280,
"wires":[
[
"9a0f3aa8.923ad",
"677da65d.953ad8",
"1d5a2d93.b33b62"
]
]
},
{
"id":"1d5a2d93.b33b62",
"type":"change",
"z":"f2ce3087.ee968",
"name":"tone_categories",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"response.document_tone.tone_categories",
"tot":"msg"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":660,
"y":320,
"wires":[
[
"dffc23d5.a9663"
]
]
},
{
"id":"1f4d73c0.0f3c14",
"type":"switch",
"z":"f2ce3087.ee968",
"name":"Select Emotion",
"property":"topic",
"propertyType":"msg",
"rules":[
{
"t":"eq",
"v":"Joy",
"vt":"str"
},
{
"t":"eq",
"v":"Fear",
"vt":"str"
},
{
"t":"eq",
"v":"Sadness",
"vt":"str"
},
{
"t":"eq",
"v":"Anger",
"vt":"str"
},
{
"t":"eq",
"v":"Disgust",
"vt":"str"
}
],
"checkall":"true",
"repair":false,
"outputs":5,
"x":180,
"y":460,
"wires":[
[
"8b9bb215.7ed26"
],
[
"3513595e.e6cf3e"
],
[
"b9003d45.14ee"
],
[
"6066fca0.647f8c"
],
[
"554595a.813296c"
]
]
},
{
"id":"3513595e.e6cf3e",
"type":"change",
"z":"f2ce3087.ee968",
"name":"Fear",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"0,255,0",
"tot":"str"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":350,
"y":460,
"wires":[
[
"6328f1ea.22058"
]
]
},
{
"id":"6066fca0.647f8c",
"type":"change",
"z":"f2ce3087.ee968",
"name":"Anger",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"255,0,0",
"tot":"str"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":390,
"y":540,
"wires":[
[
"6328f1ea.22058"
]
]
},
{
"id":"b9003d45.14ee",
"type":"change",
"z":"f2ce3087.ee968",
"name":"Sadness",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"0,0,255",
"tot":"str"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":400,
"y":500,
"wires":[
[
"6328f1ea.22058"
]
]
},
{
"id":"8b9bb215.7ed26",
"type":"change",
"z":"f2ce3087.ee968",
"name":"Joy",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"255,255,0",
"tot":"str"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":350,
"y":420,
"wires":[
[
"6328f1ea.22058"
]
]
},
{
"id":"554595a.813296c",
"type":"change",
"z":"f2ce3087.ee968",
"name":"Disgust",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"221,160,221",
"tot":"str"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":360,
"y":580,
"wires":[
[
"6328f1ea.22058"
]
]
},
{
"id":"6328f1ea.22058",
"type":"template",
"z":"f2ce3087.ee968",
"name":"Score tweet",
"field":"payload",
"fieldType":"msg",
"format":"handlebars",
"syntax":"mustache",
"template":"This tweet expresses {{topic}} - {{tweet.text}}",
"output":"str",
"x":530,
"y":440,
"wires":[
[
"ea37a6d8.dd75d",
"a60e5015.580b68"
]
]
},
{
"id":"ea37a6d8.dd75d",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"",
"active":true,
"console":"false",
"complete":"false",
"x":590,
"y":500,
"wires":[
]
},
{
"id":"a60e5015.580b68",
"type":"watson-translator",
"z":"f2ce3087.ee968",
"name":"",
"action":"translate",
"basemodel":"en-tr",
"domain":"general",
"srclang":"en",
"destlang":"es",
"password":"pmistry@us.ibm.com",
"apikey":"PF2WfTPM5NuU0ab5DcMJa7t6wqRP3UXu2hlhoFOnFryv",
"custom":"",
"domainhidden":"general",
"srclanghidden":"en",
"destlanghidden":"es",
"basemodelhidden":"en-tr",
"customhidden":"",
"filetype":"forcedglossary",
"trainid":"",
"lgparams2":true,
"neural":false,
"default-endpoint":false,
"service-endpoint":"",
"x":630,
"y":380,
"wires":[
[
"e439f7a5.967798",
"e87cc8f9.0d3b1"
]
]
},
{
"id":"e439f7a5.967798",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"",
"active":true,
"tosidebar":true,
"console":false,
"tostatus":false,
"complete":"payload",
"targetType":"msg",
"x":750,
"y":460,
"wires":[
]
},
{
"id":"2b50d466.c015dc",
"type":"change",
"z":"f2ce3087.ee968",
"name":"",
"rules":[
{
"t":"set",
"p":"payload",
"pt":"msg",
"to":"speech",
"tot":"msg"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":1020,
"y":380,
"wires":[
[
"66c156b2.7d6878"
]
]
},
{
"id":"66c156b2.7d6878",
"type":"play audio",
"z":"f2ce3087.ee968",
"name":"",
"voice":"",
"x":1190,
"y":380,
"wires":[
]
},
{
"id":"ca3a3fc7.8605d8",
"type":"twitter in",
"z":"f2ce3087.ee968",
"twitter":"",
"tags":"",
"user":"false",
"name":"Listen to twitter feed",
"inputs":1,
"x":190,
"y":60,
"wires":[
[
"edec68ad.93c13",
"3cef19cd.214e16",
"19037133.924c87"
]
]
},
{
"id":"edec68ad.93c13",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"msg.tweet details",
"active":true,
"console":"false",
"complete":"tweet",
"x":570,
"y":20,
"wires":[
]
},
{
"id":"3cef19cd.214e16",
"type":"debug",
"z":"f2ce3087.ee968",
"name":"",
"active":true,
"console":"false",
"complete":"tweet.text",
"x":560,
"y":60,
"wires":[
]
},
{
"id":"77693eef.07ad08",
"type":"comment",
"z":"f2ce3087.ee968",
"name":"Pick a #hashtag to follow",
"info":"",
"x":200,
"y":20,
"wires":[
]
}
]