python自动化高效办公第二期,带你项目实战【二】{数据可视化、发送邮件(定时任务监控)、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下载https://download.csdn.net/download/sinat_39620217/85202114

Python自动化办公(2021最新版!有源代码,).zip-https://download.csdn.net/download/sinat_39620217/85213092

Python自动化办公(可能是B站内容最全的!有源代码,).zip-https://download.csdn.net/download/sinat_39620217/85213100

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


1.数据可视化

参考上面pandas文章即可

2.python发送邮件

2.1 发送普通邮件

import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

host_server = 'smtp.sina.com' #新浪邮箱smtp服务器
sender_sina = 'your_email@sina.com' #发件人邮箱
pwd = '' #密码

sender_sina_mail = 'your_email@sina.com' #发件人邮箱
receiver = 'others_email@sina.com'  #收件人邮箱
mail_title = '这是标题'
mail_content = '这是正文'

msg = MIMEMultipart() #邮件主题
msg['Subject'] = Header(mail_title, 'utf-8') #邮件主题
msg['From'] = sender_sina_mail
msg['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 smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header

host_server = 'smtp.sina.com'
sender_sina = 'your_email@sina.com'
pwd = ''

sender_sina_mail = 'your_email@sina.com'
receiver = 'others_email@sina.com'
mail_title = '这是标题'
mail_content = '这是正文'

msg = MIMEMultipart()
msg['Subject'] = Header(mail_title, 'utf-8')
msg['From'] = sender_sina_mail
msg['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 zmail
server = zmail. server(' pythonauto@sina.com', ' 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商城。https://apis.baidu.com/

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

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

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

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

然后去调试

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

结果如下:

 在本地运行就是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

# 天气查询-按地名 Python示例代码
if __name__ == '__main__':
    url = 'https://weatherquery.api.bdymkt.com/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 itchat
itchat.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\envshttps://blog.csdn.net/ljhsq/article/details/122756196

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

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

3.2.2 wxpy部分人可用

参考文章:

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

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

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

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

m微信机器人码源,

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

  • 获取好友地理位置


# pip install wxpy
from 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 = 0
for 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, time
import 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 = {

        '你好': '你好,我是机器人',
        '写作变现': '写作变现系列,真香!http://t.cn/A6xHLdYK',
        '自动化办公': '0基础如何学习自动化办公? http://t.cn/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 time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = '' #添加你的
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 = 'https://oapi.dingtalk.com/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 机器人支持格式

参考文章:

https://www.csdn.net/tags/Ntzacg4sNzkzNzMtYmxvZwO0O0OO0O0O.html

  • 复制机器人的Webhook,用于向这个群发送消息
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX

3.4.1 text格式

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

实例-关键词

import json

import requests

url = 'https://oapi.dingtalk.com/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": "https://www.dingtalk.com/s"
    }
}

实例-关键词

import json

import requests

url = 'https://oapi.dingtalk.com/robot/send?access_token=xx'
headers = {
    "Content-Type": "application/json;charset=utf-8"
}

json_ = {
    "msgtype": "link",
    "link": {
        "text": "这个即将发布的新版本",
        "title": "打卡 时代的火车向前开",
        "picUrl": "",
        "messageUrl": "https://www.dingtalk.com/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](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"
     },
      "at": {
          "atMobiles": [
              "150XXXXXXXX"
          ],
          "atUserIds": [
              "user123"
          ],
          "isAtAll": false
      }
 }

实例-关键词

import json

import requests

url = 'https://oapi.dingtalk.com/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](https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbpic.588ku.com%2Foriginal_pic%2F18%2F10%2F23%2F17e928fa76a63d0908fff97b978d7b27.jpg&refer=http%3A%2F%2Fbpic.588ku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096430&t=eac289fecb0e78922c4e9b33d3d1de7e)\n > ###### 10点20分发布 [天气](http://weathernew.pae.baidu.com/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](https://gimg2.baidu.com/image_search/src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20200114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.cdn.sohucs.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fc2015e8963ef750babd9a73522050) \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
        "btnOrientation": "0",
        "btns": [
            {
                "title": "去点饭",
                "actionURL": "http://hefan.youfantech.cn/w/#/login"
            },
            {
                "title": "不感兴趣",
                "actionURL": "http://hefan.youfantech.cn/w/#/login"
            }
        ]
    }
}

实例-关键词

import json

import requests

url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx'
headers = {
    "Content-Type": "application/json;charset=utf-8"
}

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

实例-关键词

import json

import requests

url = 'https://oapi.dingtalk.com/robot/send?access_token=xx'
headers = {
    "Content-Type": "application/json;charset=utf-8"
}

json_ = {
    "msgtype":"feedCard",
    "feedCard": {
        "links": [
            {
                "title": "悠饭点餐1",
                "messageURL": "https://www.dingtalk.com/",
                "picURL": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20200114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.cdn.sohucs.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fc2015e8963ef750babd9a73522050"
            },
            {
                "title": "打卡 悠饭点餐2",
                "messageURL": "https://www.dingtalk.com/",
                "picURL": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20200114%2F1d9277a398584cdcb1284f274532c064.jpeg&refer=http%3A%2F%2F5b0988e595225.cdn.sohucs.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629096721&t=c0fc2015e8963ef750babd9a73522050"
            }
        ]
    }
}
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 json
import urllib
import requests
import time
import hmac
import hashlib
import base64
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


class Ding:
    """
    钉钉机器人
    """

    def __init__(self):
        # 测试群-钉钉机器人的webhook地址
        self.url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx'
        # secret
        self.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=" + sign

    def 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 = message
        string_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 res

    def 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": "https://tvax4.sinaimg.cn/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 Ding
import datetime
import pytz

run_time = datetime.datetime.now(pytz.timezone('PRC')).strftime("%Y-%m-%d %H:%M:%S")


def lunch():
    """
    提醒
    :return:
    """
    remind = "朋友们,可以准备准备去吃饭啦~"
    Ding().send_message(f"饭点时间到了  {remind}")
    return remind


def dinner():
    """
    提醒晚上点饭
    :return:
    """
    link = 'http://xxx'
    Ding().send_link(link)
  • 执行方式一:
from task.youfan import lunch, dinner
import datetime
import pytz

from apscheduler.schedulers.blocking import BlockingScheduler

run_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 Ding
import datetime
import pytz
from apscheduler.schedulers.blocking import BlockingScheduler

run_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 = 'http://hefan.youfantech.cn/w/#/login'
    Ding().send_link(link)

3.5.3、scheduler简单使用

import time
from apscheduler.schedulers.blocking import BlockingScheduler
 
def 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')
# date

from datetime import datetime
from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler


def job(text):
    print(text)


scheduler = BlockingScheduler(timezone="Asia/Shanghai")
# 在 2019-8-30 运行一次 job 方法
# args=['这个是方法的一个入参']

scheduler.add_job(job, 'date', run_date=date(2021, 7, 20), args=['text1'])
# 在 2019-8-30 01:00:00 运行一次 job 方法

scheduler.add_job(job, 'date', run_date=datetime(2021, 7, 20, 11, 38, 0), args=['text2'])
# 在 2019-8-30 01:00:01 运行一次 job 方法

scheduler.add_job(job, 'date', run_date='2021-7-20 11:39:00', args=['text3'])

scheduler.start()

sched.add_job(func,'interval','date','cron')
# interval


# 在 2021-07-19 20:15:00至2021-07-20 22:17:00期间,每隔1分30秒 运行一次 job 方法
scheduler.add_job(job, 'interval', minutes=1, seconds = 30, start_date='2019-08-29 22:15:00', end_date='2019-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技术及产品找到更多的应用场景,实现产品从打造到引爆的全过程。https://ai.qq.com/

 

 

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

import hashlib
import time
import random
import string
from urllib.parse import quote


def 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 = ''
    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'] = sign
    return params

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

import requests
import interface
def get_content(plus_item):
     # 聊天的API地址
    url = "https://api.ai.qq.com/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':
            break
        answer = get_content(comment)
        print('机器人:' + answer)

 云端部署参考这边文章

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

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汀、人工智能

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值