您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何用Python模擬發送Slack消息,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
有一個看似很簡單的小需求,但是對于一個Python入門的新手來講還是有些難度的,雖然人家也有寫好的代碼,但是自己就是不想直接去搬人家的代碼,在不懂得時候還裝的那么高大上,沒辦法,就是想自己折騰折騰,別人能寫的出來,就說明在某些地方肯定有相關的文章,所以不要怕折騰…
Python slackclient
API Methods
Slack Token
寫代碼,只要是有關平臺的,首先在平臺的官網上搜搜有沒有相關的api文檔之類的
其次在github上搜搜,有沒有官方的開源模塊或者第三方模塊
在這就是Google你的需求了
這里有一個參考的文章
火狐的poster下載地址
用python發送一條消息到slack指定的頻道中
from slackclient import SlackClient slack_token = os.environ["SLACK_API_TOKEN"] sc = SlackClient(slack_token) sc.api_call( "chat.postMessage", channel="C0XXXXXX", text="Hello from Python! :tada:" )
api_call
是模塊中封裝的一個調用接口,這個接口的作用就是相當于你使用瀏覽器模擬post請求的執行過程,他把你在瀏覽器中要實現post請求所要執行的點點點封裝成一個黑箱子,只要按格式填寫參數就可以了
chat.postMessage
發送消息的方法
channel
要指定消息要發送到的channel
text
你所要發送的內容
這樣是不是一目了然了,再比如說我想獲取workspace中所有的channel列表,怎么做?
是不是首先要在API Methods中找到獲取列表方法
可以在次使用上面的代碼,換一個獲取channel列表的方法就可以了
至于返回的對象是什么,可以通過Type查看,方便下一步處理
from slackclient import SlackClient # import requests import json slack_token="#不給你看" sc= SlackClient(slack_token) resp =sc.api_call( "channels.list" )
學習的是方法,剩下的要自己努力專研,要有所收獲,分享一個自己寫的代碼,雖然垃圾,但是還能跑,在不斷成長后,我覺得會一眼看出其中的什么bug吧
#!/usr/bin/env python3.5 ############################### # function: send zabbix/cacti/ops alert to slack. # ############################### from exchangelib import DELEGATE, IMPERSONATION, Account, Credentials, ServiceAccount, \ EWSDateTime, EWSTimeZone, Configuration, NTLM, CalendarItem, Message, \ Mailbox, Attendee, Q, ExtendedProperty, FileAttachment, ItemAttachment, \ HTMLBody, Build, Version from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter from exchangelib import UTC_NOW import re import getopt, sys import base64 import requests import json import datetime import time import urllib3 import configparser try: configcfg = configparser.ConfigParser() configcfg.read("config.ini") slackApp_postUser=configcfg["info"]["slackApp_postUser"] username=configcfg["info"]["username"] # password=str(base64.b64decode(configcfg["info"]["password"]),"utf-8") password=configcfg["info"]["password"] slack_channel = configcfg["info"]["slack_channel"] mail_server = configcfg["info"]["mail_server"] # print(username,password,slack_channel,slackApp_postUser) # slackAPP_postMessageAPI = config.get("info", "slackAPP_postMessageAPI") # slackApp_postUser = config.get("info", "slackApp_postUser") except: print("ERR : no configuration \n") print("please create configuration file\n") print("configuration must be renamed config.ini\n") print("the script will be exit in 5 second\n") time.sleep(5) # 轉換時間的格式 def timestamp(timestr): time_array = time.strptime(timestr, "%Y-%m-%d %H:%M:%S") return time.mktime(time_array) cred = Credentials(username, password) config = Configuration(server=mail_server, credentials=cred, auth_type=NTLM) account = Account(primary_smtp_address=username, config=config,autodiscover=False,access_type=DELEGATE) email_address = ["1451032707@qq.com"] with open("timestamp", "r") as f: beforce_timestamp = float(f.read()) while True: time.sleep(5) try: for item in account.inbox.all().order_by('-datetime_received')[:20]: alertinfo = ":slack:郵件主題: %s" % item.subject data = { 'as_user': "true", "channel": "#devops", "text": alertinfo, } latest_timestamp = timestamp(str(item.datetime_received).replace("+00:00", "")) # 讀取最后一次獲得郵件的時間 if float(latest_timestamp) > float(beforce_timestamp): # 把最后一次讀取郵件的時間寫入文件 with open("timestamp", "w") as f: f.write(str(latest_timestamp)) beforce_timestamp = latest_timestamp if item.sender not in email_address: header = {'Content-Type': 'application/json', 'Authorization': '$slack_token'} #注意修改這里的Token netRequest = requests.post(url="https://slack.com/api/chat.postMessage", headers=header, data=json.dumps(data), timeout=(10, 30)) else: continue except urllib3.exceptions: break except requests.exceptions: break
以上的功能主要是把發送到outlook郵箱里面的監控告警過濾出來,發送到Slack的channel中
需要的python module的版本requirements.txt
slackclien==1.2.1 exchangelib=1.10.7 requests==2.18.4 configparser==3.5.0
需要的配置文件的格式為config.ini
[info] username = $EMAIL_ADDRESS password = $EMAIL_PASSWORD slack_channel = $CHANNEL slackApp_postUser = @Marion mail_server= $EMAIL_SERVER_ADDR
時間戳文件timestamp
,用這個臨時文件的目的是為了方便遷移腳本后也能不漏讀
1524462419.0
FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ COPY timestamp ./ COPY config.ini ./ COPY test2.py ./ RUN pip install --no-cache-dir -r requirements.txt CMD [ "python", "./test2.py" ]
root@ts:/home/xue.long/mailv1# ls config.ini Dockerfile iaasslack.yaml requirements.txt test1.py test2.py test.py timestamp root@ts:/home/xue.long/mailv1# docker build -t bluerdocker/alertnotify:v2 -f ./Dockerfile .
docker run -d bluerdocker/alertnotify:v2
以上就是如何用Python模擬發送Slack消息,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。