This flow is an addition to Tweet Sentiment ( follow Tweet Sentiment flow ) which
How to Build this Flow
Step 1: Copy The flow from Tweet Sentiment
Copy the flow from Tweet Sentiment and paste nodes into this new project
Step 2: Insert delay node
Insert delay node and set rate for 1 msg per 10 seconds . This can be changed accodingly. Connect Node to output of switch node to either Positive Tweet or Negative Tweet based on your liking
Step 3 Insert Text to Speech Service
Insert text to speech node from IBM Watson palette and connect to output of delay node
Get Access to Text To Speech
Log into IBM Cloud and Go to IBM Cloud Catalog
Search for Text to Speech Service within Catalog
Create Lite Service
Go to created Service and get service credentials for Text to Speech node
Set up node properties with username , password and API key from service credentials
Step 4 : Insert play audio node
Insert play audio node . Node might need to be installed within the Manage palette in hamburger menu
Go to Manage palette > install and search for play-audio to find node
Once installed connect node to output of speech to text node
Step 5 : Deploy
Once this flow is deployed you should be able to hear a tweet that is either positive or negative based on where you connected the speech to text service !
Flow can be imported from :
[
{
"id":"68708c76.a7c1f4",
"type":"tab",
"label":"Tweet Speech",
"disabled":false,
"info":""
},
{
"id":"1e93ff7f.0eb7a9",
"type":"debug",
"z":"68708c76.a7c1f4",
"name":"Positive Tweet debug",
"active":false,
"tosidebar":true,
"console":false,
"complete":"payload",
"x":920,
"y":280,
"wires":[
]
},
{
"id":"ef2349af.8cfa1",
"type":"switch",
"z":"68708c76.a7c1f4",
"name":"Positive / Negative Tweets",
"property":"sentiment.score",
"propertyType":"msg",
"rules":[
{
"t":"gte",
"v":"2",
"vt":"num"
},
{
"t":"lt",
"v":"0",
"vt":"str"
}
],
"checkall":"true",
"repair":false,
"outputs":2,
"x":610,
"y":340,
"wires":[
[
"1e93ff7f.0eb7a9",
"228c4a97.f0d74e"
],
[
"9dd2969f.a13c",
"228c4a97.f0d74e"
]
]
},
{
"id":"1319ac56.d730c4",
"type":"debug",
"z":"68708c76.a7c1f4",
"name":"msg.sentiment.score",
"active":true,
"tosidebar":true,
"console":false,
"tostatus":false,
"complete":"sentiment.score",
"targetType":"msg",
"x":600,
"y":300,
"wires":[
]
},
{
"id":"c8eb62e6.80fc68",
"type":"twitter in",
"z":"68708c76.a7c1f4",
"twitter":"",
"tags":"",
"user":"false",
"name":"Listen to twitter feed",
"inputs":1,
"x":110,
"y":100,
"wires":[
[
"22950596.3fd8ea",
"f5b2c419.009468",
"60fd6055.7ce428"
]
]
},
{
"id":"22950596.3fd8ea",
"type":"debug",
"z":"68708c76.a7c1f4",
"name":"msg.tweet details",
"active":true,
"console":"false",
"complete":"tweet",
"x":490,
"y":60,
"wires":[
]
},
{
"id":"ee436314.1ff58",
"type":"sentiment",
"z":"68708c76.a7c1f4",
"name":"Sentiment of Tweets",
"property":"payload",
"x":350,
"y":340,
"wires":[
[
"1319ac56.d730c4",
"ef2349af.8cfa1"
]
]
},
{
"id":"9dd2969f.a13c",
"type":"debug",
"z":"68708c76.a7c1f4",
"name":"Negative Tweets",
"active":false,
"console":"false",
"complete":"payload",
"x":900,
"y":400,
"wires":[
]
},
{
"id":"60fd6055.7ce428",
"type":"function",
"z":"68708c76.a7c1f4",
"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":520,
"y":140,
"wires":[
[
"309ce339.21c75c",
"ee436314.1ff58"
]
]
},
{
"id":"309ce339.21c75c",
"type":"debug",
"z":"68708c76.a7c1f4",
"name":"",
"active":true,
"console":"false",
"complete":"false",
"x":790,
"y":140,
"wires":[
]
},
{
"id":"f5b2c419.009468",
"type":"debug",
"z":"68708c76.a7c1f4",
"name":"",
"active":true,
"console":"false",
"complete":"tweet.text",
"x":480,
"y":100,
"wires":[
]
},
{
"id":"635daaec.36289c",
"type":"comment",
"z":"68708c76.a7c1f4",
"name":"node-red-node-watson dependency",
"info":"This flow requires the\n node-red-node-watson@0.5.10 or higher\nfor the following Watson nodes:\n Text to Speech\n Speech to Text\n Tone Analyzer\n Visual Recognition\n\nYou can either \n $ sudo npm -g install node-red-node-watson\n and restart the Node-RED service\nor install it from Node-RED Manage Palette.",
"x":510,
"y":560,
"wires":[
]
},
{
"id":"4a507bd1.a5635c",
"type":"comment",
"z":"68708c76.a7c1f4",
"name":"node-red-contrib-play-audio dependency",
"info":"This flow requires the\n node-red-contrib-play-audio\nfor the Browser play audio node.\nYou can either \n $ sudo npm -g install node-red-contrib-play-audio\n and restart the Node-RED service\nor install it from Node-RED Manage Palette.",
"x":1060,
"y":580,
"wires":[
]
},
{
"id":"228c4a97.f0d74e",
"type":"delay",
"z":"68708c76.a7c1f4",
"name":"",
"pauseType":"rate",
"timeout":"5",
"timeoutUnits":"seconds",
"rate":"1",
"nbRateUnits":"10",
"rateUnits":"second",
"randomFirst":"1",
"randomLast":"5",
"randomUnits":"seconds",
"drop":false,
"x":340,
"y":520,
"wires":[
[
"dec87853.5d85b8"
]
]
},
{
"id":"1045d97a.d2cc2f",
"type":"comment",
"z":"68708c76.a7c1f4",
"name":"Paste API keys for Watson Text to Speech",
"info":"1. Log into IBM Cloud\n2. Create an instance of the \nWatson Text to Speech service.\n3. Visit the Service Credentials tab\n4. Click on View Credentials\n5. Copy/Paste the password and username into\nthis Node-RED node.\n\nOr\n1. Open this Cloud Foundry Node-RED Starter App\n2. Create a new Connection\n3. Bind the Watson Text to Speech service\n4. Restage your Cloud Foundry application",
"x":600,
"y":480,
"wires":[
]
},
{
"id":"de143b55.310c8",
"type":"inject",
"z":"68708c76.a7c1f4",
"name":"Happy test",
"topic":"",
"payload":"{\"text\":\"every one is awesome\"}",
"payloadType":"json",
"repeat":"",
"crontab":"",
"once":false,
"onceDelay":"",
"x":100,
"y":200,
"wires":[
[
"834206f6.de9f18"
]
]
},
{
"id":"834206f6.de9f18",
"type":"change",
"z":"68708c76.a7c1f4",
"name":"",
"rules":[
{
"t":"set",
"p":"tweet",
"pt":"msg",
"to":"payload",
"tot":"msg"
}
],
"action":"",
"property":"",
"from":"",
"to":"",
"reg":false,
"x":300,
"y":240,
"wires":[
[
"60fd6055.7ce428"
]
]
},
{
"id":"f7a31812.9c6008",
"type":"inject",
"z":"68708c76.a7c1f4",
"name":"Sadness test",
"topic":"",
"payload":"{\"text\":\"Rainy days make me sad\"}",
"payloadType":"json",
"repeat":"",
"crontab":"",
"once":false,
"onceDelay":"",
"x":110,
"y":240,
"wires":[
[
"834206f6.de9f18"
]
]
},
{
"id":"f9c86374.9608c8",
"type":"inject",
"z":"68708c76.a7c1f4",
"name":"Angry test",
"topic":"",
"payload":"{\"text\":\"I hate this demo\"}",
"payloadType":"json",
"repeat":"",
"crontab":"",
"once":false,
"x":100,
"y":280,
"wires":[
[
"834206f6.de9f18"
]
]
},
{
"id":"cf9ddff3.c8a03",
"type":"comment",
"z":"68708c76.a7c1f4",
"name":"Pick a #hashtag to follow",
"info":"",
"x":120,
"y":60,
"wires":[
]
},
{
"id":"dec87853.5d85b8",
"type":"watson-text-to-speech",
"z":"68708c76.a7c1f4",
"name":"text to speech",
"lang":"en-US",
"langhidden":"en-US",
"langcustom":"NoCustomisationSetting",
"langcustomhidden":"",
"voice":"en-US_AllisonV2Voice",
"voicehidden":"en-US_AllisonV2Voice",
"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":560,
"y":520,
"wires":[
[
"72f524c5.005904"
]
]
},
{
"id":"72f524c5.005904",
"type":"play audio",
"z":"68708c76.a7c1f4",
"name":"",
"voice":"0",
"x":1010,
"y":520,
"wires":[
]
}
]