After deploying Huginn I wanted to connect my Twitter accounts, so every blog post would be automatically tweeted.
The problem is, there seems to be an issue in the Twitter Service either in Huginn or at Twitter. which I’m sure someone is working on fixing it.
However, I was able to find a workaround by using Twurl, a curl-like application for interacting with the Twitter API.
You will need to do a couple of things.
- Make sure you have a Twitter app API (click here for more info)
- Make sure you have
ENABLE_INSECURE_AGENTS
set totrue
in Huginn’s.env
- Install
twurl
. It was not available as a FreeBSD package, I installed it using RubyGems:gem install twurl
Next, you need to authorize your app (commands from Twurl’s README.md) with the same Unix user that’s running Huginn;
twurl authorize --consumer-key key \
--consumer-secret secret
And now we need to set up a new Shell Command
Agent.
Now, I had to spend a lot of time to make it work, the command-line options are very… sensitive.
This is what I ended up with;
{
"path": "/",
"command": [
"/usr/local/bin/twurl",
"/2/tweets",
"-A",
"Content-type: application/json",
"-d",
"{\"text\": \"{{title}} | {{url}}\\n{{content | strip_html | replace: '\\n', ' ' | truncate: 128}}\"}",
"-t"
],
"unbundle": "true",
"suppress_on_failure": false,
"suppress_on_empty_output": "false",
"expected_update_period_in_days": 15
}
Let’s go one by one.
The path
does not matter, as we’re not interacting with files.
I am running FreeBSD so my twurl
command path would be /usr/local/bin/twurl
. You may run which twurl
to find yours.
The /2/tweets
is the resource we’re sending a request to, -A
is for headers, and -d
specifies the data of the body (hence, implies it’s a POST method).
My sources are RSS feeds, so I’m using things like {{title}}
and {{url}}
, you can do whatever you want. Since I’m inserting a JSON in the JSON, I had to use \\n
so it converts to \n
in the command. Be careful about that.
In the end, -t
will “trace” the command, so we can see (if needed) the POST request as well as the result.
The unbundle
parameter tells Huginn to not use the Ruby Gems that are in Huginn, instead, the command is run in a clean environment, outside of Huginnβs bundler context.
I left everything else as is.
Now, you can tweet from Huginn.
NOTE: You can use the
-u
flag withtwurl
to specify which account to use, refer to Changing your default profile for more info about that.
And now, all works fine.
That’s all folks…