Bashing the Slack Python
Hi Steemians,
The following is a guide for setting up Python, Slack Webhooks and the Terminal (Bash) to work together. The point of this post is to create a simple introduction with these 3 working pieces that will hopefully allow you to adapt it to whatever your needs are.
We are going to look at python and Bash separately, then combine all 3 elements in the final example.
Slack Incoming Webhook
First you need to setup an incoming webhook.
To do that go to: YOURDOMAIN.slack.com/apps/build
Select "Something just for my team"
Under 'Build a Custom integration', select Incoming Webhooks
Select a channel that you want to post your messages to.
Scroll down to Web hook URL and click 'Copy URL'
Additionally there is a guide in the Slack API documentation here
Bash Example
Open up a terminal.
We can use curl to post the data to our slack webhook. Use the below command and replace the URL with the one that you just setup.
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Hello World.\nSteem Example."}' \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
You should see the post in your nominated slack channel
Python Example
For python the process is similar
first we need to import json and the requests library
import json
import requests
SLACK_INCOMING_WEB_HOOK = "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX" #self explanatory
SLACK_INCOMING_USER = "steem_bot" #Slack Bot display name
SLACK_INCOMING_CHANNEL = "#yourchannel" #Slack Channel
def slack_test():
payload = {
"text": "Python Steem example", #message you want to send
"username": SLACK_INCOMING_USER, #username set above
"channel": SLACK_INCOMING_CHANNEL #Channel set above
}
req = requests.post(SLACK_INCOMING_WEB_HOOK, json.dumps(payload), headers={'content-type': 'application/json'}) #request to post the message
Python + Bash + Slack
The Python language is generally not praised for it's incredible processing speed. I've found that when relying on scheduled scripts or just manually running something, it can be nice to be able to walk away / close a session etc. But i still want to see the eventual output of the script, or exit status (Did it complete, return a value, fail etc).
This example will use python to run a terminal command python --version
and then return the result - it will then post that result to slack. The idea being that you can post results from python, from the terminal, or a mix of both.
import os
import json
import requests
import subprocess
example = subprocess.check_output(["python", "--version"], stderr=subprocess.STDOUT)
SLACK_INCOMING_WEB_HOOK = "https://hooks.slack.com/services/XXXXXX/XXXXXX/XXXXXXXXXXXXXXX"
SLACK_INCOMING_USER = "script_bot" # Slack Bot display name
SLACK_INCOMING_CHANNEL = "#scripts" # Slack Channel
payload = {"text": example, "username": SLACK_INCOMING_USER, "channel": SLACK_INCOMING_CHANNEL}
requests.post(SLACK_INCOMING_WEB_HOOK, json.dumps(payload), headers={'content-type': 'application/json'})
Hope someone finds a use for this. Any adjustments/corrections etc. Just let me know in the comments. This is the first time I've written out a tutorial, so there may be a few errors.
☆☆☆☆☆😎