1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python自动化高效办公第二期 带你项目实战【二】{数据可视化 发送邮件(定时任务监

python自动化高效办公第二期 带你项目实战【二】{数据可视化 发送邮件(定时任务监

时间:2020-02-03 21:36:41

相关推荐

python自动化高效办公第二期 带你项目实战【二】{数据可视化 发送邮件(定时任务监

相关文章和数据源:

python自动化高效办公第二期,带你项目实战【一】{excel数据处理、批量化生成word模板、pdf和ppt等自动化操作}

Python自动化办公--Pandas玩转Excel【一】

Python自动化办公--Pandas玩转Excel数据分析【二】

Python自动化办公--Pandas玩转Excel数据分析【三】

python处理Excel实现自动化办公教学(含实战)【一】

python处理Excel实现自动化办公教学(含实战)【二】

python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】

python入门之后须掌握的知识点(模块化编程、时间模块)【一】

python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】

spandas玩转excel码源.zip-数据挖掘文档类资源-CSDN下载

Python自动化办公(最新版!有源代码,).zip-

Python自动化办公(可能是B站内容最全的!有源代码,).zip-

上面是对应码源,图方便的话可以直接下载都分类分好了,当然也可以看文章。

1.数据可视化

参考上面pandas文章即可

2.python发送邮件

2.1 发送普通邮件

import smtplibfrom smtplib import SMTP_SSLfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerhost_server = '' #新浪邮箱smtp服务器sender_sina = 'your_email@' #发件人邮箱pwd = 'your_pwd' #密码sender_sina_mail = 'your_email@' #发件人邮箱receiver = 'others_email@' #收件人邮箱mail_title = '这是标题'mail_content = '这是正文'msg = MIMEMultipart() #邮件主题msg['Subject'] = Header(mail_title, 'utf-8') #邮件主题msg['From'] = sender_sina_mailmsg['To'] = Header('mail_title', 'utf-8')msg.attach(MIMEText(mail_content, 'plain', 'utf-8')) #邮件正文smtp = SMTP_SSL(host_server) #ssl登录smtp.login(sender_sina,pwd)smtp.sendmail(sender_sina_mail,receiver,msg.as_string())smtp.quit()

2.2.发送带附件邮件

import smtplibfrom smtplib import SMTP_SSLfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationfrom email.header import Headerhost_server = ''sender_sina = 'your_email@'pwd = 'your_pwd'sender_sina_mail = 'your_email@'receiver = 'others_email@'mail_title = '这是标题'mail_content = '这是正文'msg = MIMEMultipart()msg['Subject'] = Header(mail_title, 'utf-8')msg['From'] = sender_sina_mailmsg['To'] = Header('mail_title', 'utf-8')msg.attach(MIMEText(mail_content, 'html', 'utf-8')) #html格式# 添加附件attachment = MIMEApplication(open('student.xls', 'rb').read())attachment.add_header('Content-Disposition', 'attachment', filename='student.xls')msg.attach(attachment)try:smtp = SMTP_SSL(host_server)smtp.set_debuglevel(1) #0关闭 1开启smtp.ehlo(host_server) #和服务器确定状态smtp.login(sender_sina, pwd)smtp.sendmail(sender_sina_mail, receiver, msg.as_string())smtp.quit()print('success')except smtplib.SMTPException:print('error')

2.3 利用zmail接受邮件

安装

pip install zmail

import zmailserver = zmail. server(' pythonauto@', ' python1234' )mail = server.get_ latest()zmail.show(mail)zmail.show(mail["subject"])#只取标题

2.4 计划任务进行邮箱监控

2.4.1 windows下计划任务设置

首先我们可以同级目录下建一个run.text文档,然后输入:main.py

然后后缀名改掉改成bat

然后在windows下搜索计划任务

新建一个任务库:python

创建一个任务:

新建一个触发器:

操作:添加脚本

之后只需要等待即可。时间到了就会执行main.py

2.4.2计划任务监控邮箱

通过id判断邮件数量:

同级目录:新建一个id的text:写入当前邮件id

定时执行上述文件方法相同。

3.打造python聊天机器人(基于微信、钉钉)

3.1 API调用教学

BAT开源很多的,

以百度云为例:

API商城_API_API接口大全_API一站式采购基地百度智能云API商城-API一站式采购基地,API商城提供天气查询API、实名认证API、短信验证码、OCR识别等海量API服务。选购API服务,首选百度智能云API商城。/

选择一个API然后购买【天气预报为例】

API参数以及使用指南官网也有给出教程

购买完成之后可以在买家中心的管理控制台中找到这个订单。

基本信息中有个AppCode,点击显示秘钥就能看的到了。

然后去调试

我们也可以进入这个页面中调试,headers的写法相同。

结果如下:

在本地运行就是:

#!/usr/bin/env python# -*- coding: utf-8 -*-import requests# 天气查询-按地名 Python示例代码if __name__ == '__main__':url = 'https://weatherquery./weather/query/by-area'params = {}params['area'] = '杭州'params['areaId'] = ''headers = {'Content-Type': 'application/json;charset=UTF-8','X-Bce-Signature': 'AppCode/你的appcode'}r = requests.request("POST", url, params=params, headers=headers)print(r.content)

其余的api调用同理。

3.2 python微信自动化

3.2.1 采坑

安装库:

pip install itchat

import itchatitchat.auto_login(enableCmdQR=True)

运行程序:在vscode会得到下面的图,一个不完整的二维码

之后我们去相应文件夹,cmd进入环境,运行我们创建的文件即可:

python main.py

登录后报错:

xml.parsers.expat.ExpatError: mismatched tag: line 63, column 4

搜了一下解决方案:

问题解决:xml.parsers.expat.ExpatError: mismatched tag: line 63, column 4(itchat)_此杭非彼航的博客-CSDN博客文章目录问题描述相关代码尝试解决(暂未解决)总结问题描述通过itchat生成二维码扫码后报错Traceback (most recent call last): File "itchat_app.py", line 59, in <module> itchat.auto_login(hotReload=True, enableCmdQR=2, statusStorageDir='./logs/loginInfo.pkl') File "c:\anaconda3\envs/ljhsq/article/details/122756196

<p class="msg-desc">由于安全原因,此微信号不能使用网页版微信。你可以前往微信官网 / 下载客户端登录。</p>

个人建议:不要把时间浪费到itchat上了,itchat-uos我下了也不行,建议直接换个方法。

3.2.2wxpy部分人可用

参考文章:

从零开始微信机器人(二):使用图灵机器人和api.ai相关接口 - 简书

主页有其余四篇文章介绍微信机器人

gg网页版的都不行,下面知乎有位做的不错的这里推荐一下:

基于hook的python机器人,彻底取代itchat - 知乎本文档部分由itchat与wxpy的开发文档修改得出 /smallevilbeast/wechat_pc_api已经有人做了更好的机器人,本文停更 本文链接: /p/114214846 禁止不规范转载WechatBot…/p/114214846

m微信机器人码源,

wxpy简单程序我还是提供一下:

获取好友地理位置

# pip install wxpyfrom wxpy import *# 初始化一个机器人对象# cache_path缓存路径,给定值为第一次登录生成的缓存文件路径# bot = Bot()bot = Bot(console_qr=-2, cache_path=True) # 移植到linux,console_qr设置True和2都无法扫描登录,设置-2之后正常登录。# 获取好友列表(包括自己)my_friends = bot.friends(update=False)'''stats_text 函数:帮助我们简单统计微信好友基本信息简单的统计结果的文本 :param total: 总体数量 :param sex: 性别分布 :param top_provinces: 省份分布 :param top_cities: 城市分布 :return: 统计结果文本'''print(my_friends.stats_text())

获取好友头像

from wxpy import *import os,sys# 初始化机器人,扫码登陆微信,适用于Windows系统bot = Bot()# # Linux系统,执行登陆请调用下面的这句# bot = Bot(console_qr=2, cache_path="botoo.pkl"# 获取当前路径信息image_dir = os.getcwd()+'\\' + "FriendImgs\\"# 如果保存头像的FriendImgs目录不存在就创建一个if not os.path.exists(image_dir):os.mkdir(image_dir)os.popen('explorer ' + image_dir)my_friends = bot.friends(update=True)# 获取好友头像信息并存储在FriendImgs目录中n = 0for friend in my_friends:print(friend)image_name = image_dir + str(n) + '.jpg'friend.get_avatar(image_name)n = n + 1

聊天机器人

from wxpy import *import requests, json, timeimport datetime# 创建机器人bot = Bot()# bot = Bot(console_qr=-2, cache_path=True) # 移植到linux,console_qr设置True和2都无法扫描登录,设置-2之后正常登录。@bot.register(Group)def print_messages(msg):# 登陆微信的用户群昵称user_name = msg.sender.self.name# 信息内容content = msg.raw['Content']# 发信息好友名称friend_name = msg.raw['ActualNickName']# 打印出对方说的话print("{} - 说 - {}".format(friend_name,content))# 类型type = msg.raw['Type']# 请自行添加关键词对应的内容keywords_dic = {'你好': '你好,我是机器人','写作变现': '写作变现系列,真香!/A6xHLdYK','自动化办公': '0基础如何学习自动化办公? /A6xHPxpx',}#把昵称,改为你自己的,某个群里昵称避免所有群都回复if '昵称' in user_name:# 以下代码,不要修改for key in keywords_dic.keys():if key in content:res_keyword_reply = '''{}'''reply_content = res_keyword_reply.format(keywords_dic[key])return reply_content# 堵塞线程,并进入 Python 命令行# embed()bot.join()

3.3 钉钉机器人

配置机器人

步骤如下:先创建一个群:智能群助手--添加机器人--自定义

需要注意的是,在安全设置一栏里,我们选择加签的方式来验证,在此说明一下,钉钉机器人的安全策略有三种,第一种是使用关键字,就是说你推送的消息里必须包含你创建机器人时定义的关键字,如果不包含就推送不了消息,第二种就是使用加密签名,第三种是定义几个ip源,非这些源的请求会被拒绝,综合来看还是第二种又安全又灵活。

代码提供:

import timeimport hmacimport hashlibimport base64import urllib.parsetimestamp = str(round(time.time() * 1000))secret = 'SECfaa7f034bf7b25bcaeccfcce82e5f712c8e1bdcbf16a0934143f542d31058363' #添加你的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(base64.b64encode(hmac_code))# print(timestamp)# print(sign)import requests,json #导入依赖库headers={'Content-Type': 'application/json'} #定义数据类型#添加你的webhook = '/robot/send?access_token=2cc56c65710552bb82d2a23ff87d85b8ba42e171e2c8c5c92528765ea9a90248&timestamp='+timestamp+"&sign="+sign#定义要发送的数据#"at": {"atMobiles": "['"+ mobile + "']"data = {"msgtype": "text","text": {"content": '欢迎小可爱们'},"isAtAll": True}res = requests.post(webhook, data=json.dumps(data), headers=headers) #发送post请求print(res.text)

3.4 机器人支持格式

参考文章:

/tags/Ntzacg4sNzkzNzMtYmxvZwO0O0OO0O0O.html

复制机器人的Webhook,用于向这个群发送消息

/robot/send?access_token=XXXXXX

3.4.1 text格式

{"at": {"atMobiles":["180xxxxxx"],"atUserIds":["user123"],"isAtAll": false},"text": {"content":"我就是我, @XXX 是不一样的烟火"},"msgtype":"text"}

实例-关键词

import jsonimport requestsurl = '/robot/send?access_token=2f43cdbca48d42b266632aa52aaf2ef10794d5de625f8c2aa0a9b3c3d4eb99b3'headers = {"Content-Type": "application/json;charset=utf-8"}json_ = {"at": {"isAtAll": True},"text": {"content": "打卡"},"msgtype": "text"}# 将dict转为str类型string_text_msg = json.dumps(json_)res = requests.post(url, data=string_text_msg, headers=headers, verify=False)print(res.json())

3.4.2 link类型

{"msgtype": "link", "link": {"text": "这个即将发布的新版本", "title": "时代的火车向前开", "picUrl": "", "messageUrl": "/s"}}

实例-关键词

import jsonimport requestsurl = '/robot/send?access_token=xx'headers = {"Content-Type": "application/json;charset=utf-8"}json_ = {"msgtype": "link","link": {"text": "这个即将发布的新版本","title": "打卡 时代的火车向前开","picUrl": "","messageUrl": "/s"}}string_text_msg = json.dumps(json_)res = requests.post(url, data=string_text_msg, headers=headers, verify=False)print(res.json())

\

3.4.3、Markdown格式

{"msgtype": "markdown","markdown": {"title":"杭州天气","text": "#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > ![screenshot](/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n > ###### 10点20分发布 [天气]() \n"},"at": {"atMobiles": ["150XXXXXXXX"],"atUserIds": ["user123"],"isAtAll": false}}

实例-关键词

import jsonimport requestsurl = '/robot/send?access_token=xx'headers = {"Content-Type": "application/json;charset=utf-8"}json_ = {"msgtype": "markdown","markdown": {"title": "上海天气","text": "打卡 上海天气 @18056540512 \n > 9度,西北风1级,空气良89,相对温度73%\n > ![screenshot](/image_search/src=http%3A%2F%%2Foriginal_pic%2F18%2F10%2F23%2F17e928fa76a63d0908fff97b978d7b27.jpg&refer=http%3A%2F%&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096430&t=eac289fecb0e78922c4e9b33d3d1de7e)\n > ###### 10点20分发布 [天气](http://weathernew./weathernew/pc?query=%E4%B8%8A%E6%B5%B7%E5%A4%A9%E6%B0%94&srcid=4982&city_name=%E4%B8%8A%E6%B5%B7&province_name=%E4%B8%8A%E6%B5%B7) \n"},"at": {"atMobiles": ["18056540xxxx"],"atUserIds": ["user123"],"isAtAll": False}}string_text_msg = json.dumps(json_)res = requests.post(url, data=string_text_msg, headers=headers, verify=False)print(res.json())

3.4.4、整体跳转ActionCard类型

{"actionCard": {"title": "乔布斯 20 年前想打造一间苹果咖啡厅","text": "![screenshot]","btnOrientation": "0","singleTitle": "打卡 阅读全文","singleURL": "http://xxxx"},"msgtype": "actionCard"}

3.4.5、独立跳转ActionCard类型

{"msgtype": "actionCard","actionCard": {"title": "打卡 我 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身","text": "![screenshot](/image_search/src=http%3A%2F%2F5b0988e595225.%2Fimages%2F0114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fce8963ef750babd9a73522050) \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划","btnOrientation": "0","btns": [{"title": "去点饭","actionURL": "/w/#/login"},{"title": "不感兴趣","actionURL": "/w/#/login"}]}}

实例-关键词

import jsonimport requestsurl = '/robot/send?access_token=xxx'headers = {"Content-Type": "application/json;charset=utf-8"}json_ = {"msgtype": "actionCard","actionCard": {"title": "打卡 我 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身","text": "![screenshot](/image_search/src=http%3A%2F%2F5b0988e595225.%2Fimages%2F0114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fce8963ef750babd9a73522050) \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划","btnOrientation": "0","btns": [{"title": "去点饭","actionURL": "/w/#/login"},{"title": "不感兴趣","actionURL": "/w/#/login"}]}}string_text_msg = json.dumps(json_)res = requests.post(url, data=string_text_msg, headers=headers, verify=False)print(res.json())

3.4.6、FeedCard类型

{"msgtype":"feedCard","feedCard": {"links": [{"title": "悠饭点餐1","messageURL": "/","picURL": "/image_search/src=http%3A%2F%2F5b0988e595225.%2Fimages%2F0114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fce8963ef750babd9a73522050"},{"title": "打卡 悠饭点餐2","messageURL": "/","picURL": "/image_search/src=http%3A%2F%2F5b0988e595225.%2Fimages%2F0114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fce8963ef750babd9a73522050"}]}}

实例-关键词

import jsonimport requestsurl = '/robot/send?access_token=xx'headers = {"Content-Type": "application/json;charset=utf-8"}json_ = {"msgtype":"feedCard","feedCard": {"links": [{"title": "悠饭点餐1","messageURL": "/","picURL": "/image_search/src=http%3A%2F%2F5b0988e595225.%2Fimages%2F0114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fce8963ef750babd9a73522050"},{"title": "打卡 悠饭点餐2","messageURL": "/","picURL": "/image_search/src=http%3A%2F%2F5b0988e595225.%2Fimages%2F0114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fce8963ef750babd9a73522050"}]}}string_text_msg = json.dumps(json_)res = requests.post(url, data=string_text_msg, headers=headers, verify=False)print(res.json())

3.5、常见问题

// 消息内容中不包含任何关键词{"errcode":310000,"errmsg":"keywords not in content"}// timestamp 无效{"errcode":310000,"errmsg":"invalid timestamp"}// 签名不匹配{"errcode":310000,"errmsg":"sign not match"}// IP地址不在白名单{"errcode":310000,"errmsg":"ip X.X.X.X not in whitelist"}

3.5.1、集成

PostMan -- Newman、Monitor定时自动监控接口JMeter -- Jenkins、Shell..Python -- sleep、threading模块中的Timer、sched模块

Python 定时任务的实现方式 - 枫飞飞 - 博客园

3.5.2、实例讲解

钉钉接口

import jsonimport urllibimport requestsimport timeimport hmacimport hashlibimport base64from requests.packages.urllib3.exceptions import InsecureRequestWarningrequests.packages.urllib3.disable_warnings(InsecureRequestWarning)class Ding:"""钉钉机器人"""def __init__(self):# 测试群-钉钉机器人的webhook地址self.url = '/robot/send?access_token=xxx'# secretself.secret = 'xxx'def check_secret(self, secret):"""生成secret加签:param secret::return:"""timestamp = str(round(time.time() * 1000))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))return "&timestamp=" + timestamp + "&sign=" + signdef send_message(self, message=None):"""发送钉钉消息:param message: 发送内容:return:"""test_url = self.url + self.check_secret(f"{self.secret}")headers = {"Content-Type": "application/json;charset=utf-8"}message = messagestring_text_msg = {"msgtype": "text","text": {"content": message},"at": {"isAtAll": 1 # 如果需要@所有人,这些写1}}string_text_msg = json.dumps(string_text_msg)with requests.post(test_url, data=string_text_msg, headers=headers, verify=False) as res:return resdef send_link(self, message_url):"""发送钉钉链接:param message_url: 指定的url:return:"""test_url = self.url + self.check_secret(f"{self.secret}")headers = {"Content-Type": "application/json;charset=utf-8"}string_link_msg = {"msgtype": "link","link": {"text": "今天吃点啥呢?去悠饭看看吧~","title": "悠饭点饭啦~","picUrl": "/crop.0.0.891.891.180/006Gos8ply8fxgn9viu2fj30ot0orgna.jpg?KID=imgbed,tva&Expires=1626279933&ssig=dsK87pjAuN","messageUrl": message_url}}string_text_msg = json.dumps(string_link_msg)with requests.post(test_url, data=string_text_msg, headers=headers, verify=False) as res:return res

Task任务

from common.robot import Dingimport datetimeimport pytzrun_time = datetime.datetime.now(pytz.timezone('PRC')).strftime("%Y-%m-%d %H:%M:%S")def lunch():"""提醒:return:"""remind = "朋友们,可以准备准备去吃饭啦~"Ding().send_message(f"饭点时间到了 {remind}")return reminddef dinner():"""提醒晚上点饭:return:"""link = 'http://xxx'Ding().send_link(link)

执行方式一:

from task.youfan import lunch, dinnerimport datetimeimport pytzfrom apscheduler.schedulers.blocking import BlockingSchedulerrun_time = datetime.datetime.now(pytz.timezone('PRC')).strftime("%Y-%m-%d %H:%M:%S")scheduler = BlockingScheduler(timezone="Asia/Shanghai")print("start...")scheduler.add_job(lunch, 'cron', day_of_week='mon-fri', hour=11, minute=30, second=00)scheduler.add_job(dinner, 'cron', day_of_week='mon-fri', hour=16, minute=30, second=00)scheduler.start()print("end...")

执行方式二:

# 在具体的函数中添加 装饰器from common.robot import Dingimport datetimeimport pytzfrom apscheduler.schedulers.blocking import BlockingSchedulerrun_time = datetime.datetime.now(pytz.timezone('PRC')).strftime("%Y-%m-%d %H:%M:%S")scheduler = BlockingScheduler(timezone="Asia/Shanghai")@scheduler.scheduled_job('cron', day_of_week='mon-fri', hour=11, minute=30, second=00)def lunch():"""提醒:return:"""remind = "朋友们,可以准备准备去吃饭啦~"Ding().send_message(f"饭点时间到了 {remind}")return remind@scheduler.scheduled_job('cron', day_of_week='mon-fri', hour=16, minute=30, second=00)def dinner():"""提醒晚上点饭:return:"""link = '/w/#/login'Ding().send_link(link)

3.5.3、scheduler简单使用

import timefrom apscheduler.schedulers.blocking import BlockingSchedulerdef my_job():"""定义一个方法"""print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))# 创建一个BlockingScheduler(调度器)对象sched = BlockingScheduler()# 添加一个作业job_store,第一个参数是可调度的执行,第二个是调用方式(interval,date,cron),第三个是interval中指定的时间sched.add_job(my_job, 'interval', seconds=5)try:# 启动调度器,注意:启动后就不能修改配置参数了,运行程序需要写在start方法前面。sched.start()except (KeyboardInterrupt, SystemExit):sched.shutdown()

sched = BlockingScheduler()

sched.add_job(func,'interval','date','cron')# datefrom datetime import datetimefrom datetime import datefrom apscheduler.schedulers.blocking import BlockingSchedulerdef job(text):print(text)scheduler = BlockingScheduler(timezone="Asia/Shanghai")# 在 -8-30 运行一次 job 方法# args=['这个是方法的一个入参']scheduler.add_job(job, 'date', run_date=date(, 7, 20), args=['text1'])# 在 -8-30 01:00:00 运行一次 job 方法scheduler.add_job(job, 'date', run_date=datetime(, 7, 20, 11, 38, 0), args=['text2'])# 在 -8-30 01:00:01 运行一次 job 方法scheduler.add_job(job, 'date', run_date='-7-20 11:39:00', args=['text3'])scheduler.start()

sched.add_job(func,'interval','date','cron')# interval# 在 -07-19 20:15:00至-07-20 22:17:00期间,每隔1分30秒 运行一次 job 方法scheduler.add_job(job, 'interval', minutes=1, seconds = 30, start_date='-08-29 22:15:00', end_date='-08-29 22:17:00')

sched.add_job(func,'interval','date','cron')# cron# 在每天22点,每隔 1分钟 运行一次 job 方法scheduler.add_job(job, 'cron', hour=22, minute='*/1')# 在每天22和23点的25分,运行一次 job 方法scheduler.add_job(job, 'cron', hour='22-23', minute='25')# 支持表达式的*表示任何*/a表示每a,执行一次a-b表示 a至b的范围内a-b/c表示a-b范围内每执行一次last x表示本月最后一个工作日执行last表示本月的最后一天执行

4.开通腾讯AI聊天机器人

腾讯 AI 开放平台腾讯AI开放平台汇聚顶尖技术,专业人才和行业资源,依托腾讯AI Lab、腾讯云、优图实验室及合作伙伴强大的AI技术能力,升级锻造创业项目。通过腾讯品牌、创投和流量广告等资源,为AI技术及产品找到更多的应用场景,实现产品从打造到引爆的全过程。/

编写调用聊天接口代码(文件名:interface.py)

import hashlibimport timeimport randomimport stringfrom urllib.parse import quotedef curlmd5(src):m = hashlib.md5(src.encode('UTF-8'))# 将得到的MD5值所有字符转换成大写return m.hexdigest().upper()def get_params(plus_item):# 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) t = time.time()time_stamp = str(int(t))# 请求随机字符串,用于保证签名不可预测 nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))# 应用标志,这里修改成自己的id和key app_id = '你的id号码'app_key = '你的key号码'params = {'app_id': app_id,'question': plus_item,'time_stamp': time_stamp,'nonce_str': nonce_str,'session': '10000'}sign_before = ''# 要对key排序再拼接 for key in sorted(params):# 键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8。quote默认大写。 sign_before += '{}={}&'.format(key, quote(params[key], safe=''))# 将应用密钥以app_key为键名,拼接到字符串sign_before末尾 sign_before += 'app_key={}'.format(app_key)# 对字符串sign_before进行MD5运算,得到接口请求签名 sign = curlmd5(sign_before)params['sign'] = signreturn params

编写运行代码,直接复制下面的就行~

import requestsimport interfacedef get_content(plus_item):# 聊天的API地址url = "https://api./fcgi-bin/nlp/nlp_textchat"# 获取请求参数plus_item = plus_item.encode('utf-8')payload = interface.get_params(plus_item)# r = requests.get(url,params=payload)r = requests.post(url, data=payload)return r.json()["data"]["answer"]if __name__ == '__main__':while True:comment = input('我:')if comment == 'q':breakanswer = get_content(comment)print('机器人:' + answer)

云端部署参考这边文章

M5 | Python+AI,实现云端部署(源代码和步骤)倒数第2个步骤。https://mp./s?__biz=MzUzNTc5NjA4NQ==&mid=2247485298&idx=2&sn=970ff8e9a7c49905465e9b48c68a4417&chksm=fa814768cdf6ce7e7a75eb56ffe9713b79c44258fd25e886f787104e85c96cc2fa27c1303cdc&scene=21#wechat_redirect

python自动化高效办公第二期 带你项目实战【二】{数据可视化 发送邮件(定时任务监控) python聊天机器人(基于微信 钉钉)}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。