91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用Python模擬發送Slack消息

發布時間:2021-12-04 14:39:01 來源:億速云 閱讀:139 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關如何用Python模擬發送Slack消息,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

有一個看似很簡單的小需求,但是對于一個Python入門的新手來講還是有些難度的,雖然人家也有寫好的代碼,但是自己就是不想直接去搬人家的代碼,在不懂得時候還裝的那么高大上,沒辦法,就是想自己折騰折騰,別人能寫的出來,就說明在某些地方肯定有相關的文章,所以不要怕折騰…

1 一些Slack相關的鏈接

  • Python slackclient

  • API Methods

  • Slack Token

2 如何能碼出功能

  1. 寫代碼,只要是有關平臺的,首先在平臺的官網上搜搜有沒有相關的api文檔之類的

  2. 其次在github上搜搜,有沒有官方的開源模塊或者第三方模塊

  3. 在這就是Google你的需求了

3 找到方法如何運用

3.1 在瀏覽器中模擬方法請求

這里有一個參考的文章

  • 火狐的poster下載地址

3.2 自己寫代碼

用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列表,怎么做?

  1. 是不是首先要在API Methods中找到獲取列表方法

  2. 可以在次使用上面的代碼,換一個獲取channel列表的方法就可以了

  3. 至于返回的對象是什么,可以通過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

3.3 腳本運行在容器中

3.3.1 Dockerfile
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" ]
3.3.2 構建鏡像
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 .
3.3.3 運行容器
docker run -d bluerdocker/alertnotify:v2

以上就是如何用Python模擬發送Slack消息,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屯门区| 筠连县| 海盐县| 临清市| 北流市| 明光市| 栾城县| 错那县| 广昌县| 漾濞| 分宜县| 五家渠市| 谷城县| 墨玉县| 白玉县| 林口县| 甘洛县| 攀枝花市| 宜阳县| 普安县| 临洮县| 磴口县| 张家界市| 尼木县| 石嘴山市| 星座| 轮台县| 渭南市| 广东省| 恩平市| 濉溪县| 兰溪市| 恭城| 丹寨县| 许昌市| 淳安县| 新巴尔虎右旗| 满城县| 安丘市| 霍山县| 湘潭县|