Sender 发送者对象

Sender 对象可以理解为在外部程序中( 非 wechat_sender 服务,例如你的个人脚本、网站等 )向微信发送消息的发送者

class wechat_sender.Sender(token=None, receivers=None, host=u'http://localhost', port=10245)[源代码]

sender 对象,任何外部程序向微信发送消息都需要初始化 sender 对象:

from wechat_sender import Sender
sender = Sender(token='test', receiver='wechat_name,xxx,xxx')

# 向 receiver 发送消息
sender.send('Hello From Wechat Sender')
Sender.__init__(token=None, receivers=None, host=u'http://localhost', port=10245)[源代码]
参数:
  • token – (选填|str) - 信令,如果不为空请保持和 listen 中的 token 一致
  • receivers – (选填|str) - 接收者,wxpy 的 puid 或 微信名、昵称等,多个发送者请使用半角逗号 ‘,’ 分隔。不填将发送至 default_receiver
  • host – (选填|str) - 远程地址,本地调用不用填写
  • port – (选填|int) - 发送端口,默认 10245 端口,如不为空请保持和 listen 中的 port 一致

指定多个发送者

Sender 的 receiver 可以指定多个发送者,由这个 Sender 发送的消息默认会广播给多个发送者:

# coding: utf-8
import datetime
from wechat_sender import Sender

sender = Sender(token='xxx', receivers='aaa,bbb,ccc,ddd')
sender.send('broadcast message')

注解

使用英文半角逗号分隔多个接收者

Sender.send(message)[源代码]

发送基本文字消息

参数:message – (必填|str) - 需要发送的文本消息
返回:
  • status:发送状态,True 发送成,False 发送失败
  • message:发送失败详情
Sender.delay_send(content, time, title=u'', remind=3600)[源代码]

发送延时消息

参数:
  • content – (必填|str) - 需要发送的消息内容
  • time – (必填|str|datetime) - 发送消息的开始时间,支持 datetime.date、datetime.datetime 格式或者如 ‘2017-05-21 10:00:00’ 的字符串
  • title – (选填|str) - 需要发送的消息标题
  • remind – (选填|int|datetime.timedelta) - 消息提醒时移,默认 1 小时,即早于 time 值 1 小时发送消息提醒, 支持 integer(毫秒) 或 datetime.timedelta
返回:

  • status:发送状态,True 发送成,False 发送失败
  • message:发送失败详情

发送延时消息

某些情况下,我们希望消息可以延迟发送,例如日程、会议提醒等,这时用 Sender.delay_send() 即可满足需求:

# coding: utf-8
import datetime
from wechat_sender import Sender

sender = Sender()
time = datetime.datetime.now()+datetime.timedelta(hours=1)
sender.delay_send(content="测试内容", time=time, title="测试标题", remind=datetime.timedelta(minutes=59))

如果返回正常,1 分钟后你将收到这条消息时间是 1 小时后的消息提醒:

#标题:测试标题
#时间:2017-06-07 12:56:16
#内容:延迟消息测试
Sender.periodic_send(content, interval, title=u'')[源代码]

发送周期消息

参数:
  • content – (必填|str) - 需要发送的消息内容
  • interval – (必填|int|datetime.timedelta) - 发送消息间隔时间,支持 datetime.timedelta 或 integer 表示的秒数
  • title – (选填|str) - 需要发送的消息标题
返回:

  • status:发送状态,True 发送成,False 发送失败
  • message:发送失败详情

发送周期消息

如果希望某条消息周期性发送到微信,可以使用 Sender.periodic_send():

# coding: utf-8
import datetime
from wechat_sender import Sender

sender = Sender()
interval = datetime.timedelta(seconds=10)
sender.periodic_send(content='测试消息', interval=interval, title='测试标题')

如果返回正常,每隔 10 s 你将收到一条消息如下:

# 标题:测试标题
# 内容:周期消息测试test

小技巧

使用 Wechat Sender 的控制命令 查看已注册的延时周期消息

Sender.send_to(content, search)[源代码]

向指定好友发送消息

参数:
  • content – (必填|str) - 需要发送的消息内容
  • search – (必填|str|dict|list)-搜索对象,同 wxpy.chats.search 使用方法一样。例如,可以使用字符串进行搜索好友或群,或指定具体属性搜索,如 puid=xxx 的字典
返回:

  • status:发送状态,True 发送成,False 发送失败
  • message:发送失败详情

发送定向消息

如果你希望某条消息发送给指定的微信好友,你可以使用 Sender.send_to():

# coding: utf-8
import datetime
from wechat_sender import Sender

sender = Sender()
sender.send_to('Hello From Wechat Sender', '微信好友昵称')

如果返回正常,你指定的微信好友将收到这条消息

小技巧

Sender.send_to() 的 search 参数使用方法和 wxpy 的 wxpy.chats().search(). 一致
直接搜索昵称或用综合查询条件均可以搜索好友或群

使用多条件查询好友:

# coding: utf-8
import datetime
from wechat_sender import Sender

sender = Sender()
sender.send_to('Hello From Wechat Sender', search={'city': 'xx', 'nick_name': 'xxx'})

Sender 日志对象

Sender 日志对象可以更平滑的接入外部应用的 log 系统中,基本无需更改代码即可使应用日志发送到微信

class wechat_sender.LoggingSenderHandler(name=None, token=None, receiver=None, host=u'http://localhost', port=10245, level=30)[源代码]

wechat_sender 的 LoggingHandler 对象,可以使用 logging.addHandler() 的方式快速使外部应用支持微信日志输出。在外部应用中:

# spider.py
# 假如在一个爬虫脚本,我们想让此脚本的警告信息直接发到微信

import logging
from wechat_sender import LoggingSenderHandler

logger = logging.getLogger(__name__)

# spider code here
def test_spider():
    ...
    logger.exception("EXCEPTION: XXX")

def init_logger():
    sender_logger = LoggingSenderHandler('spider', level=logging.EXCEPTION)
    logger.addHandler(sender_logger)

if __name__ == '__main__':
    init_logger()
    test_spider()
LoggingSenderHandler.__init__(name=None, token=None, receiver=None, host=u'http://localhost', port=10245, level=30)[源代码]
参数:
  • name – (选填|str) - 标识日志来源,不填将取应用所在服务器地址为名称
  • token – (选填|str) - 信令,如果不为空请保持和 listen 中的 token 一致
  • receiver – (选填|str) - 接收者,wxpy 的 puid 或 微信名、昵称等,不填将发送至 default_receiver
  • host – (选填|str) - 远程地址,本地调用不用填写
  • port – (选填|int) - 发送端口,默认 10245 端口,如不为空请保持和 listen 中的 port 一致
  • level – (选填|int) - 日志输出等级,默认为 logging.WARNING