Python使用Whatsapp?
在今天的移动互联网时代,IM(即时通讯)的应用越来越广泛。无论是职场沟通、家庭联系还是朋友聊天,通过IM已经成为人们非常重要,乃至必不可少的一种沟通方式。当然作为全球最流行的短信应用程序之一,Whatsapp越来越受到人们的青睐。但是,如何使用Python进行Whatsapp沟通呢?
阅读更多:Python 教程
Python Whastapp模块
在Python中,有一些功能强大的沟通工具的封装库。比如用于分析和操作Excel文件的openpyxl
和xlrd
等,用于网页爬取的beautifulsoup
和urllib
等。同样地,Python也有一些可用于Whatsapp沟通的库。在此我们推荐使用yowsup
这个模块,它是一个完整的Python WhatsApp库和命令行客户端。yowsup
是一个底层库,可以轻松地访问WhatsApp网络,并完成与WhatsApp平台的对话。它可以完成许多与WhatsApp通信的任务,如发送和接收消息,发送图片,接收语音消息等等。
安装yowsup
安装yowsup
需要pip,因此你需要确保在你的计算机上已经安装了它。接下来进入命令行,执行以下命令来安装。
pip install yowsup
注意:由于Whatsapp的网络目前只对移动设备和web端开放,因此如果使用Python模块进行沟通,则需要一个已注册的账号。
开始使用yowsup
在yowsup
中,使用EchoLayer
类实现对话。首先,我们会为你呈现一个初始化的步骤:
from yowsup.layers import YowLayerEvent
from yowsup.layers.auth import YowCryptLayer, YowAuthenticationProtocolLayer
from yowsup.layers.network import YowNetworkLayer
from yowsup.layers.protocol_messages import YowMessagesProtocolLayer
from yowsup.layers.protocol_receipts import YowReceiptProtocolLayer
from yowsup.layers.protocol_contacts import YowContactsProtocolLayer
from yowsup.layers.protocol_presence import YowPresenceProtocolLayer
from yowsup.layers.protocol_iq import YowIqProtocolLayer
from yowsup.common import YowConstants
from yowsup.layers.axolotl import YowAxolotlLayer
from yowsup.layers.axolotl.stanzas.axolotl_message import AxolotlMessageProtocolEntity
from yowsup.layers.axolotl.stanzas.axolotl_parsedMessage import AxolotlParsedMessageProtocolEntity
from yowsup.layers.axolotl.interfaces import YowAxolotlInterface
from yowsup.layers import YowLayerEvent
在这个初始化过程中,我们声明了一些需要的层。然后进行以下步骤,以建立和Whatsapp服务的连接。
from yowsup.stacks import YowStackBuilder
stackBuilder = YowStackBuilder()
#以下三种信任相关的枚举可能的选项。
#方式 1. 如果信任静态密钥库,请使用STATIC。
#用法 2. 如果您希望在没有任何警告的情况下信任自签名的证书,请使用DynamicBase。这个在开发中非常有用。
#用法 3. 如果您希望通过输入程序员的输入来实现信任,或以交互方式选择是否信任每个证书并指纹,请使用Interactive。
stack = stackBuilder\
.pushDefaultLayers(True)\
.push(YowAuthenticationProtocolLayer) \
.push(YowMessagesProtocolLayer) \
.push(YowReceiptProtocolLayer) \
.push(YowPresenceProtocolLayer) \
.push(YowIqProtocolLayer) \
.push(YowContactsProtocolLayer) \
.push(YowAxolotlLayer) \
.build()
stack.setCredentials(credentials)
# 异步启动堆栈
stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
stack.loop()
上述代码中我们调用YowStackBuilder
函数来初始化堆栈,fetch的参数为我们需要包含的层。然后,我们设置对应的登陆信息,包括电话号码(phone_number
)和密码(password
)。在这里,credentials
已经被设置了。
接下来,我们通过YowStack
的实例来广播一个YowLayerEvent
的实例——YowNetworkLayer.EVENT_STATE_CONNECT
,以连接Whatsapp服务。最后,我们使用stack.loop()
启动循环。此时,你可以尝试向已经安装了Whatsapp的好友发送一条消息。为了方便调试,可以在pushDefaultLayers()
函数中选择传递True
作为参数。
使用yowsup发送消息
接下来,我们将通过yowsup
模块来完成发送通过Whatsapp发送消息操作。
编写发送消息的程序
首先,我们需要导入所需的参数:
from yowsup.layers.protocol_chatstate.protocolentities import OutgoingChatstateProtocolEntity
from yowsume.layer.protocol_messages.protocolentities import TextMessageProtocolEntity as tme
接下来,我们定义一个sentMessageProtocolEntity
对象:
sentMessageProtocolEntity = tme(
# client端的唯一ID
id='870763981436294-3',
# 当前的消息情况,第一次发送置为1
_type='text',
# 这里输入需要发送的消息
body='Hey! Sending through Python',
# 发送到哪一个好友的手机号码
to='201313811576',
)
在上面的代码中,我们定义和初始化了一个对象sentMessageProtocolEntity
(需要指定好友的手机号码)。接下来,我们开始将这条消息发送到Whatsapp服务:
event = YowLayerEvent(YowMessagesProtocolLayer.EVENT_SEND_MESSAGE, sentMessageProtocolEntity)
self.toLower(event)
发送消息后,我们就可以关闭到Whatsapp服务的连接了:
try:
stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT))
except:
pass
将这些代码组合在一起,我们就可以成功地使用Python来发送Whatsapp消息了。
from yowsup.layers.auth import YowCryptLayer, YowAuthenticationProtocolLayer
from yowsup.layers.network import YowNetworkLayer
from yowsup.layers.protocol_messages import YowMessagesProtocolLayer
from yowsup.layers.protocol_receipts import YowReceiptProtocolLayer
from yowsup.layers.protocol_chatstate import YowChatstateProtocolLayer, YOWSUP_CHATSTATE_ACTIVE
from yowsup.layers.protocol_chatstate.protocolentities import OutgoingChatstateProtocolEntity
from yowsup.layers.protocol_presence import YowPresenceProtocolLayer, PresenceProtocolEntity
from yowsume.layer.protocol_messages.protocolentities import TextMessageProtocolEntity as tme
from yowsup.stacks import YowStackBuilder
from yowsup.common import YowConstants
from yowsup.layers.axolotl import YowAxolotlLayer
from yowsup.layers.axolotl.stanzas.axolotl_message import AxolotlMessageProtocolEntity
from yowsup.layers.axolotl.stanzas.axolotl_parsedMessage import AxolotlParsedMessageProtocolEntity
from yowsup.layers.axolotl.interfaces import YowAxolotlInterface
from yowsup.layers import YowLayerEvent
class YowsupEchoStack(object):
def __init__(self, credentials):
self.credentials = credentials
def start(self):
stackBuilder = YowStackBuilder()
self.stack = stackBuilder.pushDefaultLayers(True).push(
YowAuthenticationProtocolLayer).push(
YowMessagesProtocolLayer).push(YowReceiptProtocolLayer).push(
YowPresenceProtocolLayer).push(YowChatstateProtocolLayer).build()
self.stack.setCredentials(self.credentials)
# 添加该基本信息,以实现客户端在线状态
self.stack.broadcastEvent(YowLayerEvent(YowChatstateProtocolLayer.EVENT_SET, OutgoingChatstateProtocolEntity(YOWSUP_CHATSTATE_ACTIVE)))
# 需要发送消息的好友的手机号码
to_number = "201313811576"
message_text = "Hey! This is a message sent from Python"
sentMessageProtocolEntity = tme(
id="92634850267-1591351716@g.us",
body=message_text,
to=to_number
)
# 发送消息
self.stack.broadcastEvent(YowLayerEvent(YowMessagesProtocolLayer.EVENT_SEND_MESSAGE, sentMessageProtocolEntity))
# 关闭连接
self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT))
self.stack.loop()
if __name__ == "__main__":
# 输入你的电话号码和密码
credentials = ("8613733241085", "L+4lmPjAhT5snglJ84fWLpfGKos=")
whatsappstack = YowsupEchoStack(credentials)
whatsappstack.start()
结论
本篇文章介绍了如何使用Python的yowsup
模块进行Whatsapp沟通,包括连接Whatsapp服务,发送消息等。yowsup
提供了完整全面的功能,因此我们可以在Python中利用它来自动化Whatsapp沟通的过程。这对于那些想要使用数据自动化技术实现Whatsapp沟通的人来说是一个巨大的帮助。