Python基于釘釘監(jiān)控發(fā)送消息提醒的實(shí)現(xiàn)
一.使用前設(shè)置釘釘
1.既然是使用釘釘消息提醒,那么第需要有釘釘。
2.第二步自定義機(jī)器人是群機(jī)器人,所以需要有個(gè)群。

3.添加機(jī)器人,點(diǎn)擊頭像>機(jī)器人管理>自定義機(jī)器人

4.給機(jī)器人取個(gè)名字>選擇添加到哪個(gè)群組>選擇適合自己的安全設(shè)置>完成

二.安全設(shè)置
1.有三種安全設(shè)置方式:自定義關(guān)鍵詞、加簽、IP地址。
2.自定義關(guān)鍵詞:簡(jiǎn)單來(lái)說(shuō)就是你發(fā)送的內(nèi)容必須包含這個(gè)關(guān)鍵詞,才能發(fā)送成功。
3.加簽:就是生成你特定的簽名,在程序中,進(jìn)行加密生成參數(shù),請(qǐng)求時(shí),攜帶此參數(shù),才能發(fā)送成功。
4.IP地址:就是在設(shè)置的指定IP地址范圍內(nèi)進(jìn)行請(qǐng)求,才能發(fā)送成功。
5.選擇適合自己的安全設(shè)置方式,這里選擇的是加簽,即配置好后,代碼在使用、復(fù)用、遷移等方面會(huì)稍加靈活一點(diǎn),如果在公司,按實(shí)際需求選擇就行。把這個(gè)簽名記錄下來(lái),待會(huì)需要它來(lái)加密生成參數(shù)。
6.點(diǎn)擊完成之后,就可以看到自己的Webhook,記下來(lái),待會(huì)需要用到。

三.發(fā)送請(qǐng)求
1.首先,在__init__方法中,配置好機(jī)器人的信息。
def __init__(self):
# 安全設(shè)置使用加簽方式
timestamp = str(round(time.time() * 1000))
secret = 'SEC7******fe0a' # 剛才記錄下來(lái)的簽名
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 以上就是加簽的安全配置,其它安全設(shè)置,無(wú)需配置以上信息
# webhook地址
webhook = 'https://oapi.dingtalk.com/robot/send?******' # 剛才記錄的webhook
self.webhook = "{}×tamp={}&sign={}".format(webhook, timestamp, sign) # 如果你的不是加簽的安全方式,即可省去 ×tamp={}&sign={} 部分參數(shù)
# 配置請(qǐng)求headers
self.headers = {
"Content-Type": "application/json",
"Charset": "UTF-8" # 發(fā)起POST請(qǐng)求時(shí),必須將字符集編碼設(shè)置成UTF-8。
}
2.其次,發(fā)送請(qǐng)求
def send_req(self, message):
"""
發(fā)送請(qǐng)求
:param message: 你的消息體
:return:
"""
# 將請(qǐng)求數(shù)據(jù)進(jìn)行json數(shù)據(jù)封裝
form_data = json.dumps(message)
# 發(fā)起請(qǐng)求
res_info = requests.post(url=self.webhook, headers=self.headers, data=form_data)
# 打印返回的結(jié)果
print('郵件發(fā)送結(jié)果:', res_info.json())
print('通知成功!' if (res_info.json())['errmsg'] == 'ok' else '通知失??!')
3.再次,構(gòu)造消息體,釘釘給出6種消息類型體
3.1.第一種、text型文本數(shù)據(jù)
def send_text_msg(self, content, at_mobiles=None, is_at_all=False):
"""
發(fā)送text型文本數(shù)據(jù)
:param content: 消息內(nèi)容
:param at_mobiles: 傳入列表類型數(shù)據(jù),@出現(xiàn)在列表中的電話聯(lián)系人,如果群里沒(méi)有該聯(lián)系人,則不會(huì)@(可選參數(shù))
:param is_at_all: 是否@所有人,默認(rèn)不艾特(可選參數(shù))
:return:
"""
message = {
"msgtype": "text", # 消息類型
"text": {
"content": content
},
"at": {
"atMobiles": at_mobiles,
"isAtAll": is_at_all
}
}
self.send_req(message) # 發(fā)送消息
a.調(diào)用
DingTalkWarn().send_text_msg('測(cè)試消息發(fā)送!')
b.效果圖

3.2.第二種、link型文本數(shù)據(jù)
def send_link_msg(self, text, title, message_url, pic_url=None):
"""
發(fā)送link型文本數(shù)據(jù)
:param text: 消息內(nèi)容
:param title: 消息標(biāo)題
:param message_url: 點(diǎn)擊消息跳轉(zhuǎn)的URL
:param pic_url: 圖片URL(可選參數(shù))
:return:
"""
message = {
"msgtype": "link",
"link": {
"text": text, # 消息內(nèi)容,如果太長(zhǎng)只會(huì)部分展示
"title": title, # 消息標(biāo)題
"picUrl": pic_url, # 圖片URL
"messageUrl": message_url # 點(diǎn)擊消息跳轉(zhuǎn)的URL
}
}
self.send_req(message) # 發(fā)送消息
a.調(diào)用
DingTalkWarn().send_link_msg(
text='愛(ài)分享,愛(ài)折騰,愛(ài)生活,樂(lè)于分享自己在學(xué)習(xí)過(guò)程中的一些心得、體會(huì)。',
title='a'ゞ開(kāi)心果的博客',
message_url='https://blog.csdn.net/qq_45352972',
pic_url='https://cdn.jsdelivr.net/gh/King-ing/CDN/assets/background.png'
)
b.效果圖

3.3.第三種、markdown型文本數(shù)據(jù)
def send_markdown_msg(self, text, title, at_mobiles=None, is_at_all=False):
"""
發(fā)送markdown型文本數(shù)據(jù)
:param text: markdown格式內(nèi)容
:param title: 標(biāo)題
:param at_mobiles: 傳入列表類型數(shù)據(jù),@出現(xiàn)在列表中的電話聯(lián)系人,如果群里沒(méi)有該聯(lián)系人,則不會(huì)@(可選參數(shù))
:param is_at_all: 是否@所有人,默認(rèn)不艾特(可選參數(shù))
:return:
"""
message = {
"msgtype": "markdown",
"markdown": {
"title": title,
"text": text
},
"at": {
"atMobiles": at_mobiles,
"isAtAll": is_at_all
}
}
self.send_req(message) # 發(fā)送消息
a.調(diào)用
DingTalkWarn().send_markdown_msg(
text="## 這是一個(gè)二級(jí)標(biāo)題\n \n###### {}發(fā)布".format(time.strftime("%Y-%m-%d %H:%M:%S")),
title='markdown格式數(shù)據(jù)',
)
b.效果圖

3.4.第四種、整體跳轉(zhuǎn)ActionCard類型的數(shù)據(jù)
def send_all_action_card_msg(self, text, title, single_url, single_title='閱讀全文'):
"""
發(fā)送整體跳轉(zhuǎn)ActionCard類型的數(shù)據(jù)
:param text: markdown格式內(nèi)容
:param title: 標(biāo)題
:param single_url: 詳情url地址
:param single_title: 點(diǎn)擊進(jìn)入詳情按鈕
:return:
"""
message = {
"actionCard": {
"title": title,
"text": text,
"singleTitle": single_title,
"singleURL": single_url
},
"msgtype": "actionCard"
}
self.send_req(message) # 發(fā)送消息
a.調(diào)用
DingTalkWarn().send_all_action_card_msg(
text='## 抓包工具-mitmproxy前奏\n \n介紹:mitmproxy類似于Fiddler、Charles的功能,可以支持HTTP跟HTTPS請(qǐng)求,只不過(guò)它是通過(guò)控制臺(tái)的形式進(jìn)行操作。mitmproxy有兩個(gè)關(guān)聯(lián)的組件,mitmdump跟mitmweb。mitmdump是mitmproxy的命令行接口;mitmweb是一個(gè)web程序,可以通...',
title='抓包工具-mitmproxy前奏',
single_url='https://blog.csdn.net/qq_45352972/article/details/111028741?spm=1001.2014.3001.5501'
)
b.效果圖

3.5.第五種、獨(dú)立跳轉(zhuǎn)ActionCard類型的數(shù)據(jù)
def send_alone_action_card_msg(self, text, title, btn_orientation=1, btns=None):
"""
發(fā)送獨(dú)立跳轉(zhuǎn)ActionCard類型的數(shù)據(jù)
:param text: markdown格式文本數(shù)據(jù)
:param title: 標(biāo)題
:param btn_orientation: 0-按鈕豎直排列;1-按鈕橫向排列
:param btns: 列表數(shù)據(jù),里面存字符串,用來(lái)放按鈕信息跟鏈接,如下
[
{
"title": "內(nèi)容不錯(cuò)",
"actionURL": "https://www.dingtalk.com/"
},
{
"title": "不感興趣",
"actionURL": "https://www.dingtalk.com/"
}
]
:return:
"""
message = {
"msgtype": "actionCard",
"actionCard": {
"title": title,
"text": text,
"hideAvatar": "0",
"btnOrientation": btn_orientation,
"btns": btns
}
}
self.send_req(message) # 發(fā)送消息
a.調(diào)用
DingTalkWarn().send_alone_action_card_msg(
text='### 查看好友博客\n',
title='查看好友博客',
btns=[
{
"title": "不感興趣",
"actionURL": "https://www.dingtalk.com/"
},
{
"title": "我看看",
"actionURL": "https://blog.csdn.net/qq_45352972/"
}
]
)
b.效果圖

3.6.第六種、FeedCard類型數(shù)據(jù)
def send_feed_card_msg(self, links):
"""
發(fā)送FeedCard類型數(shù)據(jù)
:param links: 列表類型,格式如下
[
{
"title": "時(shí)代的火車向前開(kāi)1",
"messageURL": "https://www.dingtalk.com/",
"picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"
},
{
"title": "時(shí)代的火車向前開(kāi)2",
"messageURL": "https://www.dingtalk.com/",
"picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"
}
]
:return:
"""
message = {
"msgtype": "feedCard",
"feedCard": {
"links": links
}
}
self.send_req(message) # 發(fā)送消息
a.調(diào)用
DingTalkWarn().send_feed_card_msg(
links=[
{
"title": "爬蟲(chóng)之解決需要登錄的網(wǎng)站",
"messageURL": "https://blog.csdn.net/qq_45352972/article/details/113831698?spm=1001.2014.3001.5501",
"picURL": "https://img-blog.csdnimg.cn/20210217102838577.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzUyOTcy,size_16,color_FFFFFF,t_70#pic_center"
},
{
"title": "控制臺(tái)簡(jiǎn)單實(shí)現(xiàn)打印顯示進(jìn)度條",
"messageURL": "https://blog.csdn.net/qq_45352972/article/details/112191329?spm=1001.2014.3001.5501",
"picURL": "https://img-blog.csdnimg.cn/20210104184651355.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzUyOTcy,size_16,color_FFFFFF,t_70"
},
{
"title": "Email郵件提醒",
"messageURL": "https://blog.csdn.net/qq_45352972/article/details/109280576?spm=1001.2014.3001.5501",
"picURL": "https://img-blog.csdnimg.cn/2020102522530334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzUyOTcy,size_16,color_FFFFFF,t_70#pic_center"
}
]
)
b.效果圖

四.完整代碼
import base64
import hashlib
import hmac
import time
import urllib.parse
import requests
import json
class DingTalkWarn:
"""釘釘消息通知"""
def __init__(self):
# 安全設(shè)置使用加簽方式
timestamp = str(round(time.time() * 1000))
# 剛才記錄下來(lái)的簽名
secret = 'SEC24e640447734a80b9d430d678765a103652b33f334a69974cfda88415e601d22'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 以上就是加簽的安全配置,其它安全設(shè)置,無(wú)需配置以上信息
# webhook地址(剛才記錄的webhook)
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=5f56131ba70c78f42a10c7e9531c8da55def990313a4a74cfc87bf82c4bb8b7b'
# 如果你的不是加簽的安全方式,即可省去 ×tamp={}&sign={} 部分參數(shù)
self.webhook = "{}×tamp={}&sign={}".format(webhook, timestamp, sign)
# 配置請(qǐng)求headers
self.headers = {
"Content-Type": "application/json",
"Charset": "UTF-8" # 發(fā)起POST請(qǐng)求時(shí),必須將字符集編碼設(shè)置成UTF-8。
}
def send_text_msg(self, content, at_mobiles=None, is_at_all=False):
"""
發(fā)送text型文本數(shù)據(jù)
:param content: 消息內(nèi)容
:param at_mobiles: 傳入列表類型數(shù)據(jù),@出現(xiàn)在列表中的電話聯(lián)系人,如果群里沒(méi)有該聯(lián)系人,則不會(huì)@(可選參數(shù))
:param is_at_all: 是否@所有人,默認(rèn)不艾特(可選參數(shù))
:return:
"""
message = {
"msgtype": "text", # 消息類型
"text": {
"content": content
},
"at": {
"atMobiles": at_mobiles,
"isAtAll": is_at_all
}
}
self.send_req(message) # 發(fā)送消息
def send_link_msg(self, text, title, message_url, pic_url=None):
"""
發(fā)送link型文本數(shù)據(jù)
:param text: 消息內(nèi)容
:param title: 消息標(biāo)題
:param message_url: 點(diǎn)擊消息跳轉(zhuǎn)的URL
:param pic_url: 圖片URL(可選參數(shù))
:return:
"""
message = {
"msgtype": "link",
"link": {
"text": text, # 消息內(nèi)容,如果太長(zhǎng)只會(huì)部分展示
"title": title, # 消息標(biāo)題
"picUrl": pic_url, # 圖片URL
"messageUrl": message_url # 點(diǎn)擊消息跳轉(zhuǎn)的URL
}
}
self.send_req(message) # 發(fā)送消息
def send_markdown_msg(self, text, title, at_mobiles=None, is_at_all=False):
"""
發(fā)送markdown型文本數(shù)據(jù)
:param text: markdown格式內(nèi)容
:param title: 標(biāo)題
:param at_mobiles: 傳入列表類型數(shù)據(jù),@出現(xiàn)在列表中的電話聯(lián)系人,如果群里沒(méi)有該聯(lián)系人,則不會(huì)@(可選參數(shù))
:param is_at_all: 是否@所有人,默認(rèn)不艾特(可選參數(shù))
:return:
"""
message = {
"msgtype": "markdown",
"markdown": {
"title": title,
"text": text
},
"at": {
"atMobiles": at_mobiles,
"isAtAll": is_at_all
}
}
self.send_req(message) # 發(fā)送消息
def send_all_action_card_msg(self, text, title, single_url, single_title=u'閱讀全文'):
"""
發(fā)送整體跳轉(zhuǎn)ActionCard類型的數(shù)據(jù)
:param text: markdown格式內(nèi)容
:param title: 標(biāo)題
:param single_url: 詳情url地址
:param single_title: 點(diǎn)擊進(jìn)入詳情按鈕
:return:
"""
message = {
"actionCard": {
"title": title,
"text": text,
"singleTitle": single_title,
"singleURL": single_url
},
"msgtype": "actionCard"
}
self.send_req(message) # 發(fā)送消息
def send_alone_action_card_msg(self, text, title, btn_orientation=1, btns=None):
"""
發(fā)送獨(dú)立跳轉(zhuǎn)ActionCard類型的數(shù)據(jù)
:param text: markdown格式文本數(shù)據(jù)
:param title: 標(biāo)題
:param btn_orientation: 0-按鈕豎直排列;1-按鈕橫向排列
:param btns: 列表數(shù)據(jù),里面存字符串,用來(lái)放按鈕信息跟鏈接,如下
[
{
"title": "內(nèi)容不錯(cuò)",
"actionURL": "https://www.dingtalk.com/"
},
{
"title": "不感興趣",
"actionURL": "https://www.dingtalk.com/"
}
]
:return:
"""
message = {
"msgtype": "actionCard",
"actionCard": {
"title": title,
"text": text,
"hideAvatar": "0",
"btnOrientation": btn_orientation,
"btns": btns
}
}
self.send_req(message) # 發(fā)送消息
def send_feed_card_msg(self, links):
"""
發(fā)送FeedCard類型數(shù)據(jù)
:param links: 列表類型,格式如下
[
{
"title": "時(shí)代的火車向前開(kāi)1",
"messageURL": "https://www.dingtalk.com/",
"picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"
},
{
"title": "時(shí)代的火車向前開(kāi)2",
"messageURL": "https://www.dingtalk.com/",
"picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"
}
]
:return:
"""
message = {
"msgtype": "feedCard",
"feedCard": {
"links": links
}
}
self.send_req(message) # 發(fā)送消息
def send_req(self, message):
"""
發(fā)送請(qǐng)求
:param message: 你的消息體
:return:
"""
# 將請(qǐng)求數(shù)據(jù)進(jìn)行json數(shù)據(jù)封裝
form_data = json.dumps(message)
# 發(fā)起請(qǐng)求
res_info = requests.post(url=self.webhook, headers=self.headers, data=form_data)
# 打印返回的結(jié)果
print(u'郵件發(fā)送結(jié)果:', res_info.json())
print(u'通知成功!' if (res_info.json())['errmsg'] == 'ok' else u'通知失敗!')
if __name__ == '__main__':
"""測(cè)試發(fā)送消息"""
DingTalkWarn().send_text_msg(u'測(cè)試消息發(fā)送!')
"""
DingTalkWarn().send_link_msg(
text='愛(ài)分享,愛(ài)折騰,愛(ài)生活,樂(lè)于分享自己在學(xué)習(xí)過(guò)程中的一些心得、體會(huì)。',
title='a'ゞ開(kāi)心果的博客',
message_url='https://blog.csdn.net/qq_45352972',
pic_url='https://cdn.jsdelivr.net/gh/King-ing/CDN/assets/background.png'
)
DingTalkWarn().send_markdown_msg(
text="## 這是一個(gè)二級(jí)標(biāo)題\n \n###### {}發(fā)布".format(time.strftime("%Y-%m-%d %H:%M:%S")),
title='markdown格式數(shù)據(jù)',
)
DingTalkWarn().send_all_action_card_msg(
text='## 抓包工具-mitmproxy前奏\n \n介紹:mitmproxy類似于Fiddler、Charles的功能,可以支持HTTP跟HTTPS請(qǐng)求,只不過(guò)它是通過(guò)控制臺(tái)的形式進(jìn)行操作。mitmproxy有兩個(gè)關(guān)聯(lián)的組件,mitmdump跟mitmweb。mitmdump是mitmproxy的命令行接口;mitmweb是一個(gè)web程序,可以通...',
title='抓包工具-mitmproxy前奏',
single_url='https://blog.csdn.net/qq_45352972/article/details/111028741?spm=1001.2014.3001.5501'
)
DingTalkWarn().send_alone_action_card_msg(
text='### 查看好友博客\n',
title='查看好友博客',
btns=[
{"title": "不感興趣",
"actionURL": "https://www.dingtalk.com/"
},
{
"title": "我看看",
"actionURL": "https://blog.csdn.net/qq_45352972/"
}
]
)
DingTalkWarn().send_feed_card_msg(
links=[
{
"title": "爬蟲(chóng)之解決需要登錄的網(wǎng)站",
"messageURL": "https://blog.csdn.net/qq_45352972/article/details/113831698?spm=1001.2014.3001.5501",
"picURL": "https://img-blog.csdnimg.cn/20210217102838577.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzUyOTcy,size_16,color_FFFFFF,t_70#pic_center"
},
{
"title": "控制臺(tái)簡(jiǎn)單實(shí)現(xiàn)打印顯示進(jìn)度條",
"messageURL": "https://blog.csdn.net/qq_45352972/article/details/112191329?spm=1001.2014.3001.5501",
"picURL": "https://img-blog.csdnimg.cn/20210104184651355.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzUyOTcy,size_16,color_FFFFFF,t_70"
},
{
"title": "Email郵件提醒",
"messageURL": "https://blog.csdn.net/qq_45352972/article/details/109280576?spm=1001.2014.3001.5501",
"picURL": "https://img-blog.csdnimg.cn/2020102522530334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzUyOTcy,size_16,color_FFFFFF,t_70#pic_center"
}
]
)
"""
到此這篇關(guān)于Python基于釘釘監(jiān)控發(fā)送消息提醒的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 釘釘監(jiān)控發(fā)送消息提醒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jmeter并發(fā)執(zhí)行Python 腳本的完整流程
這篇文章主要介紹了Jmeter并發(fā)執(zhí)行 Python 腳本的問(wèn)題詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
python爬蟲(chóng)之你好,李煥英電影票房數(shù)據(jù)分析
這篇文章主要介紹了python爬蟲(chóng)之你好,李煥英電影票房數(shù)據(jù)分析,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲(chóng)的小伙伴們有一定的幫助,需要的朋友可以參考下2021-04-04
Python和perl實(shí)現(xiàn)批量對(duì)目錄下電子書(shū)文件重命名的代碼分享
這篇文章主要介紹了Python和perl實(shí)現(xiàn)批量對(duì)目錄下電子書(shū)文件重命名的代碼分享,本文同時(shí)給出了Python和perl兩種語(yǔ)言的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-11-11
對(duì)Django 轉(zhuǎn)發(fā)和重定向的實(shí)例詳解
今天小編就為大家分享一篇對(duì)Django 轉(zhuǎn)發(fā)和重定向的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
使用 Python 實(shí)現(xiàn)微信公眾號(hào)粉絲遷移流程
近日,因公司業(yè)務(wù)需要,需將原兩個(gè)公眾號(hào)合并為一個(gè),即要將其中一個(gè)公眾號(hào)(主要是粉絲)遷移到另一個(gè)公眾號(hào)。這篇文章主要介紹了使用 Python 實(shí)現(xiàn)微信公眾號(hào)粉絲遷移,需要的朋友可以參考下2018-01-01
創(chuàng)建SparkSession和sparkSQL的詳細(xì)過(guò)程
SparkSession 是 Spark SQL 的入口,Builder 是 SparkSession 的構(gòu)造器。 通過(guò) Builder, 可以添加各種配置,并通過(guò) stop 函數(shù)來(lái)停止 SparkSession,本文給大家分享創(chuàng)建SparkSession和sparkSQL的詳細(xì)過(guò)程,一起看看吧2021-08-08
Python基礎(chǔ)第三方模塊requests openpyxl
這篇文章主要為大家介紹了Python基礎(chǔ)第三方模塊requests openpyxl使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
解決python-redis-lock分布式鎖的問(wèn)題
這篇文章主要介紹了python-redis-lock分布式鎖的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10

