Skip to content

Instantly share code, notes, and snippets.

@gbirke

gbirke/README.md Secret

Last active May 8, 2020 16:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbirke/323250bca1afb4c9b941ee38a3e44747 to your computer and use it in GitHub Desktop.
Save gbirke/323250bca1afb4c9b941ee38a3e44747 to your computer and use it in GitHub Desktop.
Node.RED setup to export favs and retweets that contain URLs to pinboard.in

Export favs and retweets that contain URLs to pinboard.in

The tweet itself (minus the URL) will become the description.

The flow tries to download the URL to extract a title. If that fails, it will use "Twitter" as the title.

This flow needs the pinboard node

[
{
"id": "b8e5580d.f6e7f8",
"type": "pinboard out",
"z": "36c32101.772e1e",
"user": "11b5da1e.9ee906",
"tags": "from:twitter",
"private": false,
"toread": true,
"name": "",
"x": 1360,
"y": 280,
"wires": []
},
{
"id": "f6aa3b2b.c74158",
"type": "change",
"z": "36c32101.772e1e",
"name": "Format HTTP Response for pinboard.in",
"rules": [
{
"t": "move",
"p": "payload",
"pt": "msg",
"to": "title",
"tot": "msg"
},
{
"t": "move",
"p": "url",
"pt": "msg",
"to": "payload",
"tot": "msg"
},
{
"t": "delete",
"p": "headers",
"pt": "msg"
},
{
"t": "delete",
"p": "statusCode",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1220,
"y": 180,
"wires": [
[
"b8e5580d.f6e7f8"
]
]
},
{
"id": "f8ebdf0.b0a162",
"type": "change",
"z": "36c32101.772e1e",
"name": "Format failed HTTP response",
"rules": [
{
"t": "move",
"p": "url",
"pt": "msg",
"to": "payload",
"tot": "msg"
},
{
"t": "set",
"p": "title",
"pt": "msg",
"to": "Twitter",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 940,
"y": 260,
"wires": [
[
"b8e5580d.f6e7f8"
]
]
},
{
"id": "2e6d3afd.baae16",
"type": "html",
"z": "36c32101.772e1e",
"name": "Extract title",
"property": "payload",
"tag": "head title",
"ret": "text",
"as": "multi",
"x": 890,
"y": 180,
"wires": [
[
"f6aa3b2b.c74158"
]
]
},
{
"id": "8da01fbd.9ac0e",
"type": "switch",
"z": "36c32101.772e1e",
"name": "Check if URL request was successful",
"property": "statusCode",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "200",
"vt": "num"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 530,
"y": 240,
"wires": [
[
"2e6d3afd.baae16"
],
[
"f8ebdf0.b0a162"
]
]
},
{
"id": "df447f54.218f",
"type": "http request",
"z": "36c32101.772e1e",
"name": "Get URL",
"method": "GET",
"ret": "txt",
"url": "",
"tls": "",
"x": 120,
"y": 240,
"wires": [
[
"8da01fbd.9ac0e"
]
]
},
{
"id": "4f2769ca.836a48",
"type": "function",
"z": "36c32101.772e1e",
"name": "Extract URLs from tweet, one msg each",
"func": "if ( !msg.tweet || \n !msg.tweet.target_object || \n !msg.tweet.target_object.entities ||\n !msg.tweet.target_object.entities.urls ||\n msg.tweet.target_object.entities.urls.length === 0 ) {\n return null;\n }\nvar messages = [],\n text = msg.tweet.target_object.text,\n urls = msg.tweet.target_object.entities.urls;\nfor ( var i = 0; i < urls.length; i++ ) {\n messages.push( {\n payload: urls[i].expanded_url,\n url: urls[i].expanded_url,\n description: text.substring( 0, urls[i].indices[0] ) + text.substr( urls[i].indices[1] ),\n tweet: msg.tweet\n } );\n}\nreturn [ messages ];",
"outputs": 1,
"noerr": 0,
"x": 220,
"y": 140,
"wires": [
[
"df447f54.218f"
]
]
},
{
"id": "35538e2a.388dd2",
"type": "twitter in",
"z": "36c32101.772e1e",
"twitter": "",
"tags": "",
"user": "event",
"name": "",
"topic": "tweets",
"inputs": 0,
"x": 120,
"y": 40,
"wires": [
[
"4f2769ca.836a48"
]
]
},
{
"id": "11b5da1e.9ee906",
"type": "pinboard-user",
"z": "",
"user": "archangel"
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment